discuz/uchome等康盛产品formhash()浅析
来源:互联网 发布:c语言怎么求素数的和 编辑:程序博客网 时间:2024/05/18 00:41
formhash是一种类似验证码的东西,用来防止网站外部提交数据。
它在页面打开时就已经生成了,存在一需要提交数据用到的地方的隐藏input里(比如登录、发布文章)。
比如,在UCHOME的登录页面模板里,我们可以看到这样的:
- <input type="hidden" name="formhash" value="<!--{eval echo formhash();}-->" />
formhash这个值是来自formhash()这个函数的。在我们(登录)提交表单时,同时也会把这个formhash值传到服务器,然后验证formhash值是否正确,如果不正确,则判断为非法提交数据。
验证过程在submitcheck()这个函数里,在uchome的include/function_common.php。
- $_POST['formhash'] == formhash()
知道流程了,现在我们就来看看原理。
在formhash()函数中可以看到:
- $_SGLOBAL['formhash'] = substr(md5(substr($_SGLOBAL['timestamp'], 0, -7).'|'.$_SGLOBAL['supe_uid'].'|'.md5($_SCONFIG['sitekey']).'|'.$hashadd), 8, 8);
formhash就是这么得来的:
首先,substr($_SGLOBAL['timestamp'], 0, -7),截取时间戳前3位。(保证formhash在一定的时间里生效且不变,截取前3位,大概是115天),然后跟用户UID、md5后的sitekey等连接得出字符串,然后再md5,并截取字符串的8位。由于sitekey是唯一的,再加上UID,而且都是MD5的,破解的机会几乎是0(不排除MD5以后会被完全破解)。别人无法仿造FORMHASH,就无法远程提交数据了。
- discuz/uchome等康盛产品formhash()浅析
- supesite discuz uchome完全同步
- 戴志康:Discuz!、UCHome和Manyou都是工具
- dedecms整合安装discuz!包括ucenter、uchome
- UCHOME 代码浅析(2) 系统架构解析
- DISCUZ浅析之COOKIE篇
- discuz代码浅析–getgpc()
- DISCUZ浅析之COOKIE篇
- formHash的实现
- formHash的实现--重点
- uchome,我等的花儿也谢了
- Discuz活跃会员头像调用链接到UCHOME页面的代码
- 盛产老公的地方
- 宋朝为什么盛产剩男剩女
- Discuz X:家园底层逻辑浅析(1)
- 为何软件界盛产思想家
- ESJsonFormat 盛产json 对应 class
- Discuz/phpcms等开源程序配置文件集合
- jQuery.extend 函数详解
- ORACLE GOLDENGATE DML 双向同步
- Netjava Lesson8 多线程——让小球动起来
- 5个iOS应用开发者海外学习资源站推荐
- Android_自动化测试工具_Calabash(1)
- discuz/uchome等康盛产品formhash()浅析
- Java 用Look And Feel打造绚丽的界面外观!
- 使用OneNote来构建你自己的知识库
- js frame 框架编程与frameElement
- java实现异步调用实例
- Objective-C内存布局
- App应用之提交到各大市场渠道
- c++全局变量
- 开始写博客啦!