
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中,添加:
return array(// 添加下(xià)面一(yī)行(xíng)定義即♠↕ 可(kě)'view_filter' => array('Behavior\TokenBuild'),// 如(rú)果是(shì)3.2.1版本 需要(yào)改↕γ成// 'view_filter' => array('Behavπ÷ior\TokenBuildBehavior'),);
表示在view_filter标簽位置執行(xíng)表單令牌檢測行(x®☆→íng)為(wèi)。
表單令牌驗證相(xiàng)關的(de)配置參數(shù)有(↑∞ yǒu):
'TOKEN_ON' => true, // 是(shì)否開(kāi)啓令牌驗證 默認關閉'TOKEN_NAME' => '__hash__', // 令牌驗證的(de)表單隐藏字段名稱,默認為↓•(wèi)__hash__'TOKEN_TYPE' => 'md5', //令牌哈希驗證規則 默認為(wèi)MD5'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ú):±←
C('TOKEN_ON',false);$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ú):
$User = M("User"); // 實例化(huà)User對(duì)象// 手動進行(xíng)令牌驗證if (!$User->autoCheckToken($_POST)){// 令牌驗證錯(cuò)誤}
