正在浏览:
1 名游客
XOOPS中实现FORM TOKEN |
||||
---|---|---|---|---|
初级会员
注册日期:
2/6 11:32 所属群组:
注册会员 等级: 3; EXP: 62
HP: 0 / 65 MP: 8 / 26 |
转载自CMSGP [Http://www.cmsgp.org ]
在XOOPS中,为了防止通过恶意提交内容来攻击网站,在form中插入了一个隐藏的参数form_token。每次用户提交内容是,XOOPS都会对 form_token进行验证,当验证失败,或者form_token超时时就会使这次提交无效。Form_token主要的工作原理是: 1. 生成一个token并输出到html form中; 2. 验证用户提交的form中的token参数; 在XOOPS中,所有的与token有关的代码都定义在class/xoopsecurity.php中。 生成一个token 1. 设置一个token有效期 要生成一个form token, 首先要确定一个token的有效时间;在XOOPS中,默认的token有效时间为sesson.gc_maxlifetime;如果maxlifetime等于0时,默认的有效时间为900秒。 2. 建立token id,通过md5散列一个随机数; 3. 将token数据保存在session中 4. 通过已知的token id利用md5散列出token。
Token验证 1. 检查保存token的session变量XOOPS_TOKEN_SESSION是否存在。 2. 循环$_SESSION[‘XOOPS_TOKEN_SESSION’]找到对应的token 3. 检查对应的token是否已经过期。
3/20 15:28
|
|||
|
与PHPBB的FORM TOKEN的对比 |
||||
---|---|---|---|---|
初级会员
注册日期:
2/6 11:32 所属群组:
注册会员 等级: 3; EXP: 62
HP: 0 / 65 MP: 8 / 26 |
PHPBB中的form token工作原理与XOOPS有一点不同。PHPBB中的并不需要使用session来保存token数据。而是通过将token生成时间追加到 form的隐藏数据中。所有和token有关的函数都定义在includes/functions.php的add_form_key()和 check_form_key()函数中;
生成token PHPBB中生成token的代码如下: $token = sha1($now . $user->data['user_form_salt'] . $form_name . $token_sid); $now是当前时间,’user_form_salt’是用户的一个随机标示,$form_name和$token_sid都是可选的;当产生了token以后,PHPBB会把token和now (当前时间)一起添加到form中,等到用户提交form以后使用。 Token验证 PHPBB中的Token验证比较简单。就是把从用户提交的form中的token和expired date进行验证,如果token验证成功,并且expired date时间没有超时,那么这个form就通过验证了。
转载自[http://www.cmsgp.org/article/20.html]
3/21 13:50
|
|||
|
您不可查看帖子。
您不可发帖。
您不可回复。
您不可编辑自己的帖子。
您不可删除自己的帖子。
您不可发起投票调查。
您不可在投票调查中投票。
您不可上传附件。
您不可不经审核直接发帖。
您不可使用主题类别。
您不可以使用HTML语法。
您不可以使用签名档。