$text = "( = \" ' & \\ </textarea> : ; . " ;
echo htmlentities($text);
//outputs as -->> ( = " ' & \ </textarea> : ; .
//obviously, htmlentities does nothing to ( ) = ; and .
htmlentities是一个很好的防线,但它在javascript环境中无济于事。
不是编写自己的htmlencode函数来进一步强制执行()。 ;和=要被包围的字符?
通过这种方式,一项功能可以让您全面安全。我想知道这种方法是否存在问题。
我认为如果不使用以下4个字符之一(。),你就不可能正确地使javascript损害你。 =。
答案 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))
,因为语法的每个“层”在解释数据时都会自己解码。