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


    最近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

  • 相关阅读:
    Ajax传值以及接受传值,@ResPonseBody 和 @RequestBody
    分页
    延迟加载
    mybatis的一级缓存和二级缓存
    拦截器的使用
    Session和Cookie
    逆向工程
    springmvc注解详解
    Java——变量
    Go通关04:正确使用 array、slice 和 map!
  • 原文地址:https://www.cnblogs.com/hongfei/p/csdn_password.html
Copyright © 2020-2023  润新知