如何输出HTML但防止XSS攻击

Cyn*_*ial 0 php xss

我写了一个PHP脚本来获取电子邮件内容.

这些内容是HTML格式.

我想显示内容,如下所示

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

如您所见,它将导致XSS攻击.但是如果我使用htmlspecialchars函数,它将无法显示正确的HTML格式,在这种情况下我该怎么做?谢谢.

MrC*_*ode 5

HTMLPurifer可以做到这一点:

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

$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
Run Code Online (Sandbox Code Playgroud)

它需要脏HTML(即可能包含Javascript)并删除任何脚本.

PHP没有任何本机或内置的东西,可以像HTMLPurifier一样删除Javacript.您可以使用DOMDocument,但这将是一项冗长的任务,因为Javascript可以在某些属性中执行(onerror,onclick),而不仅限于此<script></script>.