PHP Token(令牌)設(shè)計(jì)
設(shè)計(jì)目標(biāo):
- 避免重復(fù)提交數(shù)據(jù).
- 檢查來(lái)路,是否是外部提交
- 匹配要執(zhí)行的動(dòng)作(如果有多個(gè)邏輯在同一個(gè)頁(yè)面實(shí)現(xiàn),比如新增,刪除,修改放到一個(gè)PHP文件里操作)
這里所說(shuō)的token是在頁(yè)面顯示的時(shí)候,寫到FORM的一個(gè)隱藏表單項(xiàng)(type=hidden). token不可明文,如果是明文,那就太危險(xiǎn)了,所以要采用一定的加密方式.密文要可逆.俺算法很白癡,所以采用了網(wǎng)上一個(gè)現(xiàn)成的方法.
如何達(dá)到目的:
- 怎樣避免重復(fù)提交?
在SESSION里要存一個(gè)數(shù)組,這個(gè)數(shù)組存放以經(jīng)成功提交的token.在后臺(tái)處理時(shí),先判斷這個(gè)token是否在這個(gè)數(shù)組里,如果存在,說(shuō)明是重復(fù)提交.
- 如何檢查來(lái)路?
可選項(xiàng),這個(gè)token在生成的時(shí)候,加入了當(dāng)前的session_id.如果別人copy你的html(token一迸copy),在提交時(shí),理論上token里包含的session_id不等于當(dāng)前session_id,就可以判斷這次提交是外部提交.
- 如何匹配要執(zhí)行的動(dòng)作?
在token的時(shí)候,要把這個(gè)token的動(dòng)作名稱寫進(jìn)這個(gè)token里,這樣,在處理的時(shí)候,把這個(gè)動(dòng)作解出來(lái)進(jìn)行比較就行了.
我以前寫的GToken不能達(dá)到上面所說(shuō)的第二條,今天修改了一下,把功能2加上了.個(gè)人感覺還行.
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) PHP Token(令牌)設(shè)計(jì) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|