Лучше использовать параметризованные запросы, но если приложение уже написано, дорого возвращаться и переписывать каждый запрос. Это экономически выгодное исправление, и оно будет работать в большинстве случаев, просто проверьте свой код с помощью Wapiti (с открытым исходным кодом), Acunetix ($) или NTOSpider ($$$).
Помните, что вы можете передавать массивы через GET. ? Вар [1] = тест ;.
function escape_deep($value)
{
$value = is_array($value) ?
array_map('escape_deep', $value) :
mysql_real_escape_string($value);
return $value;
}
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
if(!get_magic_quotes_gpc()){
$_GET=escape_deep($_GET);
}else{
$_GET=stripslashes_deep($_GET);
$_GET=escape_deep($_GET);
}
Если magic_quotes_gpc включен, вы не хотите добавлять косые черты дважды. Также имейте в виду, что magic_quotes и этот метод побега не останавливает все. Например, этот запрос все еще уязвим:
mysql_query("select name from usesr where id=".$_GET[id]);
эксплуатируют:
http://localhost/vuln.php?id=1 and sleep(500)
патч:
mysql_query("select name from usesr where id='$_GET[id]'");