PHP функция для очистки всех данных - PullRequest
1 голос
/ 14 сентября 2010

Это хорошая или глупая идея - очистить все данные, которые могут быть sqlinjected?Я написал функцию, которая должна это делать, но я никогда не видел, чтобы это было сделано, и мне было интересно, если это плохая идея.Функция, которую я написал:

function sanitizeData()
{
    $_SERVER['HTTP_USER_AGENT'] = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
    foreach(array_keys($_COOKIE) as $key)
    {
          $_COOKIE[$key] = mysql_real_escape_string($_COOKIE[$key]);
    }
    foreach(array_keys($_POST) as $key)
    {
          $_POST[$key] = mysql_real_escape_string($_POST[$key]);
    }    
    foreach(array_keys($_GET) as $key)
    {
          $_GET[$key] = mysql_real_escape_string($_GET[$key]);
    }
}

Ответы [ 2 ]

6 голосов
/ 14 сентября 2010

плохая идея; это в основном другая версия устаревших magic_quotes. Большая часть этих данных, вероятно, не попадет в базу данных, поэтому вы в конечном итоге избежите ненужного и, возможно, двойного выхода.

Вместо этого используйте подготовленные заявления по мере необходимости. Посмотрите на mysqli_stmt (часть mysqli) и PDOStatement (часть PDO).

0 голосов
/ 14 сентября 2010

Также очень важно понимать, что mysql_real_escape_string ничего не очищает.
Применяя эту функцию, вы не делаете данные безопасными.Это очень распространенное недоразумение.
Эта функция просто экранирует разделители строк.Таким образом, он работает только для строк, заключенных в кавычки.Таким образом, настоящая дезинфекция может быть только такой:

$_GET[$key] = "'".mysql_real_escape_string($_GET[$key])."'";

И даже этого недостаточно.

Но, как уже упоминал Мэтт, это будет очень плохая практика.И даже больше: на самом деле, не только входные данные должны быть правильно отформатированы / параметризованы.Это функция базы данных, а не пользовательский ввод!Это не имеет ничего общего с пользовательским вводом.Некоторые данные могут поступать не из пользовательского ввода, а из файла или другого запроса или некоторого сервиса - все это также должно быть правильно отформатировано.Это очень важно понять.

Также вы используете странный способ итерации массивов.
этот более распространенный:

foreach($_GET as $key => $value)
{
      $_GET[$key] = mysql_real_escape_string($value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...