javascript和html中的xss编码之间的区别

时间:2015-08-05 19:16:56

标签: javascript html encoding escaping xss

我有一些关于编码/转义字符的问题,以防止跨站点脚本(XSS)。

  1. 可以将用于HTML编码的相同字符编码用于JavaScript吗?例如..在HTML编码中,<被编码为&lt;我是否可以将它用于JavaScript?是否有内置的JavaScript编码apis?

  2. 除了字符<>'"&我应该考虑输出编码的其他字符吗?< / p>

2 个答案:

答案 0 :(得分:1)

  

可以将用于html编码的相同字符编码用于javascript吗?

没有。 HTML不是JavaScript。

  

有没有内置的javascript编码apis?

问题标签中提到的唯一语言是JavaScript和HTML。你永远不应该从JS内部以编程方式生成JavaScript源代码(总有一种更好的方法可以解决问题,这是一种可能的解决方案)。

对于其他语言,JSON编码库通常是前进的方式。

如果您从JS生成HTML,那么再次,您不应该生成原始HTML。使用DOM(createTextNodecreateElementappendChild和朋友)代替。

  

除了字符&lt; ,&gt; ,&#39; ,&#34; ,&amp;我应该考虑输出编码的其他字符

对于HTML文本节点和安全 HTML属性,您只需要担心这一点。

对于HTML中的其他地方,它取决于地点。

当您将URL作为用户输入并将其置于href属性中时,保护XSS有其自身的一系列问题。

当您将用户输入置于onclick属性(通常不是一个好主意)时,防止XSS会产生另一组问题。

OWASP is a good starting point

答案 1 :(得分:0)

防止XSS系列攻击的编码取决于您注入用户提供的内容的上下文语法。如果您要将内容放入JavaScript源,那么不,您不能使用HTML转义,因为HTML语法与JavaScript语法完全不同。同样,如果您在HTML中包含用户提供的内容,则无法使用JavaScript语法来逃避它。

在JavaScript源代码中包含用户提供的内容的最佳方法可能是使用JSON编码工具。