国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP Token(令牌)設計

2024-05-04 21:52:40
字體:
來源:轉載
供稿:網友

PHP Token(令牌)設計

設計目標:

  1. 避免重復提交數據.
  2. 檢查來路,是否是外部提交
  3. 匹配要執行的動作(如果有多個邏輯在同一個頁面實現,比如新增,刪除,修改放到一個PHP文件里操作)

這里所說的token是在頁面顯示的時候,寫到FORM的一個隱藏表單項(type=hidden).
token不可明文,如果是明文,那就太危險了,所以要采用一定的加密方式.密文要可逆.俺算法很白癡,所以采用了網上一個現成的方法.

如何達到目的:

  1. 怎樣避免重復提交?
    在SESSION里要存一個數組,這個數組存放以經成功提交的token.在后臺處理時,先判斷這個token是否在這個數組里,如果存在,說明是重復提交.
  2. 如何檢查來路?
    可選項,這個token在生成的時候,加入了當前的session_id.如果別人copy你的html(token一迸copy),在提交時,理論上token里包含的session_id不等于當前session_id,就可以判斷這次提交是外部提交.
  3. 如何匹配要執行的動作?
    在token的時候,要把這個token的動作名稱寫進這個token里,這樣,在處理的時候,把這個動作解出來進行比較就行了.

我以前寫的GToken不能達到上面所說的第二條,今天修改了一下,把功能2加上了.個人感覺還行.

 

請大家看代碼,感覺哪里有不合理的地方,還請賜教!謝謝.

加密我是找的網上的一個方法,稍作了一下修改.

GEncrypt.inc.php:

<?php
class GEncrypt extends GSuperclass {
protected static function keyED(txt,encrypt_key){
encrypt_key = md5(encrypt_key);
ctr=0;
tmp = "";
for (i=0;i<strlen(txt);i++){
if (ctr==strlen(encrypt_key)) ctr=0;
tmp.= substr(txt,i,1) ^ substr(encrypt_key,ctr,1);
ctr++;
}
return tmp;
}

public static function encrypt(txt,key){
//encrypt_key = md5(rand(0,32000));
encrypt_key = md5(((float) date("YmdHis") + rand(10000000000000000,99999999999999999)).rand(100000,999999));
ctr=0;
tmp = "";
for (i=0;i<strlen(txt);i++){
if (ctr==strlen(encrypt_key)) ctr=0;
tmp.= substr(encrypt_key,ctr,1) . (substr(txt,i,1) ^ substr(encrypt_key,ctr,1));
ctr++;
}
return base64_encode(self::keyED(tmp,key));
}

public static function decrypt(txt,key){
txt = self::keyED( base64_decode(txt),key);
tmp = "";
for (i=0;i<strlen(txt);i++){
md5 = substr(txt,i,1);
i++;
tmp.= (substr(txt,i,1) ^ md5);
}
return tmp;
}
}
?>

共3頁上一頁123下一頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂宁市| 喀什市| 扶余县| 汽车| 岑溪市| 和顺县| 扬州市| 赣州市| 石景山区| 永丰县| 绥江县| 鄂温| 建瓯市| 白城市| 华容县| 宁明县| 克什克腾旗| 柳林县| 长宁县| 旌德县| 托里县| 南京市| 新蔡县| 韶山市| 屏东县| 彰武县| 修水县| 濮阳县| 金平| 墨竹工卡县| 海淀区| 兴海县| 韩城市| 宝应县| 泰安市| 陕西省| 广东省| 岗巴县| 贵州省| 固镇县| 安宁市|