一、如何保护cookie或jwt不被劫持
使用https对请求、响应信息进行加密,防止被攻击者中途劫持请求信息
二、什么是跨域?合理的设置跨域能够解决哪些问题
跨域是浏览器做出的一种安全策略,它要求发起请求的客户端必须和服务端保持相同的协议、ip、端口。如果不一致则无法访问
解决跨域问题
浏览器在发送跨域请求前会发送prefilght请求,如果后端允许跨域则会在响应头设置如下字段
Access-Control-Allow-Credentials:是否允许带上用户认证信息(比如 cookie)。
Access-Control-Allow-Header:业务请求中可以带上的头。
Access-Control-Allow-Origin:哪些来源是允许的。
Access-Control-Max-Age:定预检请求的结果可以被缓存的时间(以秒为单位)
上面说到,跨域是浏览器使用的一种安全策略,我们合理的设置这些字段能够防止浏览器上的恶意网站访问我们的接口,防住跨站请求伪造攻击(CSRF).
防不住以下攻击手段:
- 攻击者在受信任的网页中注入脚本,访问我们的服务端
- 攻击者不经过浏览器,采用curl、或者接口工具访问服务端,也无法防住
三、Session和Jwt
3.1 cookie和session
3.2 jwt
3.3 刷新凭证的时机
四、如何对匿名用户限流
对一些匿名且性能损耗较高的接口添加限流策略,防止恶意用户或者攻击者通过这些接口将系统打垮
针对IP限流
优点:简单、不易伪造
缺点:通常一个ip对应多个用户,会因为一个恶意用户对整个ip下的所有用户限流,需要考虑设置的阈值。
针对设备序列号、设备指纹限流
攻击者可以查看前端的逻辑,伪造设备信息跨过限流
五、使用User-Agent增加登录安全信息
登录完成后,提取出请求的user-agent并进行加密,加密后的值放入jwt中。在jwt校验中间件中取出user-agent加密后的值并进行解密,校验当前请求的user-agent和解密后的值是否一致,不一致就不允许访问。
上述做法可以在很大程度上防止用户的jwt令牌被攻击者拿走后冒充用户