Я очень новичок в 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, это делается для вас.
Что касается этого типа безопасности, я рекомендую использовать следующее:
нижняя строка – если она исходит от пользователя, ей нельзя доверять!
Обе функции действительно решают основную часть проблем безопасности, связанных с инъекциями любого рода, и некоторые другие проблемы, однако количество ошибок безопасности, которые может иметь ваше приложение, является ошеломляющим.
Если вы – уродка безопасности, тогда у вас серьезные проблемы, но вы будете в порядке, начав проверку веб-сайта Криса Шрифтлета , который является одним из основных авторитетов в области безопасности PHP во всем мире.
И, наконец, вы можете проверить веб-сайт OWASP и свой проект «Десятка» , где они отслеживают наиболее распространенные угрозы безопасности и постоянно обновляют hw, чтобы бороться с ними,
Надеюсь, я могу помочь.
Если вы используете PHP 5.2 или новее, вы можете использовать встроенную санацию ввода.
Например:
$input = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);
Рекомендации: