1、简介:
Cross-Site Scripting:DOM:基于DOM的XSS
a、起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
b、Fortify 安全编码规则包将就 SQL Injection 和 Access Control 提出警告:当把不可信赖的数据写入数据库时,数据库将出现问题,并且会将数据库当作不可信赖的数据的来源,这会导致 XSS 漏洞。如果数据库在您的环境中是可信赖的资源,则使用自定义筛选器筛选出包含 DATABASE 污染标志或来自数据库源的数据流问题。尽管如此,对所有从数据库中读取的内容进行验证仍然是较好的做法
c、https://www.cnblogs.com/meInfo/p/9004535.html
· 问题:
应用程序的客户端代码从document.location、document.URL、document.referrer或 其 他 任 何攻击者可以修改的浏览器对象获取数据,如果未验证数据是否存在恶意代码的情况下 ,就将其动态更新到页面的DOM 节点,应用程序将易于受到基于DOM 的XSS攻击。 例如:下面的JavaScript代码片段可从url中读取msg信息,并将其显示给用户。
var url=document.URL;
document.write(url.substring(url.indexOf("msg=")+4,url.length );
该段脚本解析URL,读取msg参数的值,并将其写入页面。如果攻击者设计一个恶意的URL,并以JavaScript代码作为msg参数,那么Web浏览器就会像显示HTTP响应那样执行 该代码,应用程序将受到基于DOM 的XSS攻击。
解决办法:
基于DOM 的X SS是将用户可控的JavaScript数据输出到HTML页面中而产生的漏洞,为了避免基于DOM 的XSS攻击,避免将用户控制的数据直接输出到DOM或脚本中执行。如果不能避免,则应进行严格的过滤 。
2、https://www.cnblogs.com/phoenix--/articles/2158202.html (建议阅读)
XSS解决方案
常用的防止XSS技术包括:
(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
(2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
(4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
3、Fortify报错例子:
问题:Cross-Site Scripting:DOM: data数据从数据库取出后,直接传入了function方法中使用,未进行校验
解决方法:对data数据进行校验,后传入function中
最直接的验证方法就是:将function中的data换成别的字符,fortify就检测不出这个问题了。
例如:换成fata就不会报错