それでは、質問に 1 つずつお答えします。「隠し」(リンクされていない) ディレクトリがサイト上にあることをどうやって知ることができますか? そうではありませんが、HTTP 200 を返すか 404 を返すかに関係なく、最も一般的なディレクトリ名を確認できます... いくつかのスレッドを使用すると、1 分間に数千件も確認できます。そうは言っても、特定の Web サイトに関して行っているリクエストの量と、それが処理するトラフィックの量を常に考慮する必要があります。これは、小規模から中規模の Web サイトの場合、接続の問題や短い DoS が発生する可能性があるためです。コースは望ましくありません。また、検索エンジンを使用して、リンクされていないコンテンツを検索することもできます。検索エンジンによって誤って発見された可能性があります。別のサイトからのリンクがあった可能性もあります (たとえば、google site:targetsite.com にはすべての索引付けされたページ)。Web サイトのすべてのページをダウンロードする方法は既に回答されています。基本的には、ベース リンクに移動し、オンサイト コンテンツを指すリンク、画像、およびその他のコンテンツの html を解析し、それに従います。さらに、ディレクトリへのリンクを分解し、インデックスを確認します。また、共通のディレクトリとファイル名をブルートフォースします。
ユーザー エクスペリエンスを制限しない限り、ボットから効果的に保護することはできません。たとえば、1 分あたりのリクエスト数を制限できます。しかし、あなたが ajax サイトを持っている場合、通常のユーザーも大量のリクエストを生成するので、それは実際には方法ではありません。ユーザー エージェントをチェックし、「通常の」ブラウザのみをホワイト リストに登録できますが、ほとんどのスクレイピング スクリプトは自分自身を通常のブラウザとして識別するため、あまり役に立ちません。最後に、IP をブラックリストに登録できますが、これはあまり効果的ではありません。プロキシ、オニオン ルーティング、および IP を変更するその他の方法がたくさんあります。
a) サーバー構成で禁止されておらず、b) デフォルトのインデックス ファイル (Apache の index.html または index.php のデフォルト) がない場合にのみ、ディレクトリ リストを取得します。
実際には、スクレイパーを簡単にしないようにすることをお勧めします。そのため、Web サイトの検索機能が適切にサニタイズされていることなどを確認してください (空のクエリですべてのレコードが返されるわけではなく、LIKE
mysql 構文を使用している場合は % 記号をフィルター処理します)。 ...)。もちろん、必要に応じて CAPTCHA を使用しますが、単純な「2 + 2 とは何か」や背景が無地の一般的なフォントの文字数文字ではなく、適切に実装する必要があります。
スクレイピングを防ぐもう 1 つの方法は、リファラー チェックを使用して Web サイトの特定の部分へのアクセスを許可することです。ただし、サーバー側で公開したくないウェブサイトの部分へのアクセスを禁止することをお勧めします (.htaccess
例を使用)。
最後に、私の経験からすると、スクレイパーには基本的な js 解析機能しかないため、javascript で何らかのチェックを実装することで機能する可能性がありますが、ここでも、js がオフになっている (および noscript または同様のブラウザー プラグインを使用している) すべての Web 訪問者を除外することになります。古いブラウザで。