0

メールの内容を取得するための PHP スクリプトを作成しました。

これらのコンテンツは HTML 形式です。

以下のようにコンテンツを表示したい

<?php 
$email_content = '
    <html>
        <script>alert("XSS");</script>
        <body>
            <div>Line1</div>
            <div>Line2</div>
        </body>
    </html>
';
echo $email_content;
?>

ご覧のとおり、XSS 攻撃を引き起こします。しかし、htmlspecialchars 関数を使用すると、正しい HTML 形式が表示されません。この場合はどうすればよいですか? ありがとう。

4

2 に答える 2

5

HTMLPuriferはそれを行うことができます:

require_once '/path/to/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);

ダーティな HTML (Javascript を含む可能性がある) を取得し、スクリプトを削除します。

PHP には、HTMLPurifier のように Javacript を削除できるネイティブまたは組み込みの機能はありません。DOMDocument を使用することもできますが、Javascript はいくつかの属性 (onerror、onclick) で実行でき、<script></script>.

于 2013-06-20T07:37:46.690 に答える
1

strip_tags()関数を使用して、ユーザーに追加してもらいたいタグのみを許可する必要があります。

echo strip_tags($text, '<p><a>');

この行は<p><a>他のすべてのタグが削除されることを許可し、タグを付けます。

htmlspecialchars()の動作はまったく異なります。

マニュアルから:

実行される翻訳は次のとおりです。

 '&' (ampersand) becomes '&amp;'
 '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
 "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set.
 '<' (less than) becomes '&lt;'
 '>' (greater than) becomes '&gt;'

XSS 防止CSRF防止に関する非常に優れた記事があり、それを読んでください。

于 2013-06-20T07:43:10.173 に答える