首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 防止惡意刷新頁面:Token 驗證與 Session 機制

     編輯:PHP 綜合知識

核心原理

  1. 頁面生成時隨機生成 Token,存入 Session,並作為必傳參數附加到所有鏈接/表單。
  2. 請求到達時比對 Session 中 Token 與提交 Token。
  3. 一致則處理並**更新 Token**;不一致視為重複提交/刷新,拒絕處理。

實現代碼

session_start();
$k = $_GET['k'];
$t = $_GET['t'];
$allowTime = 1800; // 防刷新有效期(秒)
$ip = get_client_ip();
$allowT = md5($ip . $k . $t);

if (!isset($_SESSION[$allowT])) {
    $refresh = true;
    $_SESSION[$allowT] = time();
} elseif (time() - $_SESSION[$allowT] > $allowTime) {
    $refresh = true;
    $_SESSION[$allowT] = time();
} else {
    $refresh = false; // 重複刷新
}

表單重複提交防禦(PRG 模式)

if (isset($_POST)) {
    // 1. 接收驗證數據
    // 2. 業務處理
    // 3. 成功後重定向到自身(GET)
    header("Location: " . $_SERVER['PHP_SELF']);
    exit;
}
// 4. 頁面顯示邏輯
// 頁面頭部加入 JS 防止瀏覽器後退重提交
echo '<script>javascript:window.history.forward(1);</script>';

IE6 雙重提交問題

使用 <input type="image"> 代替 submit 時,圖片上的 onclick 可能導致雙重提交,改用普通 <input type="submit"> 可避免。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved