尝试访问

http://mdsec.net/shop/92/

5.1.3 URL参数

应用程序常常使用预先设定的URL参数通过客户端传送数据。例如,用户浏览产品目录时,应用程序会向他们提供指向下列URL的超链接:

http://mdsec.net/shop/?prod=3&pricecode=32

如果包含参数的URL显示在浏览器的地址栏中,任何用户不需要使用工具就可任意修改其中的参数。但是,在许多情况下,应用程序并不希望普通用户查看或修改URL参数。例如:

img002 使用包含参数的URL加载嵌入图像时;

img002 使用包含参数的URL加载框架内容时;

img002 表单使用POST方法并且其目标URL包含预先设定的参数时;

img002 应用程序使用弹出窗口或其他方法隐藏浏览器地址栏时。

当然,如前所述,我们可以使用拦截代理服务器修改上面的任何URL参数。

5.1.4 Referer消息头

浏览器在大多数HTTP请求中使用Referer消息头。浏览器使用这个消息头指示提出当前请 求的页面的URL——或者是因为用户单击了一个超链接或提交了一个表单,或者是因为该页面引用了其他资源(如图像)。因此,我们可以利用这个消息头通过客户端传送数据,这是因为应用程序处理的URL受其控制,开发者认为Referer消息头可用于准确判断某个特殊的请求由哪个URL生成。

以帮助忘记密码的用户重新设置密码的机制为例。应用程序要求用户按规定的顺序完成几个步骤,然后再通过以下请求重新设置密码值:

GET /auth/472/CreateUser.ashx HTTP/1.1

Host: mdsec.net

Referer: https://mdsec.net/auth/472/Admin.ashx

应用程序可以使用Referer消息头证实这个请求是在正确的阶段(Admin.ashx)提出的,然后才允许用户访问请求的功能。

但是,因为用户控制着每一个请求,包括HTTP消息头,他可以直接进入CreateUser.ashx,并使用拦截代理服务器将Referer消息头的值修改为应用程序需要的值,从而轻易避开这种控制。

实际上,根据w3.org标准,Referer消息头完全是可选的。因此,虽然大多数浏览器执行这个消息头,但是,使用它控制应用程序的功能应被视为是一种“陈腐”的做法。