1、xss(跨站脚本攻击):富文本、评论
利用站点开放的文本编辑并发布的功能,输入并执行js脚本,窃取cookie等敏感信息。
预防方法:
方法一:cookie添加httpOnly属性,这是使用js是不能读取和操作cookie的。
方法二:在cookie中添加校验信息。
方法三:对用户输入进行编码(encode)、过滤(移除style、script、iframe相关节点)、校正()
js编码解码: 1、使用参数时,使用encodeURIComponent 2、进行url跳转时,使用encodeURI 3、js使用数据时,使用escape
2、csrf(跨站请求伪造):支付扣款
伪造用户的请求,冒充用户在站内进行操作。
方法一:使用referer来判定来源页面
方法二:关键操作只接受post请求,因为get请求的参数携带在url中,很容易模拟。
方法三:在http请求中加上token,并在服务器端验证这个token。
方法四:登录、支付的页面加上一些用户互动,比如验证码,确保当前请求是用户发起的。
两者的区别:
1、xss不需要登录;csrf需要用户先登录获取到cookie;
2、xss是在网站A注入js代码,然后执行js代码,达到篡改网站A的内容;
csrf利用网站A的漏洞,去请求网站A的api。
Cookie和Token都存需要放在Header里面,为什么只劫持前者?
1、http是无状态的,为了使域名下的所有网页能共享某些数据,因此出现了session、cookie以及token。
2、cookie是用于记录用户状态的一种方式,装有sessionId,由服务端设置,存储在客户端在每个请求中会自动携带。
3、token是无状态的,用户信息都被加密到token中,服务器收到token后解密就可以知道是哪个用户,token不会在请求中自动携带,而需要手动添加。
cookie:用户点击了链接,cookie未失效情况下,后端以为是用户的正常操作,于是进行扣款等操作。
token:用户点击链接,由于浏览器不会自动带上token,即使发了请求,但是后端token验证不通过。
原文地址:https://www.cnblogs.com/annie211/p/12687785.html