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

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

143,863 个数据

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

信息是这种形式的

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

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

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

  1 <?php
  2
  3 $email = $_GET["email"];
  4
  5 $L = preg_split("/\n/", file_get_contents("12.txt");
  6
  7 foreach($L as $c) {
  8     if (preg_match("/{$emaul}/", $c)) {
  9             echo "已泄露";
 10             break;
 11     }
 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 前端直接查询输出了。

下面是关键代码。

$email=$_GET['s'];
$q = "SELECT * FROM `user` WHERE email='$email'";
$r = @mysqli_query($dbc, $q);
echo '<h1>您邮箱搜索的结果:</h1>';
echo "<p>输入您的邮箱查看是否露出了您的数据</p>\n";
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
	<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>
';
while ($row = @mysqli_fetch_array($r, MYSQLI_ASSOC)) {
	$emails=$row['email'];
    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>
		';
}
		if($emails==null){
			echo '<h4 style="color:red">恭喜您!您的数据没有露出!把好运分享给你的好友吧!<h4>';
		}
		else{echo '<h4 style="color:red">您的数据已经露出,请及时修改密码!分享给你的好友,看看他们有没有露出数据哦!<h4>';}
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. python中的对象拷贝

    python中.进行函数參数传递或者返回值时,假设是一般的变量,会拷贝传递.假设是列表或字典则是引用传递.那python怎样对列表和字典进行拷贝传递呢:标准库的copy模块提供了两个方法:copy和d ...

  2. cocos2dx jsb 在IOS与安卓下的一些不同之处

    cocos2dx版本 2.1.4 1:字体大小 cocosbuilder publish后应该注意IOS和安卓目录下的字体文件的规格是否齐全: 2:cc.LabelTTF 在ios下,cc.Label ...

  3. vmtouch - the Virtual Memory Toucher

    https://hoytech.com/vmtouch/ [root@localhost ~]# git clone git://github.com/hoytech/vmtouch.git 正克隆到 ...

  4. JVM专题

    http://blog.csdn.net/ITer_ZC/article/category/2758863

  5. partition例子

    10.13 标准库定义了名为partition的算法,它接受一个谓词,对容器内容进行划分,使得谓词为true的值会排在容器的前半部分,而使谓词为false的值会排在后半部分.算法返回一个迭代器,指向最 ...

  6. linux http请求监控工具httpry---官方文档

    原文地址:http://dumpsterventures.com/jason/httpry/ core program httpry is a specialized packet sniffer d ...

  7. 配置servers时,错误:Setting property 'source' to 'org.eclipse.jst.jee.server:hczm' did not find a matching property

    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.e ...

  8. springmvc 双亲上下文导致的 No mapping found for HTTP request

    今天搭建spring mvc ,结果发出请求总是No mapping found for HTTP request with URI [******] 于是开始排查了半天,后来在网上搜到了双亲上下文的 ...

  9. Linux环境下搭建Android开发环境

    最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...

  10. C#创建自定义配置节点

    转载:http://www.educity.cn/develop/495003.html 在.Net应用程序中我们经常看到VS为我们生成的项目工程中都会含有app.config或者web.connfi ...