有时,服务器端将生成要嵌入内联JavaScript代码的字符串.例如,如果"UserName"应由ASP.NET生成.然后看起来像.
这不安全,因为用户可以拥有他/她的名字
这是XSS漏洞.
所以,基本上,代码应该是:
什么JavascriptEncode确实是增加系统字符"\"前"/"和"""和""."所以,输出HTML是什么样子.VAR用户名=" SCRIPT>警报(\ '错误\') SCRIPT > SCRIPT>";
浏览器不会将" script> " 解释为脚本块的结尾.所以,XSS避免了.
但是,那里仍然有"<"和">".建议也要逃避这两个字符.首先,我认为将"<"改为"<"并不是一个好主意.和">"到">" 这里.并且,我不确定将"<"更改为"\ <"并且">"更改为"\>"可以被所有浏览器识别.似乎没有必要对"<"和">"进行进一步编码.
对此有什么建议吗?
谢谢.
根据您使用的标记语言,问题有不同的答案.
如果您使用的是HTML,那么您不能用实体表示它们,因为脚本元素被标记为包含CDATA.
如果您使用的是XHTML,那么您可以将它们表示为具有显式CDATA标记的CDATA,或者您可以使用实体来表示它们.
如果您正在使用XHTML,但是将其作为text/html提供,那么您需要编写符合XHTML规则但仍适用于text/html解析器的内容.这通常意味着使用显式CDATA标记并在JavaScript中对它们进行注释.
不久前,我写了一些关于这个的方法和原因.
不,你不应该逃避<
并在HTML中>
使用HTML实体.
使用JavaScript字符串转义规则(替换\
为\\
和"
使用\"
)
并替换所有with的出现
<\/
,以防止从元素中逃逸.
在XHTML中它更复杂.
如果您将XHTML作为XML(与IE不兼容的方式)发送并且不使用CDATA块,那么除了JavaScript字符串转义之外,您还需要转义实体.
如果您发送的XHTML作为XML和使用CDATA块,那么就无法逃避的实体,而是替换]]>
用]]]]>
,以防止逃逸出来的(除了JavaScript字符串转义).
如果您发送XHTML text/html
(99%的人都这样做),那么您必须同时使用XML CDATA块,XML CDATA转义和HTML转义.