【免費註冊】 【會員登入】 【個人資料】 【會員列表】 【論壇幫助】 【論壇搜尋】 【登出論壇】

∮Ω奧米加空間∮
∮Ω奧米加空間∮»技術文件區»利用 .htaccess 保護網頁

訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆
作者 主題    
dc
管理員



性別:男
來自:瓦肯星
發表總數:10741
註冊時間:2002-05-07 16:32
(第 1 篇) 利用 .htaccess 保護網頁

.htaccess 是一個文字檔,你可以利用像 notepad 的文字編輯器去寫一個。
或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名稱,不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。為何是 .htaccess?因為所有以 "." 開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。你可能會問:『MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?』 其實方法有兩個。第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了;第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。
一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。
在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。
每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響 ←← 這一點是很重要的。

【密碼保護 】

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。
這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效,更安全。更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。
首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名(當然又可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由 http 讀到的。檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(:)分隔。而密碼必須經過加密才可以使用。加密的方法是一般密碼使用了的 crypt,如果你不知如何加密,請到以下的網頁。
UHome
http://www.euronet.nl/~arnow/htpasswd

注: Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。如果你是使用 apahce for win32 版本,請使用 C:\Program Files\Apache Group\Apache\bin\htpasswd.exe 做出以 MD5 加密的密碼檔!!

再在 .htaccess 中,加上以下句子
AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage;而第二句的 AuthType Basic 就千萬不要去改;第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。
為了保安理由,不建議把 .htpasswd 放到可以用 http 去到的目錄;
最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了;你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3;也可以指定是某組人才可以,require group groupname。

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:
groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup 和 .htpasswd  的方法一樣,我不再說了。

以 ASCII 模式上傳所有檔案後,在那個資料夾中所有檔案都會被保護。
而再進一步,我們更可以設定個別設定只有某個檔案會密碼,不同檔案要不同的密碼,但是我會晚一點才說。

【自設錯誤報告文件 】
想做到好像 www.microsoft.com 一樣, 找不到文件不只是幾句白底黑字,也不是 IE 本身那個有 bug 的 "找不到網頁",而是另一頁 HTML 文件嗎?
逢法很簡單,首先寫一頁說找不到文件的 HTML,再用 notepad 打開您的 .htaccess。在最後加上一句

ErrorDocument 404 404.html
404.html 是錯誤檔案路經,即所顯示的檔案;404 是錯誤碼。以下就是一般會見到的錯誤碼和所代表的錯誤原因。
401
Authorization failed 授權失敗;即是錯誤 password
403
Access denied 存取違規;即是你不可以讀取這個檔案
404
File not found 找不到檔案
500
Internal Server Error 伺服器內部錯誤;可能是 http 伺服器本身是問題,也可能是 CGI 出錯
也有以下兩類做法
ErrorDocument 404 "找不到"
ErrorDocument 500 http://www.xxx.com/xxx
Ps. 如果所用的錯誤文件是一個 CGI 檔,就會有一點關於那個錯誤的資科放到環境變數內給 CGI 讀取。

【自設首頁檔案 】
這個可以算是最簡單的一個設定了

DirectoryIndex index.html index.htm index.cgi
很簡單,常你的網址是一個目錄,沒有注明檔名時 (如: http://www.xxx.com/)  它會顯示 index.html。如果沒有這個檔案,就找下一個檔案。如果沒有任可一個名單上的檔案,就會依設定列出目錄內的檔名。

【禁止讀取檔案 】
如果你的 CGI 會把秘密的內容(如: 密碼)存到一個檔案,那麼別人只要知道這個檔案的位置,就可以很簡單的看到一切。不想這樣嗎?你可以完全不改變其他設定,不用把那個檔案移到其他地方,只需在 .htaccess 加幾句就可以。


order allow,deny
deny from all

而 Apache 1.3 以後的版本,我們更可以用支援 regular expression 的 filesmatch

order allow,deny
deny from all

其實 files 也可用 regular expression 的,但要加一個 ~ 在前(例: )。 files 和 filesmatch 的意思就是,內裏被包著的幾句只會對付合要求的部份檔案生效。
接著我就說有關中間的文字→order deny, allow,就是先找出禁止(deny) 的,才去找例外許可的 (allow)。如果把它們反轉,就是 order allow, deny 就是,就是先找出許可(allow) 的,才去找禁止的 (deny)。之後的 deny form all 就是說,全部 IP 來的都不可以。相對地 allow form all 也就是全部都可以。而你更可以這樣做
order allow,deny
allow form all
deny form 123.456          所有以 123.456 開始的 IP,如 123.456.1.1

除了設定 IP 外,您也可以設定 hostname(如: xxx.com)

Files 和 Filesmatch 的用途很多,你不但可以設定 deny,更可以設定 個別檔案的密碼,如

require user abc


require user def


【重新導向文件 】
就是重新導向文件。

Redirect /abc http://www.xxx.com/abcabc
Redirect permanent /def http://www.xxx.com/def
即是說,如果 browser 要求 http://_____/abc它就會重新導向至 http://www.xxx.com/abcabc。而第二句又有甚麼不同呢?答案就是 http 的狀能碼不同,parmanet (301) 是永遠的,代表 browser 下一次未必會再要求這檔案,而直接找另一個。除了 permanent 之外,還有 temp ( 301;和不寫一樣)、seeother(303) 和 gone(410)。
也有 RedirectMatch,不過它就支援 regular expression。

【防止列出目綠內的檔案 】
其實要做到這個目標可以不用 .htaccess,你只要自己寫一頁 index.html 放入去就可以了。但是,用 .htaccess 會方便很多,在 .htaccess 中加一句。

Option -Indexes
這樣做,伺服器就不會多事地把目錄內的檔名列出。如果你只不過是想不列出某幾個檔案,請用以下的設定
IndexIgnore *.gif *.jpg
我想就算只識一點英文的人也會明白,就是在列出檔名時不理會(ignore) 後面的檔案。

Ps. 如果設定了 IndexIgnore *,它就不會列出任何檔案,但是會有 HEADER 和 README 的內容,而它們是可以自設的。




本帖由dc最後編輯於2002-05-15 01:41

Your mind to my mind,

your thought to my thought
發表時間:2002-05-15 01:33
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:211.*.*.* 編輯  引言回覆 
dc
管理員



性別:男
來自:瓦肯星
發表總數:10741
註冊時間:2002-05-07 16:32
(第 2 篇) 【推薦】.htaccess檔案使用手冊

資料來源:中國站長資訊網

- .htaccess檔案(或者"分佈式配置檔案"提供了針對目錄改變配置的方法, 即,在一個特定的文件目錄中放置一個包含一個或多個指令的檔案,以作用於此目錄及其所有子目錄。作為會員,所能使用的命令受到限制。管理員可以通過Apache的AllowOverride指令來設定。

- 子目錄中的指令會覆蓋更高級目錄或者主伺服器配置檔案中的指令。

- .htaccess必須以ASCII模式上傳,最好將其權限設定為644。

錯誤文件的定位

常用的客戶端請求錯誤返回代碼:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常見的伺服器錯誤返回代碼:
500 Internal Server Error

會員可以利用.htaccess指定自己事先製作好的錯誤提醒頁面。一般情況下,人們可以專門設立一個目錄,例如errors放置這些頁面。然後再.htaccess中,加入如下的指令:

ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html

一條指令一行。上述第一條指令的意思是對於404,也就是沒有找到所需要的文件的時候得顯示頁面為/errors目錄下的notfound.html頁面。不難看出語法格式為:

ErrorDocument 錯誤代碼 /目錄名/檔案名稱.副檔名

如果所需要提示的訊息很少的話,不必專門製作頁面,直接在指令中使用HTML號了,例如下面這個例子:

ErrorDocument 401 "<body bgcolor=#ffffff><h1>你沒有權限瀏覽該頁面,請放棄!</h1></body>"

文件瀏覽的密碼保護

要利用.htaccess對某個目錄下的文件設定瀏覽會員和對應的密碼,首先要做的是生成一個.htpasswd的文字文件,例如:

zheng:y4E7Ep8e7EYV

這裡密碼經過加密,會員可以自己找些工具將密碼加密成.htaccess支援的編碼。該文件最好不要放在www目錄下,建議放在www根目錄文件之外,這樣更為安全些。

有了授權會員文件,可以在.htaccess中加入如下指令了:

AuthUserFile .htpasswd的伺服器目錄
AuthGroupFile /dev/null (需要授權瀏覽的目錄)
AuthName EnterPassword
AuthType Basic (授權類型)

require user wsabstract (允許瀏覽的會員,如果希望表中所有會員都允許,可以使用 require valid-user)

注,括號部分為學習時候自己新增的註釋

拒絕來自某個IP的瀏覽

如果我不想某個政府部門瀏覽到我的網站的內容,那可以通過.htaccess中加入該部門的IP而將它們拒絕在外。

例如:


order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all

第二行拒絕某個IP,第三行拒絕某個IP段,也就是219.5.45.0~219.2.45.255

想要拒絕所有人?用deny from all好了。不止用IP,也可以用域名來設定。

保護.htaccess文件

在使用.htaccess來設定目錄的密碼保護時,它包含了密碼檔案的路徑。從安全考慮,有必要把.htaccess也保護起來,不讓別人看到其中的內容。雖然可以用其他方式做到這點,比如文件的權限。不過,.htaccess本身也能做到,只需加入如下的指令:

<Files .htaccess>
order allow,deny
deny from all
</Files>

URL轉向

我們可能對網站進行重新規劃,將文件進行了遷移,或者更改了目錄。這時候,來自搜尋引擎或者其他網站連結過來的瀏覽就可能出錯。這種情況下,可以通過如下指令來完成舊的URL自動轉向到新的位址:

Redirect /舊目錄/舊文件名 新文件的位址

或者整個目錄的轉向:

Redirect 舊目錄 新目錄

改變缺省的首頁檔案

一般情況下缺省的首頁檔案名稱有default、index等。不過,有些時候目錄中沒有缺省檔案,而是某個特定的檔案名稱,比如在pmwiki中是pmwiki.php。這種情況下,要會員記住檔案名稱來瀏覽很麻煩。在.htaccess中可以輕易的設定新的缺省檔案名稱:

DirectoryIndex 新的缺省檔案名稱

也可以列出多個,順序表明它們之間的優先等級,例如:

DirectoryIndex filename.html index.cgi index.pl default.htm

防止盜鏈

如果不喜歡別人在他們的網頁上連接自己的圖片、文件的話,也可以通過htaccess的指令來做到。

所需要的指令如下:

RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]

如果覺得讓別人的頁面開個天窗不好看,那可以用一張圖片來代替:

RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/替代圖片檔案名稱 [R,L]






Your mind to my mind,

your thought to my thought
發表時間:2004-11-21 15:13
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:220.*.*.* 編輯  引言回覆 
所有時間均為GMT+8, 現在是2024-05-06 23:22    
訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆

快速回覆
主題 ( 回覆文章可以不輸入標題 )
URLs自動分析
有回覆時郵件通知
禁用表情符號
使用簽名

<聯絡我們 - OMEGA - 控制面板>

Powered by Centaur & Joksky & DC, ver 2003.08.14
Copyright ©2002-2008 PHPY.COM


頁面生成時間:0.0089268684387207