CSRF、XSS

CSRF(Cross-site request forgery)

跨站请求伪造,也称XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意操作的攻击方法。CSRF攻击利用的是冲着浏览器分不清发起请求是不是真正的用户本人。简单的身份验证能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

例子1:简单的攻击

用户登录银行网址A(保留了cookie)的时候,被某些恶意信息引导访问了网址B,B网址上有一个img标签

<img src="http://www.examplebank.com/account=Alice&amount=1000&payfor=Badman" >

这个标签的src不指向一张图片,而是一个http请求。由于用户浏览器上有cookie信息,此时发出的请求就会得到响应执行

例子2:进阶攻击

危险网站可以伪造一个表单并隐藏,并在自己网站的onload事件中,触发这个表单的提交事件,就可以改GET攻击为POST攻击

防范手段

  1. 涉及敏感操作的请求改为POST请求
    • 优:提高了攻击的门槛
    • 缺:对于进阶攻击无能为力
  2. 验证码机制
    • 优:简单粗暴,低成本,可靠,能防范99.99%的攻击者
    • 缺:对用户不友好
  3. 验证 HTTP Referer 字段(在HTTP请求头中有一个字段叫Referer,它记录了请求的来源地址。 服务器需要做的是验证这个来源地址是否合法,如果是来自一些不受信任的网站,则拒绝响应)
    • 优:零成本,易实现
    • 缺:由于这个方法严重依赖浏览器自身,因此安全性全看浏览器
  4. token(或token+密文)
    • 优:极大地提高了破解成本,易实现,对用户友好
    • 缺:增加性能成本(hash计算)
  5. 在http头中自定义属性并验证

XSS(Cross-Site Scripting)

跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

分类

  • 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
  • 存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)
  • DOM型XSS:基于文档对象模型的一种漏洞。DOM中有很多对象,其中一些是用户可以操纵的,如uri ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

防范手段

1.过滤特殊字符

2.转义

 

CSRF和XSS的区别

  1. CSRF:需要用户先登录网站A,获取 cookie。XSS:不需要登录
  2. CSRF:是利用网站A本身的漏洞,去请求网站A的api。XSS:是向网站 A 注入代码块,然后执行 代码块,篡改网站A的内容

参考网站:

  1. https://zhuanlan.zhihu.com/p/37293032
  2. https://www.cnblogs.com/itsuibi/p/10752868.html

 

posted @ 2020-05-11 14:56  把我当做一棵树叭  阅读(421)  评论(0)    收藏  举报