Citat:
glavince: Testirao sam sledeci kod na PHP 4.3.10 i 5.0.4 i izgleda da ove verzije imaju ugradzenu zastitu od nezeljenih mysql injectiona.
Code:
<?php
echo $_POST['u']."<br>";
echo addslashes($_POST['u'])."<br>";
echo mysql_real_escape_string($_POST['u'])."<br>";
echo addslashes(mysql_real_escape_string($_POST['u']))."<br>";
?>
<form name="test" method="post">
<input type="text" name="u" value="' OR ''='">
<input type="submit" name="ok">
</form>
Output:
\' OR \'\'=\'
\\\' OR \\\'\\\'=\\\'
\\\' OR \\\'\\\'=\\\'
\\\\\\\' OR \\\\\\\'\\\\\\\'=\\\\\\\'
1)Na to sto mislis da PHP ima zastitu to je ovo(php.ini):
Code:
;PHP.ini
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
Naravno to je odlicno :)
2) Nemas potrebu da koristis addslashes u kombinaciji sa mysql_real....
Code:
addslashes(mysql_real_escape_string($_POST['u']))."<br>";
dovoljno je samo:
Code:
mysql_real_escape_string($_POST['u']);
3) Mada I dalje sto se tice ispravnosti ovaj kod nije potpuno siguran:
Code:
mysql_real_escape_string($_POST['u']);
Pitas se zasto ???
Odgovor:
Funkcija mysql_real_escape_string() ocekuje da joj se prosledi
STRING dok svako moze da joj proseledi Array i naravno tu ce aplikacija da pukne..
Dobijes ovaku gresku
Code:
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in ...
Znaci kod i dalje nije siguran ako govorimo o programiranju gde je sve bitno sto se tice S ...
Zato treba proveriti sta je korisnik posalo putem POST/GET/COOKIEs
Code:
//recimo jako dobro dodje ako hoces da izbegnes pomenutu gresku sa Array :)
mysql_real_escape_string(is_string($_POST['u']));
....
Ma o sigurnosti mozes dosta da se pise....
Toliko od mene...
Poz
sale
[Ovu poruku je menjao sale83 dana 18.09.2006. u 09:49 GMT+1]