如果服务器端脚本生成以下输出:
<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>
但是因为 换行符也不应该是个问题。我错过了别的什么吗?
答案 0 :(得分:2)
JSON编码数据会更安全,而不是滚动自己的Javascript编码功能。在处理Web应用程序安全性时,滚动自己的几乎总是不是答案。 JSON表示将处理引号和反斜杠以及任何其他特殊字符。
大多数服务器端语言都有JSON模块。有些还专门针对您正在执行的操作,例如.NET框架的HttpUtility.JavaScriptStringEncode
。
如果您要自己推广,那么最好将"
替换为\x22
等字符,而不是更改单引号或删除它们。另外还要考虑一些你需要防范的创造性XSS攻击。
最终结果,无论您使用何种方法,您的数据在呈现给用户时都应保持完整。例如,如果某人的姓名为O"Neil
,那么O'Neil
就没有问题。