我的方法对于xss

时间:2016-09-03 23:15:10

标签: javascript jquery html ajax xss

我有一个聊天网站,我想知道它是否安全。让我解释一下我的方法是什么。

我使用这个JQuery代码将新消息添加到从ajax请求传入的屏幕:

$("#message").prepend(req.msg);

我知道这很脆弱,但DB上的消息是编码的。所以当我发送有效载荷消息时:

<text>TEST</test>

它以编码方式存储在数据库中:

&lt;text&gt;TEST&lt;/test&gt;

我知道在this回答中绕过.htmlentities()函数的场景。不久:

 <input value=<%= HtmlEncode(somevar) %> id=textbox>

如果我们向此html代码发送a onclick=alert(document.cookie)输入,则会变为:

<input value=a onclick=alert(document.cookie) id=textbox>

因此,在这种情况下,编码< > ; &字符无法保存我们。但是我没有写这样的代码,所以我认为我从这个漏洞中获得了安全感。我的服务器响应这样的JSON:

..."msg" : "<tr><td><b>user:<\b> &lt;text&gt;TEST&lt;/test&gt;<\td><\tr>",...

我将“msg”数据直接(.prepend())放到页面中。我认为这是完全安全的。黑客必须使用< > ; &个字符到XSS。我还将\编码为\\。但也许我错过了一些东西。那是完全安全的吗?

1 个答案:

答案 0 :(得分:1)

号。不是。传输数据的方式使得某人可以输入未转义的HTML标签。假设某人发布了此有效负载:

\n

这将按原样输入数据库,因为\u003cscript\u003ealert(1)\u003c/script\u003e 没有任何内容可以逃脱。但是,当它被放入JSON,并且说JSON被解析时,就会变成这样:

htmlencode

并执行恶意代码。更好的解决方案是对 JSON 的原始数据进行编码,然后在客户端使用HTML转义机制。

随着服务器端在JSON中转义<script>alert(1)</script> ,我认为这是完全安全的。