У меня есть форма с текстовым полем, которое отправляет данные в файл 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" />
Но хакерский текст не был закодирован так.
Итак, мои вопросы:
- Как хакер ввел теги html, чтобы функция htmlentities() ничего не сделала для него?
- Как я могу его повторить для тестирования? (на этот вопрос может ответить ответ)
Я провел некоторое исследование, и, возможно, хакер закодировал его текст в utf-7 или что-то в этом роде?
Я уже получил несколько писем с этими же ссылками. Этот хакер, очевидно, тестирует мой сайт, чтобы узнать, может ли он сделать XSS или что-то в этом роде.