Xoops雖然有自己的表單驗證方式,但如果是用bootstrap框架寫的表單,就沒辦法套用Xoops的表單驗證功能,必須要自己寫一個驗證,否則像是非會員權限的聯絡我們表單,如果有別人吧form的action指向到您的網站,欄位都一樣是可以吧資料post過來寫入資料表的,所以必須要驗證傳入的網址是否為網站網址,如果相符才讓資料寫入,方法如下:
1、先在模組的function.php中加上以下的判斷函數
//檢查傳入網址
//網址合併
function urlpregmatch($var=""){
$url1= str_replace ("/","",$var); //去除/
$url2= str_replace ("http:","",$url1); //去除http:
$url3= str_replace (".","",$url2); //去除.
$url4= preg_replace("/[&?=.#]/", '',$url3); //去除&?=.#
return $url4;
}
//比對網址(防外部傳參)
function alignmenturl(){
//本地端網址合併
$url1=urlpregmatch($var=XOOPS_URL);
//傳入端網址合併
$url2=urlpregmatch($var=$_SERVER['HTTP_REFERER']);
//判斷傳入網址是否為相同網站
if (!empty(preg_match("/".$url1."/i", "".$url2.""))) {
return true;
}
}
//機器人檢查
if(empty(alignmenturl())) redirect_header(XOOPS_URL,0 , _MD_NOTWELCOME);
1、先在模組的function.php中加上以下的判斷函數
//檢查傳入網址
//網址合併
function urlpregmatch($var=""){
$url1= str_replace ("/","",$var); //去除/
$url2= str_replace ("http:","",$url1); //去除http:
$url3= str_replace (".","",$url2); //去除.
$url4= preg_replace("/[&?=.#]/", '',$url3); //去除&?=.#
return $url4;
}
//比對網址(防外部傳參)
function alignmenturl(){
//本地端網址合併
$url1=urlpregmatch($var=XOOPS_URL);
//傳入端網址合併
$url2=urlpregmatch($var=$_SERVER['HTTP_REFERER']);
//判斷傳入網址是否為相同網站
if (!empty(preg_match("/".$url1."/i", "".$url2.""))) {
return true;
}
}
然後再php接收變數端加上以下判斷函數
if(empty(alignmenturl())) redirect_header(XOOPS_URL,0 , _MD_NOTWELCOME);
備註_MD_NOTWELCOME為php常數可以在語系檔中自行增加您要顯示的內容
這樣設定之後只有相同網址的post參數才會被寫入資料表,不同網址外部傳參則會被踢回首頁,可以防止機器人程式在外部建立表單重複傳參占用資料表效能的問題。
留言
張貼留言