首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止XSS攻击

防止XSS攻击
EN

Stack Overflow用户
提问于 2012-01-20 03:56:16
回答 3查看 6.8K关注 0票数 3

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

代码语言:javascript
运行
复制
<?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;        
  ?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-20 03:58:28

在插入到数据库中时,您不应该对HTML-Specialchars进行编码,因为数据是以这种方式操作的(在编辑数据集时可能会有所不同)。您应该在显示时对它们进行编码。

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

票数 8
EN

Stack Overflow用户

发布于 2012-01-21 03:08:12

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

这里也有一些陷阱。看一看OWASP XSS prevention cheat sheet。它解释了如何在不同的上下文中进行转义。

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

代码语言:javascript
运行
复制
&lt;button onclick="confirm('do you want to delete &lt;?php echo htmlspecialhars($untrusted_data) ?&gt;')"&gt;

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

票数 4
EN

Stack Overflow用户

发布于 2012-01-20 03:58:41

不-在将数据放入数据库之前对数据进行过滤(这是不必要的),但在输出数据时取消过滤。

将数据不过滤地存储在数据库中,并在输出时对其进行转义:

代码语言:javascript
运行
复制
 echo htmlspecialchars($unfiltered_data_from_database);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8932431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档