JS / XSS:将用户提供的字符串分配给变量时;是否足以替换<,>和字符串分隔符?

时间:2013-10-21 16:37:48

标签: javascript security xss

如果服务器端脚本生成以下输出:

<script>
var a = 'text1';
var b = 'text2';
var c = 'text3';
</script>

,并且值(在此示例中为“text1”,“text2”和“text3”)是用户提供的(通过HTTP GET / POST),是否足以删除&lt;和&gt;从输入和替换

'

' + "'" + '

为了安全使用XSS? (这是我的主要问题)

我特别担心反冲突没有被逃脱,因为攻击者无法逃脱尾随'。在这种情况下,这可能是一个潜在的问题吗?如果变量分配由换行符分隔,则攻击者可以提供值

text1
text2\
;alert(1);//

并最终使用像

这样的JS代码
<script>
var a = 'text1'; var b = 'text2\'; var c = ';alert(1);//text3';
</script>

但是因为 换行符也不应该是个问题。我错过了别的什么吗?

1 个答案:

答案 0 :(得分:2)

JSON编码数据会更安全,而不是滚动自己的Javascript编码功能。在处理Web应用程序安全性时,滚动自己的几乎总是不是答案。 JSON表示将处理引号和反斜杠以及任何其他特殊字符。

大多数服务器端语言都有JSON模块。有些还专门针对您正在执行的操作,例如.NET框架的HttpUtility.JavaScriptStringEncode

如果您要自己推广,那么最好将"替换为\x22等字符,而不是更改单引号或删除它们。另外还要考虑一些你需要防范的创造性XSS攻击。

最终结果,无论您使用何种方法,您的数据在呈现给用户时都应保持完整。例如,如果某人的姓名为O"Neil,那么O'Neil就没有问题。