2011-02-01 9 views
0

メンバーはログインする必要のある安全なWebサイト(Windows ServerとIIS 5上で実行される.NET 2.0/C#で開発された)を持っており、仮想ディレクトリに保存されたPDFファイル。スパイダーがこのウェブサイトをクロールするのを防ぐために、すべてのユーザーエージェントのログインを禁止するrobots.txtがあります。ただし、robots.txtコマンドを無視するため、RogueスパイダーがPDFファイルのインデックスを作成することはできません。ドキュメントは安全であるため、私はこの仮想ディレクトリにどんなスパイダーが入ってもいいわけではありません。不正なスパイダーによるインデックス作成の防止

ウェブ上のいくつかの記事を読んで、非常に一般的な問題のように思われるので、どのようにして(ウェブマスターではなく)プログラマーがアプリケーションでこの問題を解決したのか疑問に思う。ウェブには多くのオプションがありますが、簡単でエレガントなものを探しています。

一部のオプションは見たことがありますが、弱いと思われます。自分の短所とここに記載されている:

  1. は、不正なスパイダーがで取得できるようになりますし、その後、そのIPアドレスの一覧が表示されますハニーポット/ターピットを作成します。欠点:これは、同じIPから来ている有効なユーザーをブロックしたり、このリストを手動で維持したり、メンバーがリストから自分自身を削除するための何らかの方法を持たせる必要があります。ウェブサイトがインターネット上にあるので、有効なメンバーが使用するIPの範囲はありません。

  2. リクエストヘッダー分析:ただし、不正なスパイダーは実際のエージェント名を使用するため、これは無意味です。

  3. メタロボットタグ:短所:Googleと他の有効なスパイダーだけに従います。

.htaccessを使用することに関するいくつかの話がありましたが、それは良いと思われますが、それはIISではなく、Apacheのみになります。

どのような提案も大変ありがとうございます。

EDIT:以下に指摘されているように、不正なスパイダーはログインが必要なページにアクセスできないはずです。私は、「ウェブサイトにログインせずにPDFファイルを要求しているリンクフォームを知っている人を防ぐ方法」と質問しています。

答えて

1

ここに私が行ったことがあります(リーのコード上で拡大しています)。

  1. PDFファイル用にHTTPHandlerを作成し、セキュアディレクトリにweb.configを作成し、PDFを処理するようにハンドラを設定しました。

  2. ハンドラでは、アプリケーションによって設定されたセッション変数を使用してユーザーがログインしているかどうかを確認します。

  3. ユーザーにセッション変数がある場合は、fileInfoオブジェクトを作成してレスポンスに送信します。注意: 'context.Response.End()'を実行しないでください。また、 'Content-Disposition'も廃止されています。

だから今でもセキュアなディレクトリでPDFの要求がある場合、HTTPハンドラは、要求とユーザーがログインしているかどうかを確認するためにチェックを取得します。そうでない場合は、表示エラーメッセージ、他のディスプレイをファイル。

私はfileInfoオブジェクトを作成して送信しているので、すでに存在するファイルを送信するのではなく、パフォーマンスヒットがあるかどうかはわかりません。問題は、Server.TransferまたはResponse.Redirectを* .pdfファイルに書き込むことができないことです。無限ループを作成しているため、応答は決してユーザーに返されません。

3

私はログインする必要があり、その後、彼らは

これは防ぐことはできません仮想ディレクトリに格納されているいくつかのPDFファイルを表示することができます

メンバー間の矛盾を見ます不正なスパイダーがPDFファイルのインデックスを作成することはありません

このディレクトリへの許可されていないHTTPリクエストは、コード401以外の何かで処理されます。ルージュのスパイダーは確かに認可クッキーを提供することはできません。ディレクトリにアクセスできる場合は、「メンバーログイン」とは何ですか?

おそらく、承認を確認するスクリプトを使用してPDFファイルを提供する必要があります。私はIISがディレクトリアクセスのためだけに許可を必要とすることができると思う(でも私は本当に知らない)。

+0

こんにちは9000、あなたは正しいです。スパイダーはログインが必要なページにはクロールできません。私は問題は誰かが既にリンクを知っていて、ログインせずにそれを取得しようとしていることだと思う。 – Pritika

+0

実際には、ページはスパイダーから安全かもしれないが、ログインせずにファイルにアクセスできる場合はまだ公開されている。 URLを知っているユーザーがログインせずにファイルを見ることができた場合は、どんなスパイダーであっても構わないはずです(少し難易度は高いですが)。おそらく、おそらくApacheで、ファイルへの不正アクセスを完全に防止したいと思うでしょう。 – Kzqai

1

あなたの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から離れています。なぜなら、実際にあなたが隠していると思っているものを実際に探すためにこれを使うことが多いからです。

+0

ありがとうございます。これは私が探しているものです。これをテストします。私は、スパイダーがPDFフォルダをクロールするのではなく、パスをすでに知っていて、サイトにログインせずに入ることを試みている人物の問題だと思う。 – Pritika

+0

ここに私があなたのコードを展開したものがあります。 – Pritika

+0

うれしい私は助けることができます。 – Leigh