Javascript 我的方法对xss完全安全吗

Javascript 我的方法对xss完全安全吗,javascript,jquery,html,ajax,xss,Javascript,Jquery,Html,Ajax,Xss,我有一个聊天网站,我想知道它是否是XSS安全的。让我解释一下我的方法 我使用此JQuery代码向屏幕添加从ajax请求传入的新消息: $("#message").prepend(req.msg); 我知道这是易受攻击的,但数据库上的消息是经过编码的。所以当我发送有效载荷信息时: <text>TEST</test> 我知道有一个场景在回答中绕过了.htmlentities()函数。很快: <input value=<%= HtmlEncode(someva

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

我使用此JQuery代码向屏幕添加从ajax请求传入的新消息:

$("#message").prepend(req.msg);
我知道这是易受攻击的,但数据库上的消息是经过编码的。所以当我发送有效载荷信息时:

<text>TEST</test>
我知道有一个场景在回答中绕过了.htmlentities()函数。很快:

 <input value=<%= HtmlEncode(somevar) %> id=textbox>
所以在这个场景中,编码
>&字符无法保存我们。但是我没有这样写我的代码,所以我认为我没有那个漏洞。我的服务器响应JSON,如下所示:

..."msg" : "<tr><td><b>user:<\b> &lt;text&gt;TEST&lt;/test&gt;<\td><\tr>",...
…“msg”:“用户:文本测试/测试”,。。。
我直接将“msg”数据添加到页面中。我认为这是完全安全的。黑客必须使用
>&字符到XSS。我还将
\
编码为
\
。但也许我错过了什么。那是完全安全的吗?

不,不是。数据传输的方式使得有人可以输入未经转换的HTML标记。假设有人发布了此有效负载:

\u003cscript\u003ealert(1)\u003c/script\u003e
这将按原样输入数据库,因为
htmlencode
无需转义。然而,当它被放入JSON中,并且所说的JSON被解析时,它变成了这样:

<script>alert(1)</script>
警报(1)
并执行恶意代码。更好的解决方案是将原始数据编码为JSON,然后在客户端使用HTML转义机制


使用JSON中的服务器端转义
\
,我认为这是完全安全的。

我不会将HTML转义数据存储在数据库中,我只会使用文本解析器而不是HTML解析器将其插入页面中。我会用引号将所有属性值括起来,并在插入的内容中转义引号。很抱歉,您在页面中“插入”了什么内容?您是否建议在打印之前,先存储未转义的消息,然后在运行时转义它们?它会改变什么吗?例如,
$(“#message”).prepend(document.createTextNode(req.msg))
将前置文本节点,而不是将
req.msg
解析为HTML。在这种情况下,如果
req.msg
包含会触发XSS的HTML标记,则不会,因为
document.createTextNode
会自动转义HTML。尽管如此,仍然存在一个漏洞:)寻找我的答案。你错过了一些东西。我将“\”编码为“\ \”。所以服务器中的数据是
\\u003cscript\\u003ealert(1)\\u003c/script\\u003e
。您从未提到过这一点。
..."msg" : "<tr><td><b>user:<\b> &lt;text&gt;TEST&lt;/test&gt;<\td><\tr>",...
<script>alert(1)</script>