2011-10-06 8 views
17

私は突然自分のサイト(wget、curl etc ...)に多くのリクエストを受け取ります。ユーザーが私のサイトにアクセスしなかった場合、ブロックイメージ、CSSまたはJS

ユーザーが有効なブラウザ(FirefoxやChromeなど)を使用して少なくとも1回は自分のサイトにアクセスしていない限り、これらのリクエストは実行されません。

これを行うApacheモジュールはありますか?私に何ができる?

答えて

24

概念は単純です。保護したいファイルで使用されるトークンを作成します。 This このトークン(「abc123」のようなキー - セッションに保存され、クッキーではありません)は、ロードするすべてのファイルで使用されます。 この方法では、トークンがファイルから一致しない場合は、ページが見つからないかアクセス拒否にリダイレクトできます。

セットアップindex.phpでのトークンは:

<?php 
    session_start(); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Expires: Mon, 10 Oct 2005 05:00:00 GMT"); 
    $_SESSION['siteToken'] = "abc123"; 
?> 

<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="/style.css" /> 
</head> 
<body> 

は今CSSとJavaScriptファイルのためにあなたはそれが設定されていますことを確認するためにトークンをチェックする必要があり、それが正しい値です。

// style.css 
<?php 
    session_start(); 
    header("Content-type: text/css"); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Expires: Mon, 10 Oct 2005 05:00:00 GMT"); 
    if($_SESSION["siteToken"] != "abc123") { 
    session_regenerate_id(); 
    die(); // or redirect 
    } 
?> 
body { background-color: #000; color: #fff; } 
etc... 

JavaScriptファイルについても同じことを行います。あなたがファイルを照会から悪いボットを保護するためにあなたの.htaccessにこれを追加することができます。また

RewriteEngine on 
RewriteBase/
RewriteRule style.css style.php [NC,L] 

あなたはCSSとJavaScriptファイルが正しく解析されていることを確認するために、.htaccessファイルを更新した場合、次のステップに:

SetEnvIfNoCase User-Agent "^Wget" bad_bot 
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot 
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot 
SetEnvIfNoCase User-Agent "^libwww-perl" bad_bot 
#etc... 
Deny from env=bad_bot 

今のところ画像がありません。このソリューションも同様に動作しますが、CSSおよびJavaScriptファイルの解析よりも時間がかかります。 ロジックは同じですが、エコーする代わりにファイルを読み取る必要があります(readfileを使用)。 また、ファイルの拡張子に基づいてヘッダーを変更する必要があります。

このための代替は、あなたの.htaccessファイルでこれを設定するには、次のようになります、これは防弾ではありません

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC] 
RewriteRule \.jpg$ - [NC,F,L] 

が。

+0

非常に面白いおかげで、私はイメージを使用して試してみると、私はパフォーマンスの問題が表示されたら私はRewriteRuleを使用します。どうもありがとう! – Tech4Wilco

+0

あなたは大歓迎です –