2010-07-23 82 views
1

我有一个大的网站列表,我需要知道他们是否有密码保护的区域。找出一个网站是否有限制/密码保护区

我正在考虑这样做:用httrack下载所有这些文件,然后编写一个脚本,查找“Log In”和“401 Forbidden”等关键字。但问题是这些网站是不同的/一些静态的和一些动态的(html,cgi,php,java-applets ...),其中大多数不会使用相同的关键字...

你有没有更好的想法?

非常感谢!

+4

...黑帽......? – hollsk 2010-07-23 18:39:13

+0

不!我只需要知道那些没有密码的人数。这是一个统计研究...:p – Zenet 2010-07-23 18:40:34

+2

“401”是一个http状态码。因此,您不必查找“禁止”或“登录”等关键字。只需查看http头中的状态码即可。像httrack这样的工具不是一个好主意。如果负载变大,您可能会立即登陆hosts.deny列表。此外,大量的401响应也可能会吸引注意力... – tux21b 2010-07-23 18:45:28

回答

2

寻找密码字段可以帮助您达到目标,但对于使用HTTP身份验证的站点无效。寻找401s将有助于HTTP身份验证,但不会让你的网站,不使用它,或不返回401的网站。寻找像“登录”或“用户名”字段的链接将让你更多。

我不认为你可以完全自动地做到这一点,并确保你实际上检测到所有的密码保护区域。

你可能想要一个擅长web自动化的库,并自己编写一个小程序,从文件中读取目标站点列表,检查每个目标站点,并写入一个“这些是绝对passworded“和”这些不是“,然后你可能想手动检查那些不是,并且修改你的程序以适应。使用httrack非常适合抓取数据,但它不会帮助检测 - 如果您使用通用HLL编写自己的“检查密码保护区域”程序,则可以执行更多检查,并且可以避免生成更多请求每个站点比确定存在密码保护区域所需的时间。

您可能需要忽略的robots.txt

我建议使用the python port of perls mechanize,或您的首选语言有什么好的网络自动化库。几乎所有的现代语言都会有一个很好的库,用于在网页中打开和搜索,并查看HTTP头。

如果您无法亲自编写此代码,那么您将很难使用httrack或wget或类似代码,然后搜索响应。

1

查找带有密码字段的表单。

您可能需要抓取网站才能找到登录页面。寻找与“登录”,“登录”,“登录”,“登录”,或刮整个网站(不用说,小心在这里)短语的链接。

+0

感谢您回答Konrad。寻找关键字是我一直在做的事情,但我想要一个更好的解决方案,比如tux21b提到的HTTP响应......但是,对于“刮掉整个网站”是什么意思? – Zenet 2010-07-26 16:45:14

1

我会使用httrack几个限制,然后搜索下载的文件的密码字段。

通常,可以在主页的两个链接中找到登录表单。几乎所有的电子商务网站,网络应用程序等都有登录表单,只需点击主页上的一个链接即可访问,但另一层或甚至两层的深度几乎可以保证您不会错过任何链接。

我还会限制httrack下载的速度,告诉它不要下载任何非HTML文件,并阻止它下载外部链接。我还会将同时连接到该网站的数量限制为2甚至1个。这应该适用于您正在查看的所有网站,并且应该让您远离hosts.deny列表。

1

你可以只使用wget,做一些事情,如:

wget -A html,php,jsp,htm -S -r http://www.yoursite.com > output_yoursite.txt 

这将导致wget递归下载整个网站,而是只下载与-A选项中列出的结局,在这种情况下,尽量避免重文件。

标题将指向文件​​,然后您可以解析标题值401,这意味着该网站的一部分需要身份验证,并根据康拉德的建议进行解析。

1

寻找401代码不会可靠地捕捉他们,因为网站可能不会产生任何你没有权限的链接。也就是说,在您登录之前,它不会显示任何您需要登录的内容。 OTOH一些网站(例如所有静态内容的网站)设法弹出一些页面的登录对话框,因此寻找密码输入标签也会漏掉一些东西。

我的建议:找到一个可以获得源代码的蜘蛛程序,添加你打算使用的任何测试(复数),并停止第一个肯定的结果。寻找一个可以被阻止的蜘蛛方式回来,可以忽略非HTML文件(也许通过制作HEAD请求并查看MIME类型),并且可以独立和同时处理多个站点。

1

你可能会尝试使用cURL,只是试图依次连接到每个站点(可能把它们放在一个文本文件中,并阅读每一行,尝试连接,重复)。

您可以设置其中一个回调来检查HTTP响应代码并从那里执行任何您需要的操作。