2011-10-06 58 views

回答

24

這個概念很簡單:創建一個令牌,用於要保護的文件中。這 這個令牌(像「abc123」這樣的密鑰 - 保存在會話中,不是cookies)將用於你加載的每個文件。 這樣,如果令牌與文件不匹配,您可以重定向到未找到的頁面或訪問被拒絕的頁面。

設置在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,以確保CSS和JavaScript文件被正確解析:

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

另外,你可以在你的.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

你非常歡迎 –

相關問題