Web安全之CSFR与XSS

CSFR

CSFR(Cross-Site Request Forgery跨站点伪造请求)是一种网络攻击方式。攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起一些恶意请求(如恶意发帖、改密码、发邮件等),达到攻击目的。

攻击过程

  1. 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A。
    2.用户信息通过验证后,网站A会产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求。
  2. 用户未退出网站A之前,在同一浏览器中,打开一个恶意网站B。
  3. 网站B含有一些攻击性代码,会发出访问第三方站点A的请求。
  4. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户的Cookie信息以用户的权限处理该请求,导致来自网站B的恶意代码被执行。

检测
使用工具抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

防范
1.验证HTTP Referer字段
Referer字段记录了该HTTP请求的来源地址。所以只需要给敏感请求增加一个拦截器来检查Referer的值。
但是这种方法有漏洞,就是某一些浏览器可以篡改Referer的值。黑客可以篡改,就能通过验证。

2.在请求地址中添加token并验证
黑客之所以可以伪造用户请求,是因为请求中所有的用户验证信息都存在于cookie中,黑客可以利用用户的cookie来通过验证。
所以可以在请求中加入黑客无法伪造的信息,并且该信息不存在于cookie中。在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端建立一个拦截器来验证这个token,如果请求中没有token或token不正确,就会被认为是攻击从而拒绝该请求。
token在用户登录后产生并存放于session中,每次请求时把token从session拿出来与请求中的token比对。

XSS

XSS(CrossSiteScript跨站脚本攻击)攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户 Cookie、破坏页面结构、重定向到其它网站等。

分为三种:
1.反射型XSS
是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。

2.存储型XSS
通过发表带有恶意跨域脚本的帖子、文章、留言等,从而把恶意脚本存储在服务器,每个访问的人访问的时候,服务器把内容发送过来并被浏览器解析,就会触发执行攻击。

3.DOM XSS
不同于反射型XSS和存储型XSS,DOM XSS代码不需要服务器端的解析响应的直接参与,而是通过浏览器端的DOM解析。
编写JS代码时可能产生XSS漏洞,比如eval语句可以将一段字符串转换为JS语句。

防御
对用户输入的数据进行转义处理,如编码、解码、过滤。把输入的不合法的部分过滤掉。

猜你喜欢

转载自blog.csdn.net/lixinyi0622/article/details/84667487