Это хорошая практика, чтобы также обрезать входные данные формы и экранирующие символы? - PullRequest
2 голосов
/ 14 апреля 2011

Как это,

$type = mysqli_real_escape_string($dbc, trim($_POST['type']));

Повышает ли безопасность тримминг или mysqli_real_escape_string уже достаточно?

Ответы [ 5 ]

2 голосов
/ 14 апреля 2011
  • mysqli_real_escape_string недостаточно.

  • и это крайне плохая идея сделать это для ввода формы

  • его вообще не следует использовать

Говоря об экранировании, mysql [i] _real_escape_string не является функцией make-my-data-magical-safe (), но она просто экранирует разделители string для предотвращения строк быть сломленным Так, например, это не поможет с числами.
Фактически, это не имеет ничего общего с атаками внедрения, потому что эта функция должна использоваться независимо от какой-либо атаки, но только для того, чтобы обеспечить соответствие синтаксических правил SQL ваших строк. И это не поможет с другими частями запроса.

Кроме того, оно не имеет ничего общего ни с «входными данными форм», ни с формами в целом. Это функция, связанная с базой данных, а не связанная с формами. строк , которые , идущие на запрос , должны быть экранированы, и ничего больше.

В любом случае его вообще не следует использовать, так как вместо этого вы должны использовать подготовленные операторы mysqli.

И, да, - trim () не имеет ничего общего с безопасностью, скорее, чтобы данные выглядели аккуратно.

2 голосов
/ 14 апреля 2011

mysqli_real_escape_string будет экранировать только строку, чтобы предотвратить инъекционные атаки. Если вам не нужны беспризорные пробелы, вы, вероятно, тоже должны обрезать их.

1 голос
/ 14 апреля 2011

Использование mysqli_real_escape_string достаточно для предотвращения внедрения в вашу базу данных.

При отображении отправленного значения пользователю, вы должны обязательно использовать htmlentities для него.

0 голосов
/ 14 апреля 2011

Ваш пример поможет предотвратить SQL-инъекцию, так как любые «специальные символы» будут экранированы (поэтому «становится \» и т. Д.), Но не будут препятствовать XSS (межсайтовому скриптингу), так как он все еще может содержать HTML такие символы, как <и>

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

<?php
    //Get the variable
    $userValue = $_GET['value'];
    //Remove any preceding/leading whitespace
    $userValue = trim($userValue);
    //Convert any HTML characters to their entity value
    $userValue = htmlspecialchars($userValue);
    //Escape any SQL special characters
    $userValue = mysqli_real_escape_string($dbc, $userValue);
?>

Для получения дополнительной информации о XSS, перейдите по этой ссылке https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

Другим полезным ресурсом является эта библиотека PHP, она предназначена для фильтрации любого пользовательского ввода для защиты (в значительной степени) от всех методов XSS http://htmlpurifier.org/

0 голосов
/ 14 апреля 2011

Обрезка пробелов в строке ничего не сделает для повышения безопасности.экранирования строки должно быть достаточно для предотвращения внедрения sql.

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