【问题标题】:Preventing Rogue spiders from Indexing directory防止流氓蜘蛛索引目录
【发布时间】:2011-06-19 12:05:34
【问题描述】:

我们有一个安全的网站(在 Windows 服务器和 IIS 5 上运行的 .NET 2.0/C# 开发),会员必须登录该网站,然后他们才能查看存储在虚拟目录中的一些 PDF 文件。为了防止蜘蛛爬取该网站,我们有一个 robots.txt 将禁止所有用户代理进入。但是,这不会阻止流氓蜘蛛索引 PDF 文件,因为它们会忽略 robots.txt 命令。由于文档是安全的,我不希望任何蜘蛛进入这个虚拟目录(即使是好的)。

阅读网络上的几篇文章,想知道程序员(而不是网站管理员)是如何在他们的应用程序中解决这个问题的,因为这似乎是一个非常普遍的问题。网上有很多选择,但我正在寻找简单而优雅的东西。

我见过的一些选项,但似乎很弱。这里列出了它们的缺点:

  1. 创建一个允许流氓蜘蛛进入的蜜罐/tarpit,然后列出它们的 IP 地址。缺点:这也可以阻止来自同一 IP 的有效用户,需要手动维护此列表或有某种方式让成员将自己从列表中删除。由于该网站位于互联网上,因此我们没有有效成员将使用的 IP 范围。

  2. 请求头分析:然而,流氓蜘蛛使用真实的代理名称,所以这是没有意义的。

  3. Meta-Robots 标签:缺点:只有 google 和其他有效蜘蛛才会遵守。

有一些关于使用 .htaccess 的讨论,这应该很好,但那只是 apache,而不是 IIS。

非常感谢任何建议。

编辑:正如下面 9000 指出的那样,流氓蜘蛛应该无法进入需要登录的页面。我想问题是“如何防止知道链接表单的人在不登录网站的情况下请求 PDF 文件”。

【问题讨论】:

    标签: security iis virtual-directory web-crawler


    【解决方案1】:

    我看到了两者之间的矛盾

    会员必须登录,然后才能查看存储在虚拟目录中的一些 PDF 文件

    这不会阻止 Rogue 蜘蛛索引 PDF 文件

    为什么对这个目录的任何未经授权的 HTTP 请求会得到除代码 401 之外的其他内容?胭脂蜘蛛当然不能提供授权cookie。如果他们可以访问该目录,那么什么是“会员登录”?

    您可能需要通过检查授权的脚本来提供 PDF 文件。我认为 IIS 也能够要求仅对目录访问进行授权(但我真的不知道)。

    【讨论】:

    • 嗨 9000,你是对的。蜘蛛将无法爬入需要登录的页面。我想问题是如果有人已经知道该链接并试图在不登录的情况下获取它。
    • 实际上,这些页面可能是安全的,但如果无需登录仍可访问该文件,则它仍然是公开的。如果知道 url 的用户可以在不登录的情况下查看文件,那么您应该假设任何蜘蛛都可以(尽管难度稍大一些),因此网络上的任何人都可以。您将希望完全防止未经授权的访问文件,可能在 apache 中。
    【解决方案2】:

    我假设您的 PDF 链接来自已知位置。您可以检查Request.UrlReferrer 以确保用户来自此内部/已知页面以访问 PDF。

    我肯定会强制下载通过一个脚本,您可以在其中检查用户是否确实在允许下载之前登录到该站点。

    protected void getFile(string fileName) {
    
    /* 
        CHECK AUTH / REFERER HERE
    */
    
        string filePath = Request.PhysicalApplicationPath + "hidden_PDF_directory/" + fileName;
    
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
    
        if (fileInfo.Exists) {
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.WriteFile(fileInfo.FullName);
            Response.End();
        } else {
    
    /*
        ERROR
    */
    
        }
    }
    

    未经测试,但这至少应该给你一个想法。

    我也会远离 robots.txt,因为人们经常会使用它来实际查找您认为自己隐藏的东西。

    【讨论】:

    • 谢谢利。这正是我正在寻找的,将对此进行测试。我想这不是蜘蛛抓取 PDF 文件夹的问题,而是已经知道路径并试图在不登录网站的情况下进入的人。
    【解决方案3】:

    这就是我所做的(扩展 Leigh 的代码)。

    1. 为 PDF 文件创建了一个 HTTPHandler,在安全目录中创建了一个 web.config,并配置了 Handler 来处理 PDF。

    2. 在处理程序中,我检查用户是否使用应用程序设置的会话变量登录。

    3. 如果用户有会话变量,我会创建一个 fileInfo 对象并在响应中发送它。注意:不要执行 'context.Response.End()','Content-Disposition' 也已过时。

    所以现在,即使在安全目录上存在对 PDF 的请求,HTTP 处理程序也会获取请求并检查用户是否已登录。如果没有,则显示错误消息,否则显示文件。

    不确定是否会影响性能,因为我正在创建 fileInfo 对象并发送它,而不是发送已经存在的文件。问题是您不能 Server.Transfer 或 Response.Redirect 到 *.pdf 文件,因为您正在创建一个无限循环,并且响应永远不会返回给用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 2011-11-05
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多