関数「htmlentities」を使用してデータをphpファイルに投稿し、ウェブサイトの所有者に安全に電子メールで送信できるようにするテキストボックスを備えたフォームがあります。
問題は、誰かがテキスト内のハイパーリンクを取得でき、htmlentities() がそれを削除しないことです。
これは私のテキストボックスのhtmlです:
<input name="usertext" type="text" />
これは、投稿データを受信する私の PHP コードです (電子メール コードは省略しました。これは問題ではないためです。ハッカーが行ったことを再現できるように、受信したデータを単にエコーするように変更しました。彼がどのように行ったかがわかれば、 、私はそれが起こらないようにする方法を見つけることができます):
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
ハッカーがデータを送信すると、これが結果の html でした (ソース コード - つまり、ブラウザに通常のリンクが表示されたことを意味します)。
<a target="_blank" href="mailto:nyjfvw@fbjgzy.com">nyjfvw@fbjgzy.com</a>
htmlentities() は、誰もがあらゆる種類の html に入ることができないようにするだろうと思っていました。次のようなハイパーリンクを入力した場合:
<a href="aaa" />
私は得る:
<a href="aaa" />
しかし、ハッカーのテキストはそのようにエンコードされていませんでした。
だから私の質問は:
- htmlentities() 関数が何もしないように、ハッカーはどのようにして html タグを入力したのでしょうか?
- テスト用にどのように複製しますか? (上記の質問で答えられる可能性があります)
私はいくつかの調査を行いましたが、ハッカーがテキストを utf-7 などでエンコードした可能性がありますか?
これらと同じリンクが記載された電子メールをすでに数通受け取りました。このハッカーは明らかに私の Web サイトをテストして、XSS などを実行できるかどうかを確認しています。