Ответ 1
Хороший вопрос! Я думаю, вы можете прочитать ссылку которая объясняет проблему и дает решение.
Предлагаемое решение - указать браузеру (через метатег), который используется на странице.
У меня есть форма с текстовым полем, которое отправляет данные в файл php, который использует функцию "htmlentities", чтобы сделать ее безопасной для электронной почты владельцу веб-сайта.
Проблема заключается в том, что кому-то удалось получить гиперссылку в тексте, а htmlentities() не удаляет ее.
Это мое текстовое поле html:
<input name="usertext" type="text" />
Это мой PHP-код, который получает почтовые данные (я оставил код электронной почты из-за того, что это не проблема). Я изменил его, чтобы просто повторить полученные данные, чтобы попытаться воспроизвести то, что сделал хакер. он сделал это, я могу найти способ остановить его от происходящего):
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
Теперь хакер отправляет некоторые данные, и это был результат html (исходный код - это означает, что он показывал обычную ссылку в браузере):
<a target="_blank" href="mailto:[email protected]">[email protected]</a>
Я думал, что htmlentities() всегда будет препятствовать тому, чтобы кто-либо мог вводить html любого типа. Если я введу гиперссылку, например:
<a href="aaa" />
Я получаю:
<a href="aaa" />
Но хакерский текст не был закодирован так.
Итак, мои вопросы:
Я провел некоторое исследование, и, возможно, хакер закодировал его текст в utf-7 или что-то в этом роде?
Я уже получил несколько писем с этими же ссылками. Этот хакер, очевидно, тестирует мой сайт, чтобы узнать, может ли он сделать XSS или что-то в этом роде.
Хороший вопрос! Я думаю, вы можете прочитать ссылку которая объясняет проблему и дает решение.
Предлагаемое решение - указать браузеру (через метатег), который используется на странице.
Я думаю, что strip_tags
точно соответствует вашим потребностям: http://php.net/manual/en/function.strip-tags.php
Это не самое элегантное решение, но, не видя остальной части вашего кода, вы можете проверить, содержит ли поле usertext строку "href" и отрицает ее.
Будет ли htmlspecialchars() делать трюк? Эта статья в W3Schools, похоже, предполагает, что.