曾几何时,人们在陌生城市问路还是“警察叔叔,XXX怎么走”,现在却成了“土货,拿爱疯手机用谷歌soso一下啊!” 可以看出,随着web2.0的时代,搜索引擎成了日常生活中不可或缺的工具之一,连这篇文章里面的有些内容也是通过搜索引擎收集而来。
搜索引擎的市场前景这么火,做搜索的也就多,国外的谷歌,雅虎等等老牌搜索商且不说,国内的百度,soso,搜狗,网易有道,人民搜索等等也是常见的搜索引擎,更有些中小公司或者学校也有自己开发的搜索引擎。
标题里的robots.txt,做爬虫的大牛们应该挺熟悉,一个良好,善意的爬虫在爬取索引网页的时候,会首先爬取根目录下的/robots.txt文件,从robots.txt中得知服务器允许你爬取哪些内容,不允许你爬取哪些。
比如一个爬虫想要访问http://www.somesite.com/sample.html时,它会首先访问http://www.somesite.com/robots.txt,得到内容为:
User-agent :*
Disallow:/
这里User-agent表示后面的限制对指定名字的爬虫生效,如User-agent: Baiduspider 表示只对百度的爬虫生效 ,这里为*表示对所有的爬虫都生效。
Disallow:/ 表示所有的文件都不能被爬取,像Disallow:/a/表示a目录下的文件不能被爬取,类似的关键字还有Allow,表示哪些目录或文件能被爬虫爬取索引。
其他还有什么sitemap字段,这个和网站SEO相关,也有单独的书写规范,但是不在本文的讨论范围之内,在http://www.robotstxt.org 可以获得robots.txt的书写规范与注意事项。
从上可知,该网站是不希望任何爬虫索引它的内容。所以如果在谷歌中搜索site:somesite.com时是得不到任何结果的
下面我们来看一看国内某SNS网站的robots.txt是如何写的:
# Robots.txt file from http://www.马赛克.com
# All robots will spider the domain
User-agent: *
Allow: /
Disallow: /profile.do*
Disallow: /getuser.do*
这两条disallow,第一条禁止了类似/profile.do?xxxx=xxxx这样的网址被索引到,这个是用户主页,而第二条类似的,是搜索用户页,这两条的意思是,所有的搜索引擎你爬其他的可以,千万不要爬用户的数据啊......看上去没有什么问题,至少对于良好的爬虫来说,是这样。但是安全就像妹子,有时你觉得你得到了她,但是也许就在不经意间你就失去了。
言归正传,我们来看看该SNS的手机无线页面的robots.txt是咋样的:
# Robots.txt file from http://www.马赛克.com
# All robots will spider the domain
User-agent: *
Disallow:
可以看到该无线站点的配置是所有的页面都能被爬虫爬取。这个暂且放在一边,我们先来谈谈无线站点的登录态。
首先,HTTP协议是一个没有状态的协议,现在网站的登录态Seesion大多依靠Cookie实现。
但是呢,以前的手机浏览器并不是所有的都能够支持Cookie的,那么如何实现登录态的保持和类似保存书签的功能呢?
人们一般采取的是在URL里面添加某些表示字段来表示用户身份,如在登录后访问网址时带上了?XX=TSYq82hO7UbJOMkXUX4bTA 字段,服务器端再通过取该字段来验证用户身份,而无需要求用户重新登录。
如果有熟悉搜索引擎的搜索命令的人,结合我上面所说无线登录态和无线站点robots.txt就应该知道我下一步可以干什么了。
通过谷歌搜索,我们得到了一批带有该字段的网址,然后随便点击一个,我们就得到了她的登录态:
目前我查看了下该SNS网站无线站点的robots.txt已经更改为disallow:/ 禁止搜索引擎给索引到了,所以各位暂时不用担心自己的账户被别人登录。
但是该站点的甄别字段有效期特别地长(也许是书签功能的缘故)...所以已经被索引到的内容仍然具有登录态,所以上面搜索到的用户,任何人登录,都能获得她的登录态。
而像某些无线站点,其使用甄别的有效期不长,因此即使被索引到了,但是有效期一过用户带着有该字段的链接访问,仍然需要用户重新登录
。
因此,对于良好的爬虫,我们应该采取的安全策略是:
首先:禁止某些敏感目录或url被爬虫爬取到,如上面的/profile.do* ,/cgi-bin/,/admin/等等。
其次,对于无线站点的登录态有效期应根据业务的需要设置,不能过长,有效期一过应要求用户重新登录验证。
上面的讨论仅限于那些有瑞雪精神的爬虫,对于某些不瑞雪或者是初学者学写的爬虫,根本就不理会robots.txt对访问目录的限制,膝盖中枪的爬虫有比如YoudaoBot, HuaweiSymantecSpider等等,这些爬虫不会爬取robots.txt中的内容,那么我们该怎样做呢。
一般可以采取在服务器中配置禁止该网段IP访问,如在apache服务器配置文件中加入:
# deny from Sogou web spider
Deny from 220.181.125.64/29
Deny from 220.181.94.192/26
这样就可以做到既防君子,又防小人的效果,具体IP和行为可以查看服务器log得到,在某些目录访问频繁的IP,很有可能就是爬虫的IP,如果不想让其访问,就可以将该IP封掉。