【代码版】今天,你的密码泄露了吗?

最近CSDN数据库泄露事件闹得沸沸扬扬,处于安全隐患考虑,就从网上下载了273M的sql文件,想查看下自己在csdn的注册信息是否遭到泄露。

另外,处于学习的目的,自己做了写了一个可以查询用户信息的小模块。

自己是个小菜鸟,写的过程中,遇到了很多问题,在此列出,希望大家帮忙指点迷津。。。。。。


FAQS:

①直接对sql文件进行操作的话,查找效率似乎很慢,如何提高呢?

②我是将数据写入数据库再对数据库操作的,但,每次要查询的时候,需要从头到尾遍历一遍,几十万条的数据量,也得花费很长时间,后面,对数据表进行索引,速度是提高了不少,但是还是有点差强人意,不知道还有什么优化的办法?

③php程序的默认的最长执行时间是30s,除了在文件头加上 ini_set("max_execution_time", "0")这句代码外,还有没有别的解决办法?

④如果是你写的话,你的思路是什么呢?


 

提交数据的界面(仿安全宝的界面):

 

查询结果界面:

将273MB的sql数据全部写入数据库中,使用php对数据库进行操作

将数据写入数据库的php代码:

<?php

header("content-type:text/html;charset=utf-8");

require_once('php.ini.php');

ini_set("max_execution_time", "0");

$filename="csdn.sql";

$fp=fopen($filename,"r");

while(!feof($fp)) {

$con=fgets($fp);

$sql="insert into all_user (user) values('".$con."')";

mysql_query($sql);

}

echo "数据插入成功";

?>

 

解释:

①     ini.php中包含了连接选择数据库的代码

②     ini_set("max_execution_time", "0");因为数据量过大,在php最长的执行时间(30s)内不能全部写入数据库,30s后服务器会强行终止正在执行的程序,30s内我只能写入13万条左右的记录,加上这句代码,数值0表示没有执行时间的限制,你的程序想要跑多久就跑多久

③     函数feof()的作用是:用以检测文件指针$fp是否到达了文件末尾(eof),如果文件指针到了EOF或者出错时则返回TRUE,否则返回一个错误,其他情况返回false

④     因为从网上下载的csdn数据库文件是以一条记录一行的形式给出的,所以使用fgets()函数,没循环一次就读取一行,并将数据通过sql语句写入的数据库当中

 

核心代码:

<?php

header("content-type:text/html;charset=utf-8");

require_once('php.ini.php');

ini_set('max_execution_time',0);

$info=$_POST['info'];//接收表单提交过来的信息

$flag=false;

$count=1;

$time_start=microtime();//查询开始时间

$sql="select * from all_user where MATCH(`user`) AGAINST ('$info' IN BOOLEAN MODE)";

$query=mysql_query($sql);

while($arr=mysql_fetch_array($query)){

$flag=true;

echo $count.")泄露信息:&nbsp;".$arr['id']."---".$arr['user']."<br>";

$count+=1;

}

$time_end=microtime();//查询结束时间

echo "<br>此次查询共耗时:".($time_end-$time_start)."秒";

if(!$flag){

echo "<br>查无此信息";

}

?>


文章出自:WEB开发_小飞

转载请注明:http://www.cnblogs.com/hongfei/archive/2011/12/28/csdn_password.html

posted @ 2011-12-28 19:09  曾是土木人  阅读(1056)  评论(2编辑  收藏  举报