csrf与xss攻击

CSRF

基本概念

Cross-site request forgery:跨站请求伪造

原理

角色:用户C、网站A、恶意网站B

在用户C信任网站A并产生Cookie后

用户在没有登出A网站的情况下访问危险网站B

B要求访问第三方站点A,发出一个请求

由于不知道这个请求是用户发出的还是B发出的,浏览器会自动带上用户C的cookie,所以A会根据用户的权限来处理5的请求,这样用户B就达到了模拟用户操作的目的

图片来自网络

完成CSRF攻击,需要满足两个必要条件

1.登录收信人网站A,并在本地生成Cookie

2.在不登出A的情况下,访问危险网站B(利用A的漏洞)

cookie保证了用户的登录状态,但是网站B并不能拿到cookie,只能伪造成用户

如何防御

  • Token验证
    • 服务器发送给客户端一个token
    • 客户端提交的表单中带着这个token
    • 如果这个token不合法,那么服务器拒绝这个请求
  • 隐藏令牌
    • 把token隐藏在http的head头中
  • Referer验证
    • Referer指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截

XSS

基本概念

XSS(Cross Site Scripting):跨域脚本攻击

原理

不需要做任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是js、html代码块等)

导致的结果:盗用Cookie破坏页面的正常结构,插入广告或恶意跳转等

攻击方式

1.反射型

发出请求时,XSS代码出现在url中,作为输入提交到服务器段,服务器解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。

例如:

1
2
3
http://192.168.1.102/xss/example4.php?name=<img
src='w.123' onerror='alert("hey!")'>
//指定一个错误的图片地址,onerror自然得到执行

2.存储型

存储型XSS和反射型XSS的差别在于:提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码

例如:在留言内容中插入恶意脚本,由于服务器要像每一个访客展示之前的留言内容,所以后面的访客自然会收到前面留言的恶意脚本而躺枪

防范措施

  • 编码

    像一些常见的符号,比如<>在输入的时候要对其进行转换编码,这样做浏览器就不会对该标签进行解释执行了,同时也不影响显示效果

  • 过滤

    对诸如<script>、<img>、<a>等标签进行过滤

  • 限制

    xss攻击往往需要较长的字符串,对于一些可以预期的输入可以限制长度强制阶段来进行防御

区别

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

csrf与xss攻击
https://blog-theta-ten.vercel.app/2021/10/12/csrf与xss攻击/
作者
Chen
发布于
2021年10月12日
许可协议