通过跨域提交表单的非法访问

本文探讨了前端数据提交时的安全问题,特别是在使用JavaScript进行客户端验证时可能遇到的风险。文章提供了一种绕过验证的方法,并讨论了几种增强服务器端验证的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常,当我们通过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值等方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值