XSS和htmlentities

时间:2012-03-26 19:53:26

标签: javascript xss html-entities

$text = "( = \" ' & \\  </textarea> : ; . " ;

echo htmlentities($text);   

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

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

htmlentities是一个很好的防线,但它在javascript环境中无济于事。

不是编写自己的htmlencode函数来进一步强制执行()。 ;和=要被包围的字符?

通过这种方式,一项功能可以让您全面安全。我想知道这种方法是否存在问题。

我认为如果不使用以下4个字符之一(。),你就不可能正确地使javascript损害你。 =。

2 个答案:

答案 0 :(得分:0)

  

不是编写自己的htmlencode函数来进一步强制执行()。 ;和=要被包围的字符?

没有。 JavaScript是JavaScript,HTML是HTML。

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

字符引用需要使数据安全放入HTML中,否则会破坏JavaScript或导致错误的字符出现在JavaScript的输出中。

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

  

我认为如果不使用以下4个字符之一(。),你就不可能正确地使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'

答案 1 :(得分:0)

您需要根据上下文进行不同的编码。没有“通用”编码器可以同时处理所有事情。这不是危险的角色,而是它们被解释的背景。

JavaScript中的值需要json_encode($value)addslashes()等其他功能无法处理所有边缘情况。json_encode根据HTML </的要求转义<script> )。

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

相关问题