demo地址:http://www.btgoogle.com/12306/

圣诞节,12306送给了我们一个大礼物。大约 14w的数据泄露, 看网上都沸沸扬扬的。开始也准备找一个数据库来看看,随后,我 得到了 一份 数据  大约 14M  也就是

143,863 个数据

.文件泄露的是 txt 格式的文件。 当群里有人也得到了这份数据。准备做一个 12306泄露的数据库做一个网站。提供他人查询自己是否在此次泄露信息的名单中。

信息是这种形式的

当时群里,有人开始比速度,程序员都好面子~~~

有人说 5分钟搞定。 过了 差不多 5-10分钟 。确实搞定了。

他的方法是  利用正则匹配 本地文件,然后网站内 通过get 获取email  然后正则匹配到 输出  已泄露。

  1. 1 <?php
  2. 2
  3. 3 $email = $_GET["email"];
  4. 4
  5. 5 $L = preg_split("/\n/", file_get_contents("12.txt");
  6. 6
  7. 7 foreach($L as $c) {
  8. 8 if (preg_match("/{$emaul}/", $c)) {
  9. 9 echo "已泄露";
  10. 10 break;
  11. 11 }
  12. 12 }

  呵呵 ,呵呵 ,这样确实是把这个处理掉了。这是比的速度。

但是 ,我们还是一步一步的处理数据然后入库,随后查询吧。一共是 14w多数据,开始还考虑使用 sphinx ,显然是没有必要的。

速度不错 。开始准备在这个下面用

order by rand() limit 50

获取 随机的 50个用户的信息。使用 这段语句每执行一次 需要 6秒多,确实很耗时间,随后,网站也崩溃了一段时间。

下面是 遇到同样困扰的处理。

*****************************************************************

来自:http://www.111cn.net/database/mysql/53036.htm

最初使用的是 order by rand()了,发现几万条数据居然要10秒之长的时间很是悲剧吧

 代码如下 复制代码

SELECT * FROM `表名`  order by rand()

显示行 0 - 29 (154,825 总计, 查询花费 10.1125 秒)

后来网上搜索到如下方法,同样数据感觉有很大的提高了(这里测试的是15W数据)

 代码如下 复制代码

SELECT * FROM 表名 WHERE id >= ((SELECT MAX(id) FROM 表名)-(SELECT MIN(id) FROM 表名)) *

RAND() + (SELECT MIN(id) FROM 表名) LIMIT 10

显示行 0 - 29 (154,825 总计, 查询花费 0.0221 秒)

感觉不错了,有朋友说用join可能更好,于时找了一段代码测试一下查询花费 0.0025 秒,又提供了几倍呀。

 代码如下 复制代码

SELECT *
FROM 表名 AS t1
JOIN (
SELECT ROUND( RAND( ) * (
SELECT MAX( id )
FROM 表名 ) ) AS id
) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC
LIMIT 10

显示行 0 - 9 (10 总计, 查询花费 0.0025 秒)

最后还可以优化一下

 代码如下 复制代码

SELECT s_url,title
FROM 表名 AS t1
JOIN (
SELECT ROUND( RAND( ) * (
SELECT MAX( id )
FROM 表名 ) ) AS id
) AS t2
WHERE t1.id >= t2.id and t1.z_type = $z_type ORDER BY t1.id asc LIMIT 10

显示行 0 - 9 (10 总计, 查询花费 0.0008 秒)

总结一下,我们如果用同样的方法在字段选择时越少越好,这不从0.0025直接降到0.0008秒了哦。

*****************************************************************************************************

后面把这一部分使用了 html 静态的了。

随后你需要处理这个文件,处理到数据库中,这里我用的是mysql  。对于字符串的处理,直接用编辑器 自带的正则匹配掉就行了 。

———— 很容易发现很多 这种形式  直接全部替换成 ‘,’  这种形式,每个前面  后面也需要添加相应的字符。^ 匹配开头  $ 匹配结尾。

存储了数据 后面就是直接 使用php 前端直接查询输出了。

下面是关键代码。

  1. $email=$_GET['s'];
  2. $q = "SELECT * FROM `user` WHERE email='$email'";
  3. $r = @mysqli_query($dbc, $q);
  4. echo '<h1>您邮箱搜索的结果:</h1>';
  5. echo "<p>输入您的邮箱查看是否露出了您的数据</p>\n";
  6. echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
  7. <tr><td align="left"><b>邮箱</b></td><td align="left"><b>密码</b></td><td align="left"><b>身份证</b></td><td align="left"><b>用户名</b></td><td align="left"><b>手机号</b></td></tr>
  8. ';
  9. while ($row = @mysqli_fetch_array($r, MYSQLI_ASSOC)) {
  10. $emails=$row['email'];
  11. echo '<tr><td align="left">' . $row['email'] . '</td><td align="left">' .'***'.substr($row['password'],3) . '</td><td align="left">' .'*****'. substr($row["id_card"],5) . '</td><td align="left">' . $row["user"] . '</td><td align="left">' . '***'.substr($row["phone"],3) . '</td></tr>
  12. ';
  13. }
  14. if($emails==null){
  15. echo '<h4 style="color:red">恭喜您!您的数据没有露出!把好运分享给你的好友吧!<h4>';
  16. }
  17. else{echo '<h4 style="color:red">您的数据已经露出,请及时修改密码!分享给你的好友,看看他们有没有露出数据哦!<h4>';}
  18. echo '</table>'; // Close the table.

  demo地址:http://www.btgoogle.com/12306/

如何写一个像btgoogle一样的12306泄露数据查询的更多相关文章

  1. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  2. javascript 写一个ajax 自动拦截,并下载数据

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  3. 请用js写一个函数,实现获取浏览器url中查询字符串中的参数并返回一个数组

    <script> console.log(getUrlArr()); function getUrlArr() { var arr = []; var url = "http:/ ...

  4. python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)

    python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...

  5. 怎样写一个webpack loader

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  6. 请写一个php函数,可以接受任意数量的参数

    请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...

  7. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  8. 自己写一个 jQuery 插件

    我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...

  9. 深入浅出React Native 3: 从零开始写一个Hello World

    这是深入浅出React Native的第三篇文章. 1. 环境配置 2. 我的第一个应用 将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式 ...

随机推荐

  1. IMP 导入数据报错 OCI-21500 OCI-22275

    IMP导入数据报错如下: OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], ...

  2. Redis学习手册(事务)

    一.概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.相信对有关系型数据 ...

  3. C#中Enum用法小结

      enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此 ...

  4. 单核CPU,多线程与性能

      问题概述 单核CPU的计算机上, 多线程能够提高程序运行的性能吗? 这个问题看起来简单,实际很复杂,设计到多方面的因素. 首先我们要把概念搞清楚, 那就是什么是性能? 一般来说, 我们把运行一个任 ...

  5. AFNetworking 3.0迁移指南

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  6. DHCPv6 server port and DHCPv6 client port

    The DHCPv6 draft says that, the port numbers for client and agents are given as 546 & 547 在wires ...

  7. android开发工具类之获得WIFI IP地址或者手机网络IP

    有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...

  8. Android学习之Intent传递数据

    Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...

  9. keystone系列二:keystone源码分析

    六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...

  10. KindEditor 修改多图片上传显示限制大小和张数

    在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...