浅谈PHP表单安详中Token的现实应用
配景 早年做品级掩护的时辰漏扫常常扫描出来一些网站有CSRF的裂痕,因为一样平常扫描器提醒为中风险必必要办理常常和开拓职员扯皮要怎么改怎么改,每次都描写的不清晰常常感受心累。 最近看到OWASP的一本《安详测试指南第四版》的书就顺手翻了二页个中谈到了关于会话打点测试的一栏目较量感乐趣就从网上任意下载了一个开源的CMS做一下黑盒测试,练练手万一赋闲了还能转化写写代码做做测试,进程中发明CMS对付许多表单哀求都回收了Token认证做的挺好的于是写个条记利便日其后看。 抓包说明 架起署理burpsuit开启筹备大干一场,起首找到了一个表单的提交页面,表单首要回收Post要领举办提交,任意填了点数据就提交了。 通过burpsuit拦截下来之后看一下各个参数 通过Post提交到一个Task的action,看这么多参数万一有过滤不严酷的环境要领说不定能呈现一些XSS可能sql注入的裂痕于是就轻微看了一下就发送到了scanner。 Proxy放过之后页面却呈现了非常提醒Token验证不通过。 然后当真一看发明除了一些表单提交的参数外尚有一个token=20e168c64ce1f1f98f89e4c8ff9e3aba的字段。表单提交之后response数据包傍边也有一个新的token”:”e40fe4b3afedc40f95903fef92eb79ed,这样导致这一个哀求包只能哀求一次,Burpsuit Scanner基于原有哀求包的参数测试的扫描模式就根基上没有什么用了。 Token广泛有二个浸染:
因为token具有较好的随机性,不轻易被揣摩出来具有精采的安详性,于是看一下源码傍边的实现。 源码说明 通过哀求的路径找到对应的php文件,当哀求这个表单的时辰会自动执行$label->token()这么一个要领 查察label.php的源码,token这个要领结构hidden表单界说了一个token的变量后赋值CoreFuncCoreFunc::$token 继承再查察CoreFunc的源码,包括了对token天生的进程 挪用microtime天生毫秒数之后打散成数组增进随机性,通过substr提取数字与随机数相乘之后计较md5担保了token的不行猜测性。 Token的随机性取决于当前时刻、rand随机、md5散列算法 将天生的token存如session处事器会话傍边 提交的表单首要由task.php处理赏罚task类傍边只是读取了session中userid的字段,行使父类Content的 parent::action($jump, $commit)要领举办验证通过之后再处理赏罚表单数据。 一层又一层,感受真伟大。Content类担任了Controller中的checkToken()搜查 Token无论验证是否通过城市删除当前token的值担保了不会被重用 总结 session应用相对安详但也繁琐,同时当多页面多哀求时必需回收多Token同时天生的要领,这样占用更多资源,执行服从会低落。可是对安详性的晋升是明明的,对付表单的一再提交、基于单个数据包的变形扫描、办理CSRF裂痕也不是一种不错的方法。 【编辑保举】
点赞 0 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |