web安全之XSS与CSRF

2019-07-19  本文已影响0人  hzl的学习小记
  1. XSS - Cross-site scripting
    xss其实就是html的注入问题,攻击者的输入没有经过严格的控制进入数据库,最终显示给来访的用户,导致可以在来访用户 的浏览器里以浏览器用户的身份执行html代码,数据的流程如下: 攻击者的html输入->web程序->进入数据库->web程序->用户浏览器。

比如我只想在页面上显示一个名字:

<span class="name">{{name}}</span>

但是,如果我的名字是长这样的:

XXX<script>alert('SB')</script>

这时候就好玩了:

<span class="name">XXX<script>alert('SB')</script></span>

攻击手段和目的

  1. 攻击者使被攻击者在浏览器中执行脚本后,如果需要手机来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击攻击者通过javascript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。

  2. 盗用cookie,获取敏感信息

  3. 利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。

  4. 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动

  5. 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果

XSS 怎么防御

一个经典的防御方法就是对内容进行转义和过滤,比如

var escapeHtml = function(str) {
    if(!str) return '';
    str = str.replace(/&/g, '&amp;');
    str = str.replace(/</g, '&lt;');
    str = str.replace(/>/g, '&gt;');
    str = str.replace(/"/g, '&quto;');
    str = str.replace(/'/g, '&#39;');
    // str = str.replace(/ /g, '&#32;');
    return str;
};

var name = escapeHtml(`<script>alert('SB')</script>`);

此时 name 会变成

<script>;alert(&#39;SB&#39;)&lt;/script&gt;

CSRF

CSRF是跨站伪造(Cross-site request forgery)的英文缩写。CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
要完成一次CSRF攻击,受害者必须依次完成两个步骤。
1.登录受新人的网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。

一个CSRF攻击是如何工作的?

在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求:

<form action="https://my.site.com/me/something-destructive" method="POST">
  <button type="submit">Click here for free money!</button>
</form>

如何减轻CSRF攻击

  1. 只使用JSON api
    使用JavaScript发起AJAX请求是限制跨域的。
    不能通过一个简单的<form>来发送JSON,
    所以,通过只接收JSON,你可以降低发生上面那种情况的可能性。

  2. CSRF Tokens
    最终的解决办法是使用CSRF tokens。
    CSRF tokens是如何工作的呢?

服务器发送给客户端一个token。
客户端提交的表单中带着这个token。
如果这个token不合法,那么服务器拒绝这个请求。

参考:

https://www.jianshu.com/p/64f60ce328b9

上一篇 下一篇

猜你喜欢

热点阅读