程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP防止遠程非法提交表單程序代碼

PHP防止遠程非法提交表單程序代碼

編輯:關於PHP編程

防止遠程提交表單是一個防止黑客非法遠程提交數據來給我們網站造成安全,下面我來介紹在php中防止遠程非法提交表單實例。

具體方法

一、PHP防止站外提交數據的方法

 代碼如下 復制代碼 <?
$servername=$HTTP_SERVER_VARS['SERVER_NAME'];
$sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"];
$sub_len=strlen($servername);
$checkfrom=substr($sub_from,7,$sub_len);
if($checkfrom!=$servername){
echo("警告!你正在從外部提交數據!!請立即終止!!");
exit;
}
?>

把以上代碼放到需要防止外部提交數據的頁面中,如果是直接輸入網址或者是從外部網部鏈接到本頁,則顯示:警告!你正在從外部提交數據!!請立即終止!!;如果系從本站鏈接或通過表單提交到該頁,則無此提示。這樣做主要是為了防止一些偽造表單向站內提交數據 。

上面的代碼通過curl可直接跳過了,我們可以參考dz論壇登錄的一種做法


處理遠程表單提交更好的方式是,根據一個惟一的字符串或時間戳生成一個令牌,並將這個令牌放在會話變量和表單中。提交表單之後,檢查兩個令牌是否匹配。如果不匹配,就知道有人試圖從表單的遠程副本發送數據。

要創建隨機的令牌,可以使用 PHP 內置的 md5()、uniqid() 和 rand() 函數,如下所示

 

 代碼如下 復制代碼 <SPAN style="FONT-SIZE: small"><?php
session_start();   
       
if ($_POST['submit'] == "go"){   
    //check token   
    if ($_POST['token'] == $_SESSION['token']){   
        //strip_tags   
        $name = strip_tags($_POST['name']);   
        $name = substr($name,0,40);   
        //clean out any potential hexadecimal characters   
        $name = cleanHex($name);   
        //continue processing....   
    }else{   
        //stop all processing! remote form posting attempt!   
    }   
}   
       
$token = md5(uniqid(rand(), true));   
$_SESSION['token']= $token;   
       
       
function cleanHex($input){   
    $clean = preg_replace("![][xX]([A-Fa-f0-9]{1,3})!", "",$input);   
    return $clean;   
}   
?>   
       
       
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">   
<p><label for="name">Name</label>   
<input type="text" name="name" id="name" size="20" maxlength="40"/></p>   
<input type="hidden" name="token" value="<?php echo $token;?>"/>   
<p><input type="submit" name="submit" value="go"/></p>   
</form>   </SPAN>

沒事把以前寫的asp寫出來

ASP防止外部提交數據的方法

 代碼如下 復制代碼 <%
Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
If   mid(server_v1,8,len(server_v2))<>server_v2   then
     Response.write "警告!你正在從外部提交數據!!請立即終止!!"
     Response.End
End if
%>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved