• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

科普:社工库及安全二三事
2013-11-28 @ DOCS fgetsfreadfseekphpsercuritysocialengineeredstream_get_line

一、安全事件

今年的脱裤时间比往年曝光的多,不代表过去就少,很可能你的密码早都泄漏了。

大部分人都是懒得设置不同的密码,如果每个帐号密码都独立肯定记不住也不好管理。

我也是一样,如果从服务的角度去分别设置密码就相对的可以坚固安全和易用

比如:1) 网银、支付等财务相关的关键服务不多可以每个设置不同的复杂密码,密码安全等级最高;

2) 其次是常用网站、工作相关,密码设置相对复杂,但是可以部分统一不用每个都不同;

3) 剩下的其他的就用极简单的密码即可,不留真实资料,反正丢了也无所谓的。

很多人都还没有意识到密码泄漏的严重性,如果是针对个人的持续深入跟踪和攻击,

你泄漏的密码虽然无关紧要,但是你留下的信息,你的习惯、爱好等确实很重要的,一旦被挖掘总结出来,后果也不看设想。

二、php大文件处理

说到社工库就不得不说各种在线查询和下载的,

下载下来的库基本都是文本格式,常见的方法是专用的大文件搜索工具来搜索

如果想整理入库整理成高效的web版,那就少不了大文件处理的需求了。

网上搜了一下大文件处理的方法,不少仿tail的对于社工库的需求没什么帮助

如: http://sjolzy.cn/php-large-file-read-operation.html

基本上就2个分支:fseek+fread块处理方式 和 fgets/stream_get_line行处理方式

1) 写入数据库

对于社工库的大文件写入数据库这种需求来说经测试stream_get_line效率最高

因为要逐行读取处理后入库,但是效率仍不理想

i7-2640M, 8G内存, SSD硬盘, xampp默认配置环境下测试(max-execution-time=30s, memory_limit=128M)

428M多玩只遍历所有行不处理, 读取长度4096字节, stream_get_line耗时13.85s, fgets耗时18.61s

读取长度可大可小, stream_get_line几乎没影响, fgets设置65535时会执行超时

2) 只搜索

先用做了个简单测试,还是多玩的库stream_get_line+preg_match搜索”/asdasd/i”找到后break while(!feof($h)),循环读2w+次,耗时0.29s

效果看起来还不错,然后故意测试了一个倒数第N行的字符串搜索”/BABYSWEET/”,结果就execute timeout了, ini_set(‘max_execution_time’, 60)后看到执行结果为53.05s, 这个测试结果有点失望。

然后用fseek+fread块搜索,设置块大小65535,搜索”/asdasd/i” 耗时0.007s,搜索”/BABYSWEET/”耗时0.68s。

在stackoverflow上看到一篇文章

http://stackoverflow.com/questions/5249279/file-get-contents-php-fatal-error-allowed-memory-exhausted/5249971#5249971

据说用这个方法实现了 https://www.cuddlycactus.com/knownpasswords/ 94+ million passwords的搜索

每次fread一个length后文件指针移动length,这样就巧妙的实现了分段读取全部文件,传递给callback处理,并且是用指针形式,不会占用大量内存

实测搜索”/BABYSWEET/”效果,按65535大小分块读取,耗时2.4s,效果不如fseek+fread。

3) 总结

如果只搜索fseek+fread块方式处理效果杠杠的,

如果是需要逐行处理stream_get_line绝对不错,但是数量大的时候依然会出现timeout的情况

下一篇:   BAT+MultiTaskTimer进程守护
上一篇:   HTA+JS桌面应用:电影自动评分工具(豆瓣API)
暂无评论

Cancel reply