fayeah / blogs

方法论、问题驱动、总结
6 stars 0 forks source link

XSS攻击 #32

Open fayeah opened 4 years ago

fayeah commented 4 years ago

XSS攻击涉及到网页的安全可能是服务器端也可能是浏览器端,我们都需要兼顾到,防止恶意代码对进行信息盗取和篡改。有几个概念需要了解一下。

同源策略

如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源

内容安全策略

浏览器会信任服务器端的所有信息,但是为防止恶意代码,使用内容安全策略(CSP)来减少XSS攻击等。来看一个例子:

Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

上述内容安全策略的配置表示:

以上表明CSP只允许浏览器运行白名单内获取到的可执行文件,其他的都不允许执行。

除此之外,csp允许上报,使得服务器能存储和处理这些报告:

Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi

需要引入第三方资源、与不同源数据/DOM交互怎么办?

理解了上述几个概念,我们再来看一下什么是XSS攻击、有哪些XSS攻击以及如何防止XSS攻击

什么是XSS攻击

XSS 攻击是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段 有了恶意脚本,黑客可以做很多事情:窃取用户cookie信息、监听用户行为、修改DOM让用户输入敏感信息等等。

有哪些XSS攻击

存储型XSS

  1. 首先黑客利用站点漏洞将一段恶意 JavaScript 代码提交到网站的数据库中;
  2. 然后用户向网站请求包含了恶意 JavaScript 脚本的页面;
  3. 当用户浏览该页面的时候,恶意脚本就会将用户的 Cookie 信息等数据上传到服务器 比如下图的方式: image

反射型XSS 如果在url的参数中传入一段恶意代码http://localhost:3000/?xss=<script>alert('这是一段恶意代码')</script>,那么服务器端收到该请求时可能将该参数返回给浏览器,这就是所谓的反射型XSS攻击。只是这种攻击不会存储恶意代码。服务器端伪代码:

<body>
{{query.xss}}
</body>

基于DOM的攻击 可能通过 网络劫持(wifi路由器劫持,本地恶意软件)等方式在资源传输过程当中插入恶意代码。不涉及服务器端。

如何防止XSS攻击

我们知道XSS攻击可能发生在浏览器端,也可能发生在服务器端,看下如何防止。

reference: