第 2 章 表单处理

目录

欺骗表单提交
HTTP 请求欺骗
跨站脚本
伪造跨站请求

欺骗表单提交

为了进一步了解数据过滤的必要,思考下面这个表单(假想的): http://example.org/form.html:

        <form action="/process.php" method="POST">
            <select name="color">
                <option value="red">red</option>
                <option value="green">green</option>
                <option value="blue">blue</option>
            </select>
            <input type="submit" />
        </form>
    

设想一个攻击者保存了这段 HTML 并修改为:

        <form action="http://example.org/process.php" method="POST">
            <input type="text" name="color" />
            <input type="submit" />
        </form>
    

这个新的表单可以存放在任何地方(web 服务器并不是必须的,只要浏览器可以访问的即可),并可以随意使用。action 属性设定的绝对 URL 将 POST 请求发到相同的地方。

这使得去除客户端限制变得非常容易,不论是表单限制或者客户端脚本进行的最基本的数据过滤。在这个例子中,$_POST['color'] 不再被限制为 redgreenblue。通过一个非常简单的操作,任何用户都可以创建一个合适的表单用于提交任意数据到表单中的 URL。