关于Web安全

CSRF攻击

主要攻击对象是Cookie中保有用户状态的情况,如用Cookie保存SessionID或JWT
这样在另一个网站中嵌入被攻击网站的url,就可以在用户不知情的情况下代替该用户向被攻击网站发送请求。

原因

浏览器在发送请求时,会自动发送Cookie

防御方法

方法1: 客户端在每次http请求时,附带与服务端约定好的其他参数,可以放在header里,因为浏览器不会自动做这个操作,所以就防止了CSRF攻击。简单来说就是服务端在校验请求时,不单纯基于Cookie,还要基于一个Cookie外的附加信息。

方法2: 【不建议使用】不在Cookie中保存用户状态,比如将JWT保存在客户端内存或LocalStorage里。因为没有使用Cookie,所以自然就不会有CSRF的问题,但这个会带来新的问题——XSS攻击。因为不在Cookie中的话,如果代码被侵入会非常容易取得用户状态。而利用Cookie的 HttpOnly可以有效的保护Cookie。

XSS

利用在被攻击网站侵入的脚本,获得想要得到的内容,发给黑客网站并保存。
如获取当前用户的Cookie信息,就可以冒充该用户向服务器发送请求。

原因

被攻击网站有缺口可以执行嵌入的代码

防御方法

首先应该保证前端代码的健壮性,不会执行嵌入的代码。
但这个不是这里想讨论的重点,这里主要是想保护Cookie或者说是用户状态,所以防御的方法是上文已经提到的设置Cookie为HttpOnly。
这个属性是可以对每个Cookie的属性分别设置的,所以只要把SessionID或者JWT这种敏感的信息设置成HttpOnly就可以了。

补充说明

以上两点,都属于在客户端进行攻击,保证了以上两点,并不代表网站就安全了,因为除了在客户端攻击以外,还可以在网络上监听报文。抓取到了报文后,一样可以冒充用户发送请求。
所以,为了报文的安全,要采用Https进行通信。
这样JWT或者SessionID就不会被截获了。

顺便说个概念:
加密方式分为信道加密和内容加密。
Https属于信道加密。类似密码的加密或者JWT里面对某些内容的加密,属于内容加密。

你可能感兴趣的:(关于Web安全)