Привет всем!
Не далее чем вчера у меня неожиданно образовалась острая потребность фильтровать все полученные данные еще до открытия SQL соединения.
Естественно попытка все пропустить через mysql_real_escape_string(str)
приведет к вполне ожидаемому результату - ошибке. Следовательно ее надо заменить альтернативной функцией. Первое что, мне пришло в голову это - addslashes(str) которая,аналогично mysql_real_escape_string() экранирует все, как двойные, так и одинарные кавычки. На ней и решил остановится. Но, как говорится: Одна голова хорошо, а две во сто крат лучше. И постольку - поскольку я отнюдь не страдаю излишней самоуверенностью то решил обратится к коллективному разуму и узнать Ваше профессиональное мнение по поводу всей выше описанной затеи.
Имеется в ассортименте следующий код который по мнению пользователей портала dcms.su и моему мнению должен работать безукоризненно и совершенно безопасно не зависимо от ситуации и поставленных задач.
То есть, ниже описаная конструкция приведет к полной фильтрации с учетом экранирования всего лишнего?
<?php
function escape_string($str)
{
if(is_numeric($str))
$str = (int)$str;
else
{
$str = urldecode($str);
if(preg_match('#\r\n|\r|\n#', $str))
$str = preg_replace('#\r\n|\r|\n#', ' ', $str);
$str = addslashes(trim($str));
}
return $str;
}
$_GET = array_map('escape_string', $_GET);
$_POST = array_map('escape_string', $_POST);
?>
И в следующий код уже никак нельзя будет сделать SQl иньекцию?
<?php
if($db -> query("INSERT INTO `tabla` (`id`, `name`) VALUES ('".$_POST['id']."', '".$_POST['name']) !== false)
print 'Запись осуществлена';
?>
Я всем Вам безгранично за ранее благодарен. Помните, для меня мнение каждого из Вас драгоценно)
Changed: Момору (28.03.2013 / 15:57)