首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSS和htmlentities

XSS和htmlentities
EN

Stack Overflow用户
提问于 2012-03-27 03:53:26
回答 2查看 880关注 0票数 0
代码语言:javascript
复制
$text = "( = \" ' & \\  </textarea> : ; . " ;

echo htmlentities($text);   

//outputs as -->>     ( = &quot; ' &amp; \  &lt;/textarea&gt; : ; . 

//obviously, htmlentities does nothing to ( ) = ; and .

htmlentities是一条很好的防线,但它在javascript上下文中没有帮助。

不是应该编写自己的htmlencode函数来进一步执行()吗?;和=也要编码的字符?

这样一来,一个函数就可以让你全盘安全。我想知道这种方法是否有问题。

我假设您不可能在不使用以下4个字符之一的情况下纠正伤害您的javascript。);=。

EN

回答 2

Stack Overflow用户

发布于 2012-03-27 03:57:13

不是应该编写自己的htmlencode函数来进一步执行()吗?;和=也要编码的字符?

不是的。JavaScript是JavaScript,HTML是HTML。

使数据安全地放入JavaScript中所需的转义序列将导致无关字符出现在HTML中。

需要确保数据安全的字符引用会破坏JavaScript或导致在JavaScript的输出中出现不正确的字符。

只有当您将原始数据插入到JavaScript中,然后将该JavaScript插入到HTML时,或者当您将所述数据插入到HTML中,然后再插入到JS中时,这两个函数才有意义。(然后需要按顺序和正确的顺序对数据运行这两个函数)。

我假设您不可能不使用以下4个字符中的一个来纠正对您有害的javascript。);=。

危险的假设

代码语言:javascript
复制
foo = [1,2,3];
Return value: [1, 2, 3]

Object--
Return value: NaN

foo = [1,2,3]
Error report: Uncaught TypeError: Object NaN has no method 'getOwnPropertyNames'
票数 0
EN

Stack Overflow用户

发布于 2012-03-27 04:59:51

您需要基于上下文的不同编码。没有一个“通用”的编码器可以一次处理所有的事情。危险的不是人物,而是他们所处的语境。

JavaScript中的值需要json_encode($value) (像addslashes()这样的其他函数不能处理所有的边缘情况。json_encode按照HTML <script>的要求对</进行转义)。

HTML属性的JavaScript中的值需要这两个值:htmlspecialchars(json_encode($value)),因为在解释数据时,语法的每个“层”都会进行自己的解码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9878778

复制
相关文章

相似问题

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