YII實現ThinkPHP的表單令牌

2021-06-16 16:52:35 字數 1443 閱讀 1464

thinkphp做了很多傻瓜式的外掛程式,其實慢方便開發的,最近看到了乙個關於表單安全的很不錯!

在think中表單令牌:

thinkphp內建了表單令牌驗證功能,可以有效防止表單的重複提交等安全防護。

表單令牌驗證相關的配置引數有:

'token_on'

=>

true

,// 是否開啟令牌驗證 預設關閉

'token_name'

=>

'__hash__'

,// 令牌驗證的表單隱藏欄位名稱

'token_type'

=>

'md5'

,//令牌雜湊驗證規則 預設為md5

'token_reset'

=>

true

,//令牌驗證出錯後是否重置令牌 預設為true

如果開啟表單令牌驗證功能,系統會自動在帶有表單的模板檔案裡面自動生成以token_name為名稱的隱藏域,其值則是token_type方式生成的雜湊字串,用於實現表  單的自動令牌驗證。

自動生成的隱藏域位於表單form結束標誌之前,如果希望自己控制隱藏域的位置,可以手動在表單頁面新增 標識,系統會在輸出模板的時候自動替換。

如果頁面中存在多個表單,建議新增標識,並確保只有乙個表單需要令牌驗證。

如果個別頁面輸出不希望進行表單令牌驗證,可以在控制器中的輸出方法之前動態關閉表單令牌驗證,例如:c

('token_on'

,false

);$this

->

display

();模型類在建立資料物件的同時會自動進行表單令牌驗證操作,如果你沒有使用create方法建立資料物件的話,則需要手動呼叫模型的autochecktoken方法進行表單令牌驗證。如果返回false,則表示表單令牌驗證錯誤。例如:

$user =m

("user"

);// 例項化user物件

// 手動進行令牌驗證

if(!

$user

->

autochecktoken

($_post

))        這基本是乙個表單令牌的實現和原理,然後在yii中目前我沒有找到類似的東西,可能接觸的太淺的緣故,但是看了這些究其根本只是乙個引數設定,對比,銷毀的過程,來實現對表單多次傳送的控制!那麼事情就簡單了,我們在每次render的時候,以session模式給予乙個keys賦值,到達頁面的form進行隱藏,到提交頁面進行對比session,當對比失敗則不是正確表單,對比成功銷毀sesion.這樣乙個簡單有效的表單令牌就實現了!

大家也許會發現很多大型**url後面的params,隨意的改動不會影響頁面的顯示,而自己做的很容易就會引發404頁面,或者跳到指定頁面,這其實是乙個wasc 威脅,我們要對所有的值進行區域性,給預設值,所有的輸出都實體化一下就好了!

thinkphp與Yii比較,框架之間的選擇

如果自己功力夠的話,也可以自己做框架 也可以自己選擇在yii或者tp的基礎上重寫他的一些功能和特性,形成自己的框架 不要相信其它人所說的哪個框架好,哪個框架效能怎麼樣,乙個框架使用久了,自然就形成了自己的框架,有自己的類庫 所以不需要糾結使用哪個框架。我在tp2.0的基礎上形成過自己的框架系統,後來...

yii的pathinfo方式實現

yii2.0在瀏覽器中預設檢視控制器下的方法是 要是在瀏覽器上輸出 就更加方便 下面解決方法 1.開啟config目錄下的web.php,在 config components 中加入以下內容 不過路徑還是形如 ltbk.cn index.php post index 2.配置apache 在yii...

thinkphp分頁實現

以上為我對於thinkphp分頁的實現效果,兩種方法,一種呼叫公共函式中的函式方法 參考一種是在模型中書寫分頁的方法 function getpage count,pagesize 10 在控制器pagecontroller.class.php中呼叫 namespace home controlle...