php表單加入Token防止重複提交的方法分析

2022-09-26 21:06:21 字數 2967 閱讀 8943

token**

token,就是令牌,最大的特點就是隨機性,不可**。一般黑客或軟體無法猜測出來。

那麼,token有什麼作用?又是什麼原理呢?

token一般用在兩個地方——防止表單重複提交、anti csrf攻擊(跨站點請求偽造)。

兩者在原理上都是通過session token來實現的。當客戶端請求頁面時,伺服器會生成乙個隨機數token,並且將token放置到session當中,然後將token發給客戶端(一般通過構造hidden表單)。下次客戶端提交請求時,token會隨著表單一起提交到伺服器端。

然後,如果應用於「anti csrf攻擊」,則伺服器端會對token值進行驗證,判斷是否和session中的token值相等,若相等,則可以證明請求有效,不是偽造的。

不過,如果應用於「防止表單重複提交」,伺服器端第一次驗證相同過後,會將澀session中的token值更新下,若使用者重複提交,第二次的驗證判斷將失敗,因為使用者提交的表單中的token沒變,但伺服器端session中token已經改變了。

上面的session應用相對安全,但也叫繁瑣,同時當多頁面多請求時,必須採用多token同時生成的方法,這樣占用更多資源,執行效率會降低。因此,也可用cookie儲存驗證資訊的方法來代替session token。比如,應對「重複提交」時,當第一次提交後便把已經提交的資訊寫到cookie中,當第二次提交時,由於cookie已經有提交記錄,因此第二次提交會失敗。

不過,cookie儲存有個致命弱點,如果cookie被劫持(xss攻擊很容易得到使用者cookie),那麼又一次gameover。黑客將直接實現csrf攻擊。

所以,安全和高效相對的。具體問題具體對待吧。

php表單加入token防止重複提交

原理在於生成乙個隨機字串放在session裡,提交表單後來驗證這個字串,可以做到防止他人自己寫form來欺騙提交,重複提交或者雙擊提交。

簡單的用php實現的**如下:

<?php /*

* php簡單利用token防止表單重複提交

* 此處理方法純粹是為了給初學者參考

*/session_start();

function set_token()

程式設計客棧function valid_token()

//如果token為空則生成乙個token

if(!isset($_session['token']) || $_session['token']=='')

if(isset($_post['test']))else

}?>

上面的比較簡單一點的方法,下面的**更加安全一點。

token.php

<?php /*

* created on 2013-3-25

* * to change the template for this generated file go to

* window - preferences - phpeclipse - php - code templates

*/function gettoken($len = 32, $md5 = true) ',

'[',

']',

'h',

';',

'w',

'.',

'/',

'|',

':',

'1',

'e',

'l',

'4',

'&',

'6',

'7',

'#',

'9',

'a',

'a',

'b',

'b',

'~',

'c',

'd',

'>',

'e',

'2',

'f',

'p',

'g',

')',

'?',

'h',

'i',

'x',

'u',

'j',

'k',

'r',

'l',

'3',

't',

'm',

'n',

'=',

'o',

'+',

'p',

'f',

'q',

'!',

'k',

'r',

's',

'c',

'm',

't',

'v',

'j',

'u',

'v',

'w',

',',

'x',

'i',

'$',

'y',

'z',

'*');

# array indice friendly number of chars;

$numchars = count($chars) - 1;

$token = '';

# create random token at the specified length

for ($i = 0; $i < $len; $i++)

$token .= $chars[mt_rand(0, $numchars)];

# should token be run through md5?

if ($md5)

return $token;

}?>

form.php

<?php include_once("token.php");

$token = gettoken();

session_start();

$_session['token'] = $token;

?>

action.php

<?php session_start();

if($_post['token'] == $_session['token'])else

?>

php表單加入Token防止重複提交

php簡單利用token防止表單重複提交 此處理方法純粹是為了給初學者參考 session start function set token function valid token 如果token為空則生成乙個token if isset session token session token i...

php表單加入Token防止重複提交

token token,就是令牌,最大的特點就是隨機性,不可 一般黑客或軟體無法猜測出來。那麼,token有什麼作用?又是什麼原理呢?token一般用在兩個地方 防止表單重複提交 anti csrf攻擊 跨站點請求偽造 兩者在原理上都是通過session token來實現的。當客戶端請求頁面時,伺服...

php 表單加入Token防止重複提交

token token,就是令牌,最大的特點就是隨機性,不可 一般黑客或軟體無法猜測出來。token作用與原理 token一般用在兩個地方 兩者在原理上都是通過session token來實現的。當客戶端請求頁面時,伺服器會生成乙個隨機數token,並且將token放置到session當中,然後將t...