【小(xiǎo)編推薦】ThinkPHP3.↑σ2——表單令牌

2014-06-26   ≈€|   發布者:梁國(guó)芳 ✔ §α;  |   查™δ↑γ看(kàn):3320次

Thinkphp

ThinkPHP支持表單令牌驗證功能(néng),可(kě)以有(yǒu)δγ×效防止表單的(de)重複提交等安全防護。¶>

要(yào)啓用(yòng)表單令牌功能φ★ (néng),需要(yào)配置行(xíng)為(wèi)綁定,在應用(yò•↕ng)或者模塊的(de)配置目錄下(xià)面的(de)行(xín€☆g)為(wèi)定義文(wén)件(jiàn)tags.php中,添加:

  1. return array(
  2. // 添加下(xià)面一(yī)行(xíng)定義即♠↕ 可(kě)
  3. 'view_filter' => array('Behavior\TokenBuild'),
  4. // 如(rú)果是(shì)3.2.1版本 需要(yào)改‍↕γ成
  5. // 'view_filter' => array('Behavπ÷ior\TokenBuildBehavior'),
  6. );

表示在view_filter标簽位置執行(xíng)表單令牌檢測行(x®☆→íng)為(wèi)。

表單令牌驗證相(xiàng)關的(de)配置參數(shù)有(↑∞ yǒu):

  1. 'TOKEN_ON' => true, // 是(shì)否開(kāi)啓令牌驗證 默認關閉
  2. 'TOKEN_NAME' => '__hash__', // 令牌驗證的(de)表單隐藏字段名稱,默認為↓•(wèi)__hash__
  3. 'TOKEN_TYPE' => 'md5', //令牌哈希驗證規則 默認為(wèi)MD5
  4. 'TOKEN_RESET' => true, //令牌驗證出錯(cuò)後是(shì)否Ω↕λ重置令牌 默認為(wèi)true

如(rú)果開(kāi)啓表單令牌驗證功能(β÷₹<néng),系統會(huì)自(zì)動在帶有(y∑<​εǒu)表單的(de)模闆文(wén)件(jφ‌÷δiàn)裡(lǐ)面自(zì)動生(shēng)成以TOKEN_NAME為(wèi)名稱的(de)隐藏域,其值則是(shì)TOKEN_TYPE方式生(shēng)成的(de)哈希字符串,用(yòng)于實現(​ ∏↔xiàn)表單的(de)自(zì)動令牌驗證。

自(zì)動生(shēng)成的(de)隐藏域位于表單Form結束♠₽¥标志(zhì)之前,如(rú)果希望自(zì)己控制(zhì)隐藏域的(de€ λ)位置,可(kě)以手動在表單頁面添加{__TOKEN__}标識,系統會(huì)在輸出模闆的(de)時(shí)候自(zì)動替換。

如(rú)果頁面中存在多(duō)個(gè)表單,建議(yì)添£¶>₹加标識,并确保隻有(yǒu)一(yī)個(gè)表單需要(yào)令牌驗證。

如(rú)果個(gè)别頁面輸出不(bù)希望進行(xíng)表單令牌®™驗證,可(kě)以在控制(zhì)器(qì)中的(de)輸Ω§ε出方法之前動态關閉表單令牌驗證,例如(rú):±←

  1. C('TOKEN_ON',false);
  2. $this->display();

模型類在創建數(shù)據對(duì)象的(de)同時(shí)會(huì)自γβ↓(zì)動進行(xíng)表單令牌驗證操作(zuò),如(rú)果你(©  nǐ)沒有(yǒu)使用(yòng)create方法創建數(shù←×π)據對(duì)象的(de)話(huà),則需要(yào)手動調用(yòng' ∑♦)模型的(de)autoCheckToken方法進行(xíng)表單令牌驗證。如(rú)果返回false,則表示表單令牌驗γ×>證錯(cuò)誤。例如(rú):

  1. $User = M("User"); // 實例化(huà)User對(duì)象
  2. // 手動進行(xíng)令牌驗證
  3. if (!$User->autoCheckToken($_POST)){
  4. // 令牌驗證錯(cuò)誤
  5. }