$text = "( = \" ' & \\ </textarea> : ; . " ;
echo htmlentities($text);
//outputs as -->> ( = " ' & \ </textarea> : ; .
//obviously, htmlentities does nothing to ( ) = ; and .htmlentities是一条很好的防线,但它在javascript上下文中没有帮助。
不是应该编写自己的htmlencode函数来进一步执行()吗?;和=也要编码的字符?
这样一来,一个函数就可以让你全盘安全。我想知道这种方法是否有问题。
我假设您不可能在不使用以下4个字符之一的情况下纠正伤害您的javascript。);=。
发布于 2012-03-27 03:57:13
不是应该编写自己的htmlencode函数来进一步执行()吗?;和=也要编码的字符?
不是的。JavaScript是JavaScript,HTML是HTML。
使数据安全地放入JavaScript中所需的转义序列将导致无关字符出现在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'发布于 2012-03-27 04:59:51
您需要基于上下文的不同编码。没有一个“通用”的编码器可以一次处理所有的事情。危险的不是人物,而是他们所处的语境。
JavaScript中的值需要json_encode($value) (像addslashes()这样的其他函数不能处理所有的边缘情况。json_encode按照HTML <script>的要求对</进行转义)。
HTML属性的JavaScript中的值需要这两个值:htmlspecialchars(json_encode($value)),因为在解释数据时,语法的每个“层”都会进行自己的解码。
https://stackoverflow.com/questions/9878778
复制相似问题