PHP/MySQL - hack-sikker

Tags:    php

<< < 12 > >>
Har fået sat en masse koder sammen og har fået det her til at virke... Koden er bare et udsnit af et script, hvor der søges efter noget i en tabel. Og i skal ikke tænke på at der selvfølgelig mangler noget osv. , men tilbage til spørgsmålet: Hvordan får jeg gjort den sikker?
- så man ikke kan gå ind i databasen og slette det hele osv? Kan man bare udelukke nogle tegn eller hvordan? - der er også lidt mere med sikkerheden jeg gerne vil have hjælp til, men det vender vi tilbage til :P
Fold kodeboks ind/udKode 


På forhånd tak :)



Indlæg senest redigeret d. 13.03.2007 14:25 af Bruger #11056
11 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
HæHæ, Chris Pedersen du beder jo næsten folk om at gå ind og ødelægge det hele ved du skriver navn og pass og det hele :),

når men tip slet det hurtigst muligt,

Mvh. k





Nogle lidt sikre metoder:

Fold kodeboks ind/udKode 


som du kan se, bruger jeg noget der hedder safesql. Det er en superlækker klasse, der ikke nok med giver dig en ekstra sikkerhed i din SQL, men det giver også en pæn oversigt over den sql du er i gang med at foretage. Se mere på: http://phpinsider.com/php/code/SafeSQL/

Overordnet modvirker det sql-injections super perfekt, som synes at være temaet her. :)



Det nytter ikke noget at caste en string til en integer, da den vil miste værdien, og blive 0. Gnu gør det da man bevidst ved at det er et integer der modtages, og at man kan "sikre" det ved brug af et cast til integer. Hvis der dog er bogstaver i den lille streng man caster med, så vil castet forårsage at $realId bliver 0. Hvis du vil have at den tager tal, selvom der er bogstaver bliver du nødt til at lave en funktion. Jeg lavede netop denne funktion, for et stykke tid siden, da der var en anden der skulle bruge den...
Fold kodeboks ind/udKode 




det er nok ikke sååå smart at skrive mit username samt password til databasen i et offentligt forum !



wups - havde jeg sgu ikke lige set :)



Du kan vælge at replace specielle tegn, der kan bruges i SQL-sammenhæng, som f.eks. ', og andet.
Du kan også vælge at bruge funktionen, mysql_real_escape_string, der automatisk fjerner alle de specielle tegn der kunne bruges i en evt. SQL-injection.
Du kan læse mere om funktionen her; http://dk.php.net/manual/en/function.mysql-real-escape-string.php

Et lille eksempel:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 13.03.2007 14:51 af Bruger #8422
takr, men hvad hjælper det at sætte et par \\'er ind foran "'er osv. man behøver da ikke at bruge dem for at lave rod i det hele gør man? :S



Det kaldes at escape et tegn. Hvis du ikke escapede f.eks. \\-tegnet, så kunne en ond bruger gøre sådan noget her: \\n. Det ville blive til et linjeskift. Hvis der derimod bruges escapes, bliver det til \\\\n, og der vises på skærmen "\\n".

Det var bare et lamt eksempel btw :)



hmm, det ser jo godt ud ... forstår det bare ikk rigtigt :S heeh, men den lille "(int)" løser vel mit problem... så ska jeg bare lave et par variabler om så de er baseret på tal - eller er det stadig ikke helt sikkert så?



ja og 0 bliver bare standard så :P



<< < 12 > >>
t