• 得到12306数据后,非技术性吐槽


    这次泄露的是一个14M文件。有13.1W条精准无比的数据。

    简直超级可怕的有木有,即使修改了密码,身份证号,手机号,邮箱,曾用密码也都暴漏出去了。

    25号拿到数据的时候试着登录了几个(没干坏事啊啊,不要抓我),100%正确率。。。。。。。太可怕了。。。。。。

    为了更方便的统计,我写了个控制台程序,把数据导入数据库。

    1、建表

    CREATE TABLE [dbo].[user12306](
        [email] [varchar](50) NULL,
        [password] [varchar](50) NULL,
        [realname] [nvarchar](50) NULL,
        [idcard] [char](20) NULL,
        [username] [varchar](20) NULL,
        [phone] [char](15) NULL,
        [email2] [varchar](50) NULL
    View Code

    2、控制台代码,我是用sqlbulkcopy插的DataTable,为了插入效率快。

    using System;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Text;
    
    namespace Import12306
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                var filePath = ConfigurationSettings.AppSettings["filePath"];
                var connStr = ConfigurationSettings.AppSettings["connStr"];
                var tableName = ConfigurationSettings.AppSettings["tableName"];
                var insertSize = int.Parse(ConfigurationSettings.AppSettings["insertSize"]);
                try
                {
                    var sr = new StreamReader(filePath, Encoding.GetEncoding("gb2312")); //读文件
                    string lineStr;
                    var line = 1;
                    var sqlbulkcopy = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction);
                    sqlbulkcopy.DestinationTableName = tableName;
                    var newdt = GetNewTable();
                    while ((lineStr = sr.ReadLine()) != null) //填充DataTable
                    {
                        var ms = lineStr.Replace("----","|").Split('|');
                        var row = newdt.NewRow();
                        row["email"] = ms[0];
                        row["password"] = ms[1];
                        row["realname"] = ms[2];
                        row["idcard"] = ms[3];
                        row["username"] = ms[4];
                        row["phone"] = ms[5];
                        row["email2"] = ms[6];
                        newdt.Rows.Add(row);
    
                        if (line % insertSize == 0)
                        {
                            Console.WriteLine("正在写入第" + (line - insertSize) + "- " + line + "条数据," + DateTime.Now);
                            newdt.AcceptChanges();
                            sqlbulkcopy.WriteToServer(newdt);
                            Console.WriteLine("完成写入 ," + DateTime.Now);
                            newdt.Clear();
                        }
                        line++;
    
                    } sr.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                Console.ReadLine();
            }
    
            private static DataTable GetNewTable()
            {
    
                #region 创建DataTable
    
                var readTxt = new DataTable("readTxt");
    
                var email = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "email" };
                readTxt.Columns.Add(email);
    
                var password = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "password" };
                readTxt.Columns.Add(password);
    
                var realname = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "realname" };
                readTxt.Columns.Add(realname);
    
                var idcard = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "idcard" };
                readTxt.Columns.Add(idcard);
    
                var username = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "username" };
                readTxt.Columns.Add(username);
    
                var phone = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "phone" };
                readTxt.Columns.Add(phone);
    
                var email2 = new DataColumn { DataType = Type.GetType("System.String"), ColumnName = "email2" };
                readTxt.Columns.Add(email2);
    
                #endregion
    
                return readTxt;
    
            }
        }
    }
    View Code

    配置文件 App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
      <appSettings>
        
        <add key="connectionStr" value="Data Source=.BU;Initial Catalog=ac12306;User Id=UserID;Password=Password;" />
        <add key="filePath" value="e:\12306.txt" /><!--文件路径-->
        <add key="tableName" value="usersss" /><!--数据库表名-->
        <add key="insertSize" value="1000" /><!--每批次插入数量-->
    
      </appSettings>
    </configuration>
    View Code


    数据不多,几秒钟就跑完了。。。 然后看一下数据库,额呵呵呵【阴险脸】。。。。

    【用户分布】

    话说,之前看到有分析说这不是一次泄露而是”撞库“,我个人觉得,从数据来看不像是“撞库”。比如,用户年龄分布,如下图:

    根据身份证体现的出生年份来看,的确80,90用户很集中,但是各年龄段也是自然分布,之前泄露过数据的网站,如CSDN,人人等都有很突出且集中的用户分布。

    【吐槽】谈到年龄嘛,库里有个2014年3月出生的姓高的宝宝,你家人抢票真的很激烈,你还不满一岁就成马甲了,也是醉了有木有!

    再来看看星座,可以说攻受立判(划掉),咳...

    顺便一提的是,这个数据让我想起了当年花了很多口舌才劝一个白羊朋友相信支付宝是安全的。。。。。。

    貌似他们对新事物总抱有来路不明的怀疑。。。

    然后,哪个省的人爱到处跑呢?

    下班了,未完待续...

  • 相关阅读:
    在jQuery中Ajax的Post提交中文乱码的解决方案
    mysql 日期时间型的按日期分组
    mysql 逗号分隔的id转为逗号分隔的名称
    阿米在日本工作生活趣事(2)
    阿米在日本工作生活趣事(1)
    com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    File exists.If no other git process is currently running,
    带小数点的String 转int java.lang.Double cannot be cast to java.lang.Integer
    Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
    This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) look
  • 原文地址:https://www.cnblogs.com/hydor/p/4187296.html
Copyright © 2020-2023  润新知