用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP防止远程非法提交表单程序代码

时间:2015-01-23  来源:西部数据  作者:西部数据

防止远程提交表单是一个防止黑客非法远程提交数据来给我们网站造成安全,下面我来介绍在php中防止远程非法提交表单实例.

具体方法

一、PHP防止站外提交数据的方法,代码如下:

  1. <?php 
  2. $servername=$HTTP_SERVER_VARS['SERVER_NAME'];  
  3. $sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"];  
  4. $sub_len=strlen($servername);  
  5. $checkfrom=substr($sub_from,7,$sub_len);  
  6. if($checkfrom!=$servername){  
  7. echo("警告!你正在从外部提交数据!!请立即终止!!");  
  8. exit;  
  9. }  
  10. ?> 

把以上代码放到需要防止外部提交数据的页面中,如果是直接输入网址或者是从外部网部链接到本页,则显示:警告!你正在从外部提交数据,请立即终止,如果系从本站链接或通过表单提交到该页,则无此提示,这样做主要是为了防止一些伪造表单向站内提交数据 .

上面的代码通过curl可直接跳过了,我们可以参考dz论坛登录的一种做法.

处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中,提交表单之后,检查两个令牌是否匹配,如果不匹配,就知道有人试图从表单的远程副本发送数据.

要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下代码:

  1. <?php 
  2. session_start();     
  3.          
  4. if ($_POST['submit'] == "go"){     
  5.     //check token     
  6.     if ($_POST['token'] == $_SESSION['token']){     
  7.         //strip_tags     
  8.         $name = strip_tags($_POST['name']);     
  9.         $name = substr($name,0,40);     
  10.         //clean out any potential hexadecimal characters     
  11.         $name = cleanHex($name);     
  12.         //continue processing....     
  13.     }else{     
  14.         //stop all processing! remote form posting attempt!     
  15.     }     
  16. }     
  17.          
  18. $token = md5(uniqid(rand(), true));     
  19. $_SESSION['token']= $token;     
  20.          
  21.          
  22. function cleanHex($input){     
  23.     $clean = preg_replace("![][xX]([A-Fa-f0-9]{1,3})!""",$input);     
  24.     return $clean;     
  25. }     
  26. ?>     
  27.          
  28.   //开源代码phpfensi.com       
  29. <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">     
  30. <p><label for="name">Name</label>     
  31. <input type="text" name="name" id="name" size="20" maxlength="40"/></p>     
  32. <input type="hidden" name="token" value="<?php echo $token;?>"/>     
  33. <p><input type="submit" name="submit" value="go"/></p>     
  34. </form> 

没事把以前写的asp写出来,ASP防止外部提交数据的方法,代码如下:

  1. <%  
  2. Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))  
  3. Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))  
  4. If   mid(server_v1,8,len(server_v2))<>server_v2   then  
  5.      Response.write "警告!你正在从外部提交数据!!请立即终止!!"  
  6.      Response.End  
  7. End if  
  8. %> 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门