网络攻击

Cross-Site-Scripting(xss)跨站脚本攻击

为了不和层叠样式表的缩写混淆,故将跨站脚本攻击写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的.

非持续型xss攻击

非持久性型xss攻击是一次性的,仅对档次的页面访问产生影响,非持久型xss攻击要求永固访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户浏览器执行,从而达到攻击目的。

持久型xss攻击

持久型xss攻击会把攻击者的数据存储在服务端,攻击行为将伴随着攻击数据一直存在。

DOM Based xss 基于dom的跨站脚本攻击

当用户能够通过交互修改浏览器页面中的DOM并显示在浏览器上时,就可能产生这种漏洞,即通过修改页面的DOM节点形成的xss,称之为DOMBasedXSS。在这种攻击下攻击者可以随意创建,删除和更改DOM树节点。

防御

主要思路有以下几点:

  1. 输入有效性检测
    1. 检测输入长度,类型,语法等的有效性。
    2. 拒绝无效的恶意的输入数据。
  2. 对输出进行html编码
    1. 实体在呈现HTML.XML等之前对所有用户的数据进行编码,使其不能作为脚本运行。
  3. CSP Content-Security-Policy(内容安全策略)
    CSP本质上是建立白名单,开发者告诉浏览器哪些外部资源可以加载或者是执行,我们只需要配置规则,如何拦截是由浏览器自己实现的,我们可以通过这种方式来尽量减少XSS攻击
    通常情况下,有两种方法开启CSP:
    1. 设置HTTP Header中的Content-Security-policy
      1. 只允许加载本站资源:Content-Security-Policy:default-src 'self'
      2. 只允许加载HTTPS协议图片:Content-Security-Police:img-src https://*
      3. 允许加载任何来源框架:Content-Security-Police:child-src 'none'
    2. 设置 meta 标签的方式 <meta http-equiv="Content-Security-Policy">

Cross-Site Requset Forgey(CSRF)跨站请求伪造

也被称为“one click attack”或者session riding。是一种对网站的恶意利用。下图是一个CSRF攻击的原理图

从上图可以看出来,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  1. 登录受信任网站A,并在本地生成Cookie
  2. 在不退出A的情况下,访问危险网站B

举一个简单的例子:一个网站用户Bob可能在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息,设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片tag。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。

防御

  1. 对于敏感数据,例如银行账户信息等,要避免使用GET请求,更多的去使用POST请求。
  2. CRFS在攻击的时候往往是在用户不知情的情况下提交的请求,我们可以使用验证码来强制跟用户交互。
  3. 在重要的请求中添加Token。CSRF攻击成功在于攻击者能够预测所有的参数从而构造出合法的请求,所以我们可以加大这个预测难度,加入一些黑客不能伪造的信息,在我们提交表单的时候,在保持原有参数不变,另外添加一个参数Token,该值是随机且加密的,当提交表单时,客户端也同时提交这个token,然后由服务端验证,验证通过才是有效的请求
  4. 检测Referer.所谓Referer,就是在一个网络请求头中的键值对,标示着目前的请求是从哪个页面过来的。服务器通过检查Referer的值,如果判断出Referer并非本站页面,而是一个外部站点的页面,那么我们就可以判断出这个请求是非法的。与此同时,我们也就检测到了一次csrf攻击

  转载请注明: TomoFur 网络攻击

  目录