《PHP漏洞防范之防止表單重復提交有哪些常用方法?》要點:
本文介紹了PHP漏洞防范之防止表單重復提交有哪些常用方法?,希望對您有用。如果有疑問,可以聯系我們。
相關主題:PHP安全
表單重復提交,主要是有這幾種場景:
1、功擊者在站外自己構造一個表單重復不斷提交給您的網站。
2、用戶提交表單時,剛好卡滯了,用戶不明就里,嘗試多次按下表單提交按鈕,這時服務器已收到多次。但用戶仍不知道。
3、功擊者有意制造重復提交。
場景1主要且防跨站提交,不在這里討論,參http://www.snjht.com/jiaocheng/61.html
后面2種有以下幾種方法可以阻止。
1、使用JS讓按鈕在點擊一次后禁用,即設置它的屬性disabled="disabled"。這種方法可以防止多次點擊的發生,實現方式較簡單。
$('button[type=submit]').attr('disabled','disabled'); layer.msg('正在提交,請稍候......');
缺點是若客戶端禁止JavaScript腳本,則失效。這個方法主要是防君子不防小人,因為功擊者可以禁用JS。
2、表單隱藏域中存放token(表單被請求時生成的標記),同時,在session中也保存。等到用戶提交表單后,進行比對。
采用此方法在接收表單數據后,檢查此標志值是否存在,先進行刪除,然后處理數據; 若不存在,說明已提交過,忽略本次提交。
缺點:使用SESSION很耗資源。
替代方案:使用緩存來保存token。
//1、服務端生成 $_SESSION['token'] = mt_rand(1000, 9999); //2、在表單頁隱藏域存放此session值 <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> //3、用戶提交表單后處理 if($_POST['token'] != '' && $_POST['token'] == $_SESSION['token']) { unset($_SESSION['token']); //新提交,通過,存儲數據 } else { echo '失敗,已提交過表單'; }
最后,請記得:
在提交成功后執行頁面重定向。轉到提交成功信息頁面。
原因:避免有意功擊者F5重復提交,消除瀏覽器前進和后退按鈕可導致的同樣問題。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/64.html