13

関数「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" />

私は得る:

&lt;a href="aaa" /&gt;

しかし、ハッカーのテキストはそのようにエンコードされていませんでした。

だから私の質問は:

  1. htmlentities() 関数が何もしないように、ハッカーはどのようにして html タグを入力したのでしょうか?
  2. テスト用にどのように複製しますか? (上記の質問で答えられる可能性があります)

私はいくつかの調査を行いましたが、ハッカーがテキストを utf-7 などでエンコードした可能性がありますか?

これらと同じリンクが記載された電子メールをすでに数通受け取りました。このハッカーは明らかに私の Web サイトをテストして、XSS などを実行できるかどうかを確認しています。

4

4 に答える 4

7

いい質問です!問題を説明し、解決策を提供するこのリンクを読むことができると思います。

提案された解決策は、ページで使用されている文字セットを(メタタグを介して)ブラウザに指定することです。

于 2013-01-10T15:48:26.340 に答える
1

私はstrip_tagsあなたのニーズにぴったり合っていると思います:http://php.net/manual/en/function.strip-tags.php

于 2013-01-10T16:13:46.750 に答える
0

これは最も洗練された解決策ではありませんが、コードの残りの部分を確認せずに、usertext フィールドに文字列 "href" が含まれているかどうかを確認して拒否することができます。

于 2013-01-10T15:01:02.863 に答える