Являются ли htmlentities () и mysql_real_escape_string () достаточно для очистки ввода пользователя в PHP?

Я очень новичок в PHP, в основном я пытаюсь создать систему комментариев для своего сайта. У меня есть следующая функция:

$ input = $ _POST ['comment'];

function cleanUserInput ($ input) {$ input = mysql_real_escape_string ($ input); $ input = htmlentities ($ input); return $ input; }

Таким образом, вопрос в том, является ли mysql_real_escape_string достаточным для предотвращения SQL-инъекции? и является ли htmlentities () достаточным для предотвращения того, что скрипты, html и стили, введенные пользователем, имеют фактический эффект и просто отображаются в виде текста?

Или мне нужно добавить больше к моей функции, чтобы сделать ввод действительно безвредным?

mysql_real_escape_string недостаточно. Вы также должны учитывать, как вы структурируете свой запрос. Рассмотрим следующий простой сценарий входа:

$username = mysql_real_escape_string($_GET['username']); $password = mysql_real_escape_string($_GET['password']); $sql = "SELECT * FROM users WHERE username = $username AND password = $password"; 

без кавычек около $username и $password , инъекция возможна. (Рассмотрим имя пользователя = test; пользователи DROP TABLE; -. Bye bye data! 🙁

mysql_real_escape_string достаточно от точки санитарной обработки, если вы правильно структурируете свой запрос. Для правильно построенного запроса это отлично работает.

Лучший вопрос: «Что вы пытаетесь предотвратить?» Вы также должны знать, что XSS (межсайтовый скриптинг) хранится и отражается. Если вы сохраняете входные данные от пользователей в своей базе данных и что данные отображаются в браузере, вы, по крайней мере, хотите разделить теги <script> .

В зависимости от вашего языка в сети доступно много фильтров и кода. Если вы используете Rails или CodeIgniter, это делается для вас.

Что касается этого типа безопасности, я рекомендую использовать следующее:

  1. скачать и установить проклятое уязвимое веб-приложение . его приложение, предназначенное для обучения входов и выходов из интернет-хакинга (php-based)
  2. всегда пытайтесь представить символы другой кодировки
  3. всегда пытайтесь представить NULL-байт
  4. избегайте пропускать слишком много параметров в запросе (он может отдать вашу структуру данных)
  5. смотреть журналы
  6. скачать burpsuite – вы больше никогда не будете смотреть на веб-сайт
  7. смотреть болтливо. Сообщения об ошибках mysql отлично подходят для отладки, но они отдают тонну информации – часто они раскрывают весь запрос!

нижняя строка – если она исходит от пользователя, ей нельзя доверять!

Обе функции действительно решают основную часть проблем безопасности, связанных с инъекциями любого рода, и некоторые другие проблемы, однако количество ошибок безопасности, которые может иметь ваше приложение, является ошеломляющим.

Если вы – уродка безопасности, тогда у вас серьезные проблемы, но вы будете в порядке, начав проверку веб-сайта Криса Шрифтлета , который является одним из основных авторитетов в области безопасности PHP во всем мире.

И, наконец, вы можете проверить веб-сайт OWASP и свой проект «Десятка» , где они отслеживают наиболее распространенные угрозы безопасности и постоянно обновляют hw, чтобы бороться с ними,

Надеюсь, я могу помочь.

Если вы используете PHP 5.2 или новее, вы можете использовать встроенную санацию ввода.

Например:

$input = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);

Рекомендации:

  1. filter_input
  2. Доступные фильтры