正在逃避<和>足以阻止XSS攻击?

时间:2011-04-17 20:33:20

标签: javascript asp.net xss

我确信这个问题的答案是否定的,但我似乎找不到简单地将<>转换为&lt;和{{1}的方法没有完全阻止反射和持久的XSS。

我不是在谈论CSRF。

如果这不能阻止XSS,你能举例说明如何绕过这种防御吗?

4 个答案:

答案 0 :(得分:10)

答案 1 :(得分:7)

在属性中使用不受信任的字符串(引用")时,您需要将"转义为&quot

否则你可以轻松注入javascript。例如,<a href="{{str}}"> str" onmouseover='something-evil'"

答案 2 :(得分:5)

没有。以下是一些例子,其中<>'"&是不够的:

示例1:

<a href="{{myUrl}}">

XSS攻击:

myUrl = "javascript:alert(1)"

示例2:

<script>var page = {{myVar}};</script>

XSS攻击:

myVar = "1;alert(1)"

有关预防这些攻击的方法,请参阅https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

答案 3 :(得分:3)

不,这还不够。请记住,XSS不仅仅是关于HTML中不受信任的数据,您还可以在JavaScript和CSS中找到它。考虑一下诸如“var myVar = [input];”之类的情况。你可以用这个[输入]值做各种各样的恶意事情而不需要靠近尖括号。在XSS备忘单中还有更多示例:http://ha.ckers.org/xss.html

你在标签中提到过ASP.NET;你想看的是[AntiXSS library][1]。抓住这个并使用适当的输出编码:

Encoder.CssEncode()
Encoder.HtmlEncode()
Encoder.HtmlAttributeEncode()
Encoder.JavaScriptEncode()

等。绝对没有理由尝试在.NET中进行自己的字符替换。