Функция очистки: какие-то дыры?


Я придумал эту небольшую функцию сделать представленный строки пользовательского безопасный для MySQL. Я был бы благодарен, если кто-то может указать на дыры в безопасности в этом. Я проверил его, и он счастливо заменяет кавычки и тому подобное. Единственная проблема, которую я вижу, является отсутствие экранирования амперсанда, но это не важно, верно?

$keywords = array("delete from", "drop table", ";", "=");
$safeKeywords = array("delete from", "drop table", "&#59;", "=");

function dbSanitise($field)
{
    global $keywords, $safeKeywords;

    $sanitised = str_ireplace($keywords, $safeKeywords, $field);
    $sanitised = htmlentities($sanitised, ENT_QUOTES);
    $sanitised = mysql_real_escape_string($sanitised);

    return $sanitised;
}

Поставив эту строку в функцию выше:

Привет мир удалить из удалить из ; = "' "

Дает это:

Привет мир удалить из&nbsp&#59;от удаления и nbsp&#59;от &#59; = "' "

Что я могу только видеть, как вполне приемлемо для операции INSERT в MySQL.

Если я ошибаюсь, дайте мне знать! Спасибо за любую помощь.



299
2
задан 4 июня 2011 в 11:06 Источник Поделиться
Комментарии
2 ответа

Вы не должны пытаться думать о всех плохих вещей, которые могут быть в запросе, вы никогда не будете думать о них все.

Как она стоит, ваша замена не имеет смысла (как некоторые из ваших commentors отметили). Вы можете иметь любой текст, который вы хотите внутри строки, символы, которые могут привести к строке, чтобы быть экранированы, которые являются проблемой.

использования mysql_real_escape_string делает все, что нужно. Вы не должны реализовать свои собственные функции. Еще лучше использовать подготовленные операторы.

4
ответ дан 20 июня 2011 в 03:06 Источник Поделиться

Также проверьте ручной фильтрации в PHP:
http://php.net/manual/en/book.filter.php

1
ответ дан 18 июня 2011 в 09:06 Источник Поделиться