feeeei

打破思维惯性,巧用 Github 来爬大量 API_KEY
背景因为之前在一家海外旅游公司,无可避免的在日常数据维护上需要维护全世界范围内大量的景点、酒店等等相关数据,日常维...
扫描右侧二维码阅读全文
21
2018/10

打破思维惯性,巧用 Github 来爬大量 API_KEY

2018-10-21 该方案在 Github 搜索Key的方案已经基本失效,但是思路依然可取,仍旧可以通过 Github 搜索出大量内容。

背景

因为之前在一家海外旅游公司,无可避免的在日常数据维护上需要维护全世界范围内大量的景点、酒店等等相关数据,日常维护起来一直是个大难题,今日自己在做一个酒店资源整合相关的任务时,突发奇想想利用 Google 提供的固定ID来做去重,通过判断 GOOGLE_PLACE_ID 是否重复来判断两组数据是否重复。感觉是个好方式,但是系统中存在好几个不同版本的酒店数据,每个版本都是几十万的数据量,而 GOOGLE_PLACE_API_KEY 的限制却为每天10W次(认证过之后),这样全跑一次下来,少说也要一个周起步了,不行,远远满足不了需求。偶然之间突然想到 Github 里面代码那么多,会不会有人安全意识不足,把他们自己的API_KEY暴露在外呢?

调研

按照 Github 是全世界最大的开源代码库,接近上亿的项目量来看,肯定会有人把这种 API_KEY 级别的信息疏忽处理,直接暴露在外,按照这个想法,尝试性的搜了一下 GOOGLE_PLACE_API_KEY 发现有超过100页的结果...随便查看数据发现,GOOGLE_PLACE_API_KEY 统一都为 AIzaSy 打头,这样的话直接搜 AIzaSy 岂不是美哉?发现结果仍旧超过100页,感觉大有搞头,顺手写了个小爬虫来爬 API_KEY。

这里贴一份 Ruby 版的建议爬虫

# google_place_api_key_spider.rb
SEARCH_KEY_WORLD = 'GOOGLE_PLACES_API_KEY'

class GooglePlaceApiKeySpider
    require 'set'
    require 'HTTParty'

    def self.start(count)
    current_page = 0
        api_keys = Set.new
        while current_page < 100 do
            current_page += 1
            response = HTTParty.get("https://github.com/search?p=#{current_page}&q=#{SEARCH_KEY_WORLD}&type=Code&utf8=%E2%9C%93", headers: header)
            keys = response.scan(/AIzaSy\S{33}/)
            api_keys.merge(keys)
    puts "current page: #{current_page}, find #{keys.count} keys, all keys count #{api_keys.count}"
        end
        return api_keys
    end

    # 身份验证
    def self.header
{
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh,zh-CN;q=0.9,en;q=0.8,zh-TW;q=0.7',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Cookie': #TODO need your account cookie,
            'Host': 'github.com',
            'Referer': 'https://github.com/search?q=AIzaSy&type=Code',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
        }
    end
end

keys = GooglePlaceApiKeySpider.start
puts keys.to_a

运行代码,不出1分钟,爬到了300+个KEY,心里一阵窃喜,任务完美搞定!

Last modification:November 13th, 2018 at 09:55 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment