防止遠程提交表單是一個防止駭客非法遠程提交資料來給我們網站造成安全,下面我來介紹在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() 函數,如下所示
| 代碼如下 |
複製代碼 |
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; } ?> |
沒事把以前寫的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 %> |
http://www.bkjia.com/PHPjc/629612.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629612.htmlTechArticle防止遠程提交表單是一個防止駭客非法遠程提交資料來給我們網站造成安全,下面我來介紹在php中防止遠程非法提交表單一實例。 具體方法...