通常,当我们通过post方法提交数据到服务器的时候,通常会做一些验证,防止非法的数据存入数据库。通常是用javascript写的。
比如 下面的一个例子:
- <script language="javascript">
- $(function () {
- $("#btn").click(function () {
- if ($("#txt").val() == "") {
- alert("不能为空"); return;
- }
- $.ajax({
- type: 'POST',
- url: "/Handler1.ashx",
- data: { name: $("#txt").val() },
- success: function (data) {
- alert(data);
- },
- dataType: "html",
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- alert(XMLHttpRequest.statusText);
- }
- });
- });
- });
- </script>
这里做了一个验证,如果$("#txt")的值是空的就不提交,否则就提交到Handler1.ashx。
此处有一种***方式。
把页面保存到本地,然后把相对路径都改为绝对路径,把js验证的代码去掉。此时,再按提交按钮,绕过验证,直接提交到服务器了 。这样会对数据的安全性有危害。
有很多做法避免这种问题的发生,常用的方法是读取context.Request.ServerVariables["HTTP_REFERER"]的值,看看是不是为 context.Request.ServerVariables[" http_host "] 的值。如果是的话说明在同一个域内。就不存在是从本地修改的页面代码中提交过来的。但是此种方法防护能力较弱。HTTP_REFERER的值可以伪造。更加严格的做法是采取验证票,或者判断session值等方式。