CSDN泄露数据引发的思考
2011-12-28 10:46
387 查看
CSDN-中文IT社区-600万 数据泄露,我想这600多万中大部分是程序员吧。
而我们首先关心是的,这部分数据中是否有没有自己的。大部分编辑器打开会很卡,建议使用的软件
1. Editplus
2. WINHEX
3. UltraEdit
这些软件基本都是一次把数据读入内存了(小内存机要注意喽,用了虚拟内存速度也会稍慢了一点)
或许有人窃喜没有自己的,有人担忧自己的密码泄露(很多人账号密码在不同的地方都一样),或许还有人图谋不轨(不过我相信程序员都是高素质的)
其实这个数据也是很有实验价值的。
1. 统计价值
a) 参考 http://www.cnbeta.com/articles/166576.htm
2. 实验价值
a) 对于一般程序员来说,这份数据还是很庞大的。可以做很多实验
由于鄙人属于特别好奇的那种,毫不犹豫做了两个实验。。。
实验一:将600万行导入mysql(PHP)
实验环境
1.win7+mysql+php+apache
2.mysql:utf-8编码,InnoDB
程序流程:php每一行的读取文件,通过正则表达式,提取用户名,密码,邮箱
大约:72.8KB/s (很慢哈)
b)mysql写入速度
经过我的眼测:平均速度保持在5MB/S的写入,如果一直写20分钟的话,6G的空间就没了
3.实验结果
这样的结果却是令人很失望,按照10000条计算 ,20分钟超过600倍的时间,还是没有插入完,甚至只插入了100万多条。(我想,IO速度越到后面,速度愈慢吧,就像复制文件一样,刚开始很快,过一会就慢下来了)
总结:每次只读取一行,IO速度很慢,浪费很多时间,同时mysql写入速度也是有限的
实验二:用php实现数据的搜索
实验环境一样
程序流程:每次也只读取一行
实验较简单,直接贴我的代码了
实验结果:
平均时间大概:15秒
结论:IO和函数成为查询速度的瓶颈!
而我们首先关心是的,这部分数据中是否有没有自己的。大部分编辑器打开会很卡,建议使用的软件
1. Editplus
2. WINHEX
3. UltraEdit
这些软件基本都是一次把数据读入内存了(小内存机要注意喽,用了虚拟内存速度也会稍慢了一点)
或许有人窃喜没有自己的,有人担忧自己的密码泄露(很多人账号密码在不同的地方都一样),或许还有人图谋不轨(不过我相信程序员都是高素质的)
其实这个数据也是很有实验价值的。
1. 统计价值
a) 参考 http://www.cnbeta.com/articles/166576.htm
2. 实验价值
a) 对于一般程序员来说,这份数据还是很庞大的。可以做很多实验
由于鄙人属于特别好奇的那种,毫不犹豫做了两个实验。。。
实验一:将600万行导入mysql(PHP)
实验环境
1.win7+mysql+php+apache
2.mysql:utf-8编码,InnoDB
程序流程:php每一行的读取文件,通过正则表达式,提取用户名,密码,邮箱
<?php /** *作者:小桥流水 *时间:2011-12-23 */ $count_pattern = 0; /*匹配成功个数*/ $count_query = 0; /*数据库插入成功个数*/ $filename = "www.csdn.net.sql"; /*打开的文件名*/ $pattern = "/(.+)\s#\s(.+)\s#\s(.+)/"; /*正则匹配模式串*/ $link = mysql_connect("localhost", "root", "password"); if(!$link){ echo "sql connect error!"; exit; } mysql_select_db("csdn",$link); mysql_query("set names gbk",$link); echo "文件".$filename."大小为:".filesize($filename)." 字节<br>"; date_default_timezone_set("PRC"); echo "开始时间:".date("Y-m-d H:i:s")."<br>"; if($TheFile = fopen($filename, "r")){ $i = 0; while(!feof($TheFile)) { $line = fgetss($TheFile,255); if(preg_match($pattern, $line, $arr)){ $count_pattern++; $sql = "INSERT INTO user (username, psw, email) VALUES ('$arr[1]', '$arr[2]', '$arr[3]')"; if(mysql_query($sql, $link)){ $count_query++; }else{ echo "<font color ='blue'>失败的sql语句:".$sql."</font><br>"; } } $i++; if($i%1000 == 0){ echo "执行到第".$i."条...<br>"; if($i == 10000)/*只用前10000行做测试*/ break; } } if(!fclose($TheFile)){ echo "关闭文件句柄失败!"; } } echo "结束时间:".date("Y-m-d H:i:s")."<br>"; mysql_close($link); echo "<font color='red'><br>-----------结果-----------<br>"; echo "正则表达式匹配成功:".$count_pattern."条!<br>"; echo "数据库插入成功:".$count_query."条!</font><br>"; ?> 测试结果: 1.10000行的结果 有两条sql语句错误,主要原因是没有转义特殊字符,多次实验平均时间为12秒 由此判断这样插入数据,600万条数据需要10分种以上! 2.准备将600万条全部导入 首先,将php的脚本最大执行时间改一下,我改成1200(20分钟)。打开php.ini搜索max_execution_time 重启apache,然后以下PHP代码 if($i == 10000)/*只用前10000行做测试*/ break;
注释掉, 浏览器执行请求,开始漫长的等待。。。等待中,查看这些数据a)php访问该文件速度
大约:72.8KB/s (很慢哈)
b)mysql写入速度
经过我的眼测:平均速度保持在5MB/S的写入,如果一直写20分钟的话,6G的空间就没了
3.实验结果
这样的结果却是令人很失望,按照10000条计算 ,20分钟超过600倍的时间,还是没有插入完,甚至只插入了100万多条。(我想,IO速度越到后面,速度愈慢吧,就像复制文件一样,刚开始很快,过一会就慢下来了)
总结:每次只读取一行,IO速度很慢,浪费很多时间,同时mysql写入速度也是有限的
实验二:用php实现数据的搜索
实验环境一样
程序流程:每次也只读取一行
实验较简单,直接贴我的代码了
<!--作者:小桥流水--> <html> <head> <title>CSDN泄露数据查询</title> </head> <body> <h2>CSDN泄露数据查询</h2> <hr> <form method="get" action="test.php"> 关键字:<input type="text" name="kw" size="30"><br> <input type="reset" value="重置"> <input type="submit" value="查询"> </form> <hr> </p> <? if($_GET["kw"]!='' && $_GET["kw"]!=NULL){ $sw = $_GET["kw"]; }else{ exit; } echo "查询<b>".$sw."</b><br>"; $filename = "www.csdn.net.sql"; date_default_timezone_set("PRC"); echo "开始时间:".date("Y-m-d H:i:s")."<br>"; if($TheFile = fopen($filename, "r")){ $i = 0; $j = 0; while(!feof($TheFile)) { $line = fgetss($TheFile,255); if(strpos($line,$sw) != NULL){ $line = preg_replace("/($sw)/i","<font color='red'><b>\\1</b></font>", $line); echo "第".$i."行:".$line."<br>"; $j++; } $i++; } if(!fclose($TheFile)){ echo "关闭文件句柄失败!"; } if($j>0){ echo "<font color='#22FF22'>共有".$j."条记录!</font><br>"; }else{ echo "<font color='red'><没有查到:".$sw."</font><br>"; } } echo "结束时间:".date("Y-m-d H:i:s")."<br>"; ?> </body> </html>
实验结果:
平均时间大概:15秒
结论:IO和函数成为查询速度的瓶颈!
最后声明:以上实验纯属乱搞,别无它意。也请广大用户保护好自己的密码,正确对待这次事故。
相关文章推荐
- 补卡的糟糕经历引发的思考:一点黑客技术让我们不再泄露那么多数据
- 多玩等网站用户数据泄露 或引发连锁反应
- 图像数据类型引发的思考
- 由【JAVA中参数传递问题】引发除了基本数据类型和引用类型的思考
- 【内存泄露】由Handler引发的内存泄漏的思考
- CSDN小bug引发的思考,求赐教!
- 使用SparkSQL分析CSDN泄露的用户数据[top-n]
- 由一次数据恢复的经历,引发我对“数据安全”的思考
- CSDN 泄露数据库数据分析
- 网络安全宣传周系列:从泄露邮箱地址引发的思考
- 一道面试题引发的对数据类型转换的思考
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
- 由Handler引起内存泄露引发的java类设计思考
- 用户数据泄露案告破:嫌疑人已抓 CSDN受到警告
- MySQL-Front 建表引发的一点小思考(数据表格模版)
- 由对BLOB数据的操作所引发的一系列思考
- 由2000W多条开房数据引发的思考、实践 --IO
- 把CSDN泄露的账户数据转成SQL语句 - 补充导入数据库的操作
- 一个数据交换函数引发的思考
- 数据引发的思考、实践