0

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

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

,并且值(在本例中为“text1”、“text2”和“text3”)是用户提供的(通过 HTTP GET/POST),是否足以从输入中删除 < 和 > 并替换

'

' + "'" + '

为了免受 XSS 攻击?(这是我的主要问题)

我特别担心反斜杠没有被转义,因为攻击者可以逃脱尾随的 '. 在这种情况下,这可能是一个潜在的问题吗?如果变量赋值没有用换行符分隔,攻击者可以提供值

text1
text2\
;alert(1);//

并最终得到有效的 JS 代码,例如

<script>
var a = 'text1'; var b = 'text2\'; var c = ';alert(1);//text3';
</script>

但是因为有换行符也不应该是一个问题。我还缺少其他东西吗?

4

1 回答 1

2

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

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

如果您要自己滚动,那么最好替换字符,例如"to \x22,而不是更改单引号或删除它们。还要考虑您需要防御的大量创造性 XSS 攻击。

无论您使用哪种方法,最终结果是您的数据在呈现给用户时应该保持完整。例如,O"Neil如果某人的名字是O'Neil.

于 2013-10-21T16:54:55.467 回答