如何写一个像btgoogle一样的12306泄露数据查询
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 * |
显示行 0 - 9 (10 总计, 查询花费 0.0025 秒)
最后还可以优化一下
代码如下 | 复制代码 |
SELECT s_url,title |
显示行 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泄露数据查询的更多相关文章
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java model文件夹下的 Global ...
- javascript 写一个ajax 自动拦截,并下载数据
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 请用js写一个函数,实现获取浏览器url中查询字符串中的参数并返回一个数组
<script> console.log(getUrlArr()); function getUrlArr() { var arr = []; var url = "http:/ ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
- 怎样写一个webpack loader
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- 请写一个php函数,可以接受任意数量的参数
请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...
- 学记:为spring boot写一个自动配置
spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...
- 自己写一个 jQuery 插件
我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...
- 深入浅出React Native 3: 从零开始写一个Hello World
这是深入浅出React Native的第三篇文章. 1. 环境配置 2. 我的第一个应用 将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式 ...
随机推荐
- IMP 导入数据报错 OCI-21500 OCI-22275
IMP导入数据报错如下: OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], ...
- Redis学习手册(事务)
一.概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.相信对有关系型数据 ...
- C#中Enum用法小结
enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此 ...
- 单核CPU,多线程与性能
问题概述 单核CPU的计算机上, 多线程能够提高程序运行的性能吗? 这个问题看起来简单,实际很复杂,设计到多方面的因素. 首先我们要把概念搞清楚, 那就是什么是性能? 一般来说, 我们把运行一个任 ...
- AFNetworking 3.0迁移指南
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...
- 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 ...
- android开发工具类之获得WIFI IP地址或者手机网络IP
有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...
- Android学习之Intent传递数据
Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...
- keystone系列二:keystone源码分析
六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...
- KindEditor 修改多图片上传显示限制大小和张数
在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...