Sikkerhed, tanke til overvejelse

Tags:    php

Hej Udviklere,

jeg kom lige til at tænke på noget.

For at undgå SQL injections i MySQL bruger man altid mysql_real_escape_string, men hvis man kun overfører et tal, f.eks. et id, vil det så ikke være et stort resourcespil at bruge mysql_real_escape_string i forhold til f.eks. is_numeric? is_numeric returner false hvis der er tale om en string.

Så jeg vil mene at det ville være mere hensigts mæssig at bruge det i stedet for, så længe der kun er tale om tal.

Mvh Martin



Det kan man - tilsyneladende - godt tillade sig,
men man skal sikre, at når tallet bliver smidt i en SQL query, at der er quotes (" eller ') rundt om, ellers vil SQL komme med en syntaksfejl.

Be careful when using is_numeric() to escape SQL strings. is_numeric('0123') returns true but 0123 without quotes cannot be inserted into SQL. PHP interprets 0123 without quotes as a literal octal number; but SQL just throws a syntax error.


- Taget fra et indlæg på:
http://dk.php.net/manual/en/function.is-numeric.php




Indlæg senest redigeret d. 07.06.2008 14:10 af Bruger #8331
men hvis man kun overfører et tal, f.eks. et id, vil det så ikke være et stort resourcespil at bruge mysql_real_escape_string i forhold til f.eks. is_numeric? is_numeric returner false hvis der er tale om en string.


Joo, enten kan du tjekke med is_numeric, men hvis det er en værdi som under alle omstændigheder skal være numerisk kan du også bare caste såles:
Fold kodeboks ind/udKode 


Læs evt mere her: http://dk2.php.net/manual/en/language.types.integer.php#language.types.integer.casting



Du kan også bare bruge prepared statements med det nye mysqli eller pdo interface. Der skal du ikke escape dataen, for den bliver sendt seperat fra selve queriet. Dog skal du huske at fjerne slashes med stripslashes, hvis magic quotes er slået til.



Jeg har altid quotes med, men det var mere bare for at om det ikke ville optimere i forhold til mysql_real_escape_string



t