重定向和转发的概念
在咱们实际上网过程中,会浏览多个网页,进行多次跳转。将一个域名引导到另一个域名有两种方式重定向和转发,转发采用隐藏路径的方式,而重定向采用不隐藏路径的方式。
重定向
重定向是服务端根据逻辑,发送一个状态码(通常为3xx),告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)
转发
转发是在服务器内部将请求转发给另一个资源,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程是在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)
两者的区别
1:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址。
2:重定向有两次请求,不共享数据,转发是有一次请求且共享数据。
3:重定向后地址栏会发生变化,转发不会。
4:重定向的地址可以是任意地址,转发的地址只能是当前应用类的某一个地址。
重定向的几种方式
- 手工重定向
点击 href 链接来跳转到新页面 - 响应状态码重定向(location表示重定向后网页)
301 永久重定向(网站在响应头的location内)
302 临时重定向 - 服务器端重定向
修改web服务器配置文件或脚本来实现重定向, - meta refresh
利用HTTP的refresh标签或者响应头refresh属性来设置 - 客户端跳转
利用url参数重定向,控制不严可能会导致用户访问恶意网站
未验证的重定向和转发
前面已经清楚了重定向和转发的感念,这里介绍一下影响危害。
在web应用中,重定向和转发可以使我们愉快的浏览网页,那么这个漏洞是怎么来的呢?重点就是没有对带有用户输入参数的目的url做验证。而这个时候攻击者就可以引导用户访问他们所要用户访问的站点。这个漏洞最常见的就是钓鱼网站的使用。
比如:
http://www.baidu.com/sss.php?target=http://diaoyu.com 攻击者把这个钓鱼连接发给受害者,那么安全检测的软件就判断这个连接来自百度,是可信任的站点。但是受害者点击后则会跳转到钓鱼网站或者其他欺骗木马之类的站点等
此外还有获取信息,访问恶意网站,随意跳转,安装恶意软件等
一些检测方法
1、 抓包工具抓包,抓到302的url,修改看能否正常跳转
2、 浏览代码,看代码中含有重定向和转发的内容,看目的url中是否包含用户输入的参数
3、 点击操作网站,观察在重定向之前用户输入的参数有没有出现在某一个URL或者很多URL中
预防
重定向外部网站需要验证是否在白名单,转发内部网站要验证是否有权限,有权限才转发