CSRF攻击及防御

2020-09-28  本文已影响0人  清苑折纸

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导用户进入第三方网站,在第三方网站向被攻击网站发送跨域请求,利用用户在被攻击网站的注册凭证绕过用户验证,然后冒充用户在被攻击网站进行某项操作。
例如用户在登录网站a.com之后并保留了登录凭证(Cookie),然后用户的被诱导点击了网站b.com,然后网站b。com向网站a发送了一个请求a.com/act=xx,浏览器会默认带上网站a的cookie,网站a收到请求后进行验证,此时接收到的cookie内已有用户身份注册凭证,网站a就会以为是用户自己要进行的操作,然后执行act=xx,最后攻击完成。

CSRF有以下几种常见类型:
<form action="http://test.com/withdraw" method=POST>
    <input type="hidden" name="account" value="a" />
    <input type="hidden" name="amount" value="500" />
    <input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script> 

当用户访问带有该隐藏表单的网页时,会自动提交该表单,相当于模拟用户提交了一次POST请求。

CSRF攻击一般是使用用户的登录凭证在第三方网站上发起,被攻击网站无法阻止攻击发生,且一般是跨域攻击,但是当本网站有可以被利用的功能比如可以发图片、链接的评论区或者写文章区则可直接在本域发起攻击,此类攻击更为严重。

CSRF防御

服务器在用户打开页面是会为其生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,存在服务器的Session中,之后在每次页面加载时,使用JS遍历整个DOM树,对于DOM中所有的a和form标签后加入Token。但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用,还需要程序员在编码时手动添加Token。

对于GET请求则在请求地址上加入Token值,对于POST请求则在from表单最后<input type='hidden' name='csrftoken' value='tokenvalue'/>
当用户提交请求到服务器时,服务器会验证token,对比字符串以及时间戳,若时间戳过时则token也会失效。

前端安全系列之二:如何防止CSRF攻击?

上一篇 下一篇

猜你喜欢

热点阅读