通常,当我们通过post方法提交数据到服务器的时候,通常会做一些验证,防止非法的数据存入数据库。通常是用javascript写的。

比如 下面的一个例子:

    

  1. <script language="javascript">  
  2.         $(function () {  
  3.             $("#btn").click(function () {  
  4. if ($("#txt").val() == "") {  
  5.                     alert("不能为空"); return;  
  6.                 }  
  7.                 $.ajax({  
  8.                     type: 'POST',  
  9.                     url: "/Handler1.ashx",  
  10.                     data: { name: $("#txt").val() },  
  11.                     success: function (data) {  
  12.                         alert(data);  
  13.                     },  
  14.                     dataType: "html",  
  15.                     error: function (XMLHttpRequest, textStatus, errorThrown) {  
  16.                         alert(XMLHttpRequest.statusText);  
  17.                     }  
  18.                 });  
  19.             });  
  20.         });  
  21.     </script>  

这里做了一个验证,如果$("#txt")的值是空的就不提交,否则就提交到Handler1.ashx。

此处有一种***方式。

把页面保存到本地,然后把相对路径都改为绝对路径,把js验证的代码去掉。此时,再按提交按钮,绕过验证,直接提交到服务器了 。这样会对数据的安全性有危害。

有很多做法避免这种问题的发生,常用的方法是读取context.Request.ServerVariables["HTTP_REFERER"]的值,看看是不是为 context.Request.ServerVariables[" http_host "] 的值。如果是的话说明在同一个域内。就不存在是从本地修改的页面代码中提交过来的。但是此种方法防护能力较弱。HTTP_REFERER的值可以伪造。更加严格的做法是采取验证票,或者判断session值等方式。