All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法_[Asp.Net教程]
ASP.NET2.0中Tabs的简单实现_[Asp.Net教程]
如何将Select查询结果保存到EXCEL中_[SQL Server教程]
Asp.Net中NHiernate的Session的管理_[Asp.Net教程]
怎么在ASP.NET,2.0中使用Membership_.net资料_编程技术
打造简单的PHP&MYSQL留言板_[PHP教程]
WM5.0模拟器用AS来使用PC机的网络_.net资料_编程技术
C#中创建窗体
网页上显示时间的最简单的javascript代码_JavaScript技术_编程技术
asp.net2.0网站基础之创建ASP.NET 2.0网站
Reading number is top 10 pictures
A man's favorite things8
Sora aoi in China3
The money of more than 100 countries and regions3
这才是真正的人体艺术3
Ashlynn Brooke a group sexy photo4
YangYuYing and ZhengShaoQiu dance on the generous come interest dye-in-the-wood
Beauty Sun Feifei
云南大理的美女
29 the belle stars after bath figure3
心有鱼而力不足
Download software ranking
Tram sex maniac 2 (H) rar bag18
塘西风月痕
Boxer vs Yellow5
apache-tomcat-6.0.33
Unix video tutorial14
Visual C++界面编程技术
Unix video tutorial12
Boxer's Top ten classic battle9
C++教程第四版
jBuilder2006
归海一刀 published in(发表于) 2014/2/17 7:13:19 Edit(编辑)
PHP Token(令牌)设计_[PHP教程]

PHP Token(令牌)设计_[PHP教程]

PHP Token(令牌)设计_[PHP教程]

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:


class GEncrypt extends GSuperclass {
protected static function keyED(txt,encrypt_key){
encrypt_key = md5(encrypt_key);
ctr=0;
tmp = "";
for (i=0;iif (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;iif (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;imd5 = substr(txt,i,1);
i++;
tmp.= (substr(txt,i,1) ^ md5);
}
return tmp;
}
}
?>



添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.