PDA

Просмотр полной версии : Обход проверки на SQL-inj


FurA
16.11.2006, 18:18
Доброго времени суток, опять я и опять с вопросом о SQL-inj.

Есть функция, которая проверяет входящую переменную на banwords. Очень хочется обойти эту проверку. В примудростях MSSQLа я не разбираюсь, поэтому прошу помощи.

function antiinjection($str) {
$banwords = array ("'", ",", ";", "--");
if ( eregi ( "[a-zA-Z0-9]+", $str ) ) {
$str = str_replace ( $banwords, '', strtolower ( $str ) );
} else {
$str = NULL;
}
return $str;
}


Заранее спасибо

ПиСи
Еще раз повторюсь - платформа MSSQL

_Great_
16.11.2006, 18:21
жестко они :) пробиться вроде никак низя..
хотя странно они сделали - нафиг одновременно и регулярка на буквы-цифры и еще вырезание спецсимволов, которые никогда не попадут под эту регулярку

Alexkz
18.11.2006, 17:33
_Great_, в принципе да, лишнего много, но, видишь,они не сделали эти две фильтрации параллельно, а сделали зависимыми!
Т.е. если переменная $str содержит НЕ только латинские буквы обоих регистров и цифры
if ( eregi ( "[a-zA-Z0-9]+", $str ) )
тогла происходит фильтрация на спец символы!
Хотя я вообще не пойму зачем такая фильтрация...
Я считаю переменные нужно фильтровать
htmlspecialchars() и addslashes()
В мускуле
htmlspecialchars() и если идет запись в базу mysql_escape_string()
Если целлочисленное значение(например id и прочее), тогда только intval() !