防止XSS攻击

wfa*_*eed 3 php xss

这段代码是否安全可以防止XSS攻击?

<?php
   $string = "<b>hello world!</b>";
   echo "without filtering:".$string;
   echo "<br>";
   $filtered = htmlspecialchars($string); // insert into database filtered
   echo "After filtering:".$filtered;
   echo "<br>";
   $de_filtering = htmlspecialchars_decode($filtered); //retrieve from database and display
   echo "After de-filtering:".$de_filtering;        
  ?>
Run Code Online (Sandbox Code Playgroud)

Tim*_*lla 8

在插入数据库时​​,不应对HTML-Specialchars进行编码,这样就可以操纵数据(编辑数据集时可能会有所不同).你应该在显示时对它们进行编码.

但是,htmlspecialchars()只要你不忘记使用它就足以阻止XSS了.然而,您使用它的方式与以前一样安全.通过编码版本阻止XSS,数据库不关心它.

  • 几乎所有你说的都是对的,但仔细看看OP的代码 - 他使用`htmlspecialchars()`的方式,它确实*不*阻止XSS (4认同)

Erl*_*end 6

不,XSS 独立于数据库。为了避免 SQL 注入,您需要使用 mysql_real_escape_string 或使用准备好的语句进行转义,但为了避免 XSS,您需要在输出到 HTML 时进行转义。

还有一些问题。查看OWASP XSS 预防备忘单。它解释了如何针对不同的上下文进行转义。

如果您在标签之间输出不受信任的数据,htmlspecialchars/htmlentities 会保护您,但如果您在 JavaScript 事件处理程序中输出它,则不会保护您,如下所示:

&lt;button onclick="confirm('do you want to delete &lt;?php echo htmlspecialhars($untrusted_data) ?&gt;')"&gt;
Run Code Online (Sandbox Code Playgroud)

这是因为您正在转义 HTML 而不是 javascript。