PDA

View Full Version : Ứng dụng tập tin htaccess trên máy chủ Apache


Hoang_philong
31-10-08, 10:04 AM
Bạn đã từng nghe về tập tin .htaccess trên các máy chủ hệ Unix (FreeBSD, Linux, Solaris, True64...)? Bạn biết rằng tập tin này có thể điều khiển được khá nhiều thứ, thậm chí thay đổi được cả thiết lập mặc định của máy chủ Apache. Thế nhưng bạn đã tận dụng được bao nhiêu lệnh trong tập tin này để làm cho website của mình mạnh mẽ, an toàn hơn?

Tạo trang báo lỗi mang màu sắc cá nhân

Trong quá trình làm việc với client, nếu có lỗi xảy ra (ví dụ như không tìm thấy tập tin) thì Apache sẽ báo lỗi bằng một trang có sẵn hiển thị mã số của lỗi đó, rất không đẹp và khó hiểu.Với .haccess thì bạn có thể tự tạo các trang báo lỗi hay hơn. Để làm được điều này thì trong tập tin .htaccess bạn thêm dòng sau:

ErrorDocument mã số lỗi /Error.html

Trong đó mã số lỗi là mã số của lỗi phát sinh, sau đây là những lỗi hay gặp:

- 401 - Authorization Required (cần password để truy nhập)
- 400 - Bad request (Lỗi do yêu cầu)
- 403 - Forbidden (không được vào)
- 500 - Internal Server Error (lỗi server)
- 404 - Wrong page (lỗi trang, không tìm thấy...)

Còn Error.html là trang web mà bạn muốn hiển thị khi lỗi phát sinh, có thể đưa vào tập tin này nội dung hay đồ hoạ gì tùy bạn, chẳng hạn liên kết trở về trang chính của trang web.

Ví dụ:
ErrorDocument 404 /Error.html hoặc: ErrorDocument 500 /loi/500.html

Bây giờ bạn hãy tải (upload) 2 tập tin .htaccess và Error.html lên hosting của mình.

Chống ăn cắp băng thông (bandwidth)

Thông thường những dịch vụ lưu trữ web chỉ cung cấp cho bạn một lượng dữ liệu luân chuyển (data transfer) nhất định hàng tháng và khi bạn sử dụng hết lượng dữ liệu này, website của bạn sẽ tự động bị đóng cửa. Bạn sẽ phải trả thêm tiền cho lượng băng thông vượt quá hoặc phải buộc lòng chờ đến tháng sau.

Nếu hình ảnh, dữ liệu, …của bạn bị các website khác “ăn cắp” (bằng các thủ thuật đơn giản) làm cho lượng dữ liệu luân chuyển của bạn tăng lên, thì có nghĩa là bạn sẽ phải trả tiền cho cái mà bạn không sử dụng. Sử dụng tập tin .htaccess là một giải pháp hoàn hảo, để ngăn chặn việc sử dụng hình ảnh trái phép trên website của bạn. Bạn chỉ việc đưa vào tập tin .htaccess nội dung sau:

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

Ở đoạn mã trên tôi sử dụng module Rewrite của máy chủ Apache, bạn chỉ việc thay đổi trangweb.com thành địa chỉ website của mình.

Có thể sử dụng một hình ảnh nào đó cảnh cáo những kẻ “ăn trộm” băng thông, bạn dùng dòng lệnh sau:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?trangweb\.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.trangweb.com/diehotlinker.jpg [R,L]

Không cho hiện danh sách tập tin trong thư mục

Trong trường hợp một thư mục nào đó không có tập tin index hoặc default, Apache sẽ hiển thị một danh sách liệt kê những tập tin có trong thư mục đó. Tuy nhiên nếu đây là những tài liệu nhạy cảm, bạn không muốn người khác thấy, hãy thêm lệnh sau vào tập tin .htaccess

Options –Indexes

Thay thế trang index

Thông thường khi truy nhập vào một trang web, Apache sẽ tìm tập tin index.htm hoặc default.htm trả kết quả về cho trình duyệt, bạn có thể dùng .htaccess thay đổi mặc định này.

DirectoryIndex index.php index .php3 messagebrd.pl index.html index.htm

Với dòng lệnh này thì tất cả các tập tin được liệt kê sẽ được tìm theo thứ tự khi có yêu cầu tới thư mục hiện hành, trang nào được tìm thấy đầu tiên sẽ thành trang index của thư mục.

Cấm/hạn chế IP truy nhập

Một số người muốn làm ngập (flood) trang web của bạn, việc cần làm là ngăn cấm những IP của những người này truy nhập vào trang web, bạn thêm đoạn mã sau vào .htaccess: deny from 203.262.110.20;
cho phép IP truy nhập:
allow from 203.262.110.20.

Nếu bạn chỉ viết IP dưới dạng: 203.262.110 thì sẽ cấm tất cả IP trong dải từ 203.262.110.1 đến 203.262.110.254.

Sử dụng dòng lệnh sau: Deny from all sẽ cấm tất cả mọi truy nhập đến các trang web trong thư mục, tuy nhiên các tập tin trong đó vẫn có thể được sử dụng từ bên ngoài thông qua các lệnh dạng require hay include (trong lập trình PHP), có thể xem thêm mã nguồn của PHPBB forum,IBF... để hiểu rõ hơn.

Tự động chuyển đến địa chỉ mới (Redirection)

Bạn chuyển trang web của mình đến địa chỉ mới nhưng không phải ai cũng biết điều này, redirect truy nhập từ xa một cách đơn giản bằng lệnh sau:

Redirect/olddirectory http://www.trangwebmoi.com/thumucmoi

Tuỳ biến đuôi tập tin

Thông thường, tuỳ thuộc vào ngôn ngữ lập trình web mà bạn sử dụng tập tin sẽ có phần mở rộng khác nhau như: html, htm, asp, aspx, php, cgi, …Tuy nhiên nếu sử dụng .htaccess bạn có thể tác động vào máy chủ Apache, Apache sẽ gọi đến tập tin của bạn và trả về cho trình duyệt web của người dùng với phần mở rộng do bạn quy định trong .htaccess. Bạn sử dụng đoạn lệnh sau trong tập tin .htaccess:

RewriteEngine on
RewriteRule (.*)\.dll$ $1.html

Html là phần mở rộng thực sự của những tập tin trên website, dll là phần mở rộng do bạn lựa chọn. Lưu ý trong liên kết trên trang web, bạn phải gọi đúng đường dẫn đến tập tin với phần mở rộng mới (ở trên là dll), ví dụ http://www.lbvmt.net/index.dll

Lưu ý khi sử dụng tập tin .htaccess:

- Chỉ áp dụng trên máy chủ Apache đã bật chế độ .htaccess, nếu chưa bạn hãy thử liên hệ với nhà cung cấp dich vụ hosting.

- Để tạo ra tập tin này bạn có thể sử dụng ngay chương trình Notepad của Windows: chọn chế độ save as với tên .htaccess, nhưng khi lưu nhớ bỏ đuôi txt.

-.htaccess chỉ có tác dụng đối với những tập tin ngang hàng (trong cùng thư mục với nó) hoặc thư mục con. Với thư mục, nó chỉ có tác dụng trong thư mục chứa nó và thư mục con, còn vô tác dụng với thư mục mẹ (parent directory).

- Bạn có thể dùng một số chương trình FTP (Leaf FTP, WS FTP, Cute FTP) để tải tập tin .htaccess lên hosting của mình với chế độ ASCII, nếu nó không hoạt động bạn thử CHMOD với giá trị 644.

Hoang_philong
31-10-08, 10:07 AM
File .htaccess hầu hết được dùng để đặt mật khẩu cho web site của bạn. ví dụ. nếu tôi muốn dùng mật khẩu để bảo vệ site http://domain.com/secrect/ Tôi có thể tạo một file gọi là .htaccess trong folder secret nằm trên server đó. Ngoài ra file .htaccess còn dùng để từ chối việc liệt kê file trong folder. Điều này rất tiện khi bạn không có file index ví dụ. images/ cgi-bin/ db/ .

Có rất nhiều tùy chọn cho bạn đặt vào file .htaccess. Ở đây tôi chỉ đề cập đến 'AuthConfig' và 'Limit'.

QUAN TRỌNG: File .htaccess hoạt động trong toàn bộ cây thư mục. Ví dụ. nếu bạn có một file .htaccess trong /www/.htaccess thì nó sẽ có tác dụng đến /www/public/, /www/pictures, v.v.. Nếu bạn chỉ muốn không cho liệt kê thư mục trong /www/pictures thì đặt file .htaccess vào /www/pictures chứ KHÔNG phải vào /www !
Có một tùy chọn khác với thẻ <Directory> nhưng tôi sẽ không đề cập trong bài này . Bạn có thể dùng google nếu muốn tìm hiểu kỹ hơn.

Đặt mật khẩu bảo vệ:
==============
Việc đầu tiên là phải tạo một file gọi là .htpasswd để chứa username và mật khẩu (đừng lo lắng gì, chúng đã được mã hóa). Có nhiều cách tạo mật khẩu mã hóa. Cách dễ nhất là vào http://www.euronet.nl/~arnow/htpasswd/ tạo một cái. Sau đó bạn copy/paste dòng kết quả vào file .htpasswd. Tiếp theo ta tạo file .htaccess. Ví dụ như sau:


AuthUserFile /home/leon/secret/.htpasswd
AuthGroupFile /dev/null
AuthName "My .htaccess secured web page!"
AuthType Basic
require valid-user


Dòng đầu tiên là nơi bạn chứa file .htpasswd. Những dòng còn lại chắc bạn cũng đã hiểu!

Từ chối ip:
Nếu bạn muốn cấm (block) vài ip hay isp thì đặt một trong những dòng sau vào file .htaccess:


order allow,deny
deny from 123.45.67.89
deny from 45.67.89.
allow from all


Nó sẽ cấm 123.45.67.89 và mọi ip bắt đầu với 45.67.89.

Bên cạnh đó bạn cũng có thể làm như sau:


order deny,allow
deny from all
allow from 123.45.67.8


Nó sẽ cấm tất cả IP ngoại trừ 123.45.67.8

Ngoài ra bạn có thể tham khảo thêm ở:
http://httpd.apache.org/docs/howto/htaccess.html
http://wsabstract.com/howto/htaccess.shtml
http://www.he.net/faq/tutorials/htaccess/demo.html
http://www.freewebmasterhelp.com/tutorials/htaccess/
http://baremetal.com/gadgets/htaccess/
http://tools.dynamicdrive.com/password/

Trang này rất hay có thể tạo .htpasswd và .htaccess không quá 1 phút !

Hoang_philong
31-10-08, 10:11 AM
RewriteEngine On
RewriteRule ^tenfile\.html$ /tenfile/
http://youdomain/tenfile.html -> http://youdomain/tenfile/

$mofile=@fopen(".htaccess","a");
$ghi=@fwrite($moghi,$ip);
$dongghi=@fclose($mofile);

Ko up .htaccess dc

Hoang_philong
31-10-08, 10:19 AM
Nhiều web servers, trong đó có Apache thường dùng file .htaccess để bảo vệ các thư mục trên web server. Nếu một thư mục nào đó trên web server có lưu file .htaccess, khi bạn duyệt qua thư mục này, web server sẽ popup một hộp thoại yêu cầu nhập username và mật khẩu giống y như lúc bạn gặp Firewall của VDC! Chỉ khi nào bạn nhập vào một username và mật khẩu đúng, bạn mới có thể xem được trong thư mục đó có những gì?!

Danh sách các username và mật khẩu của .htaccess thường được lưu trong file .htpasswd

* Tại sao phải dùng dấu chấm ở trước trong tên file '.htaccess'? Các file có tên bắt đầu là một dấu chấm '.' sẽ được các web servers xem như là các file cấu hình. Các file này sẽ bị ẩn đi(hidden) khi bạn xem qua thư mục đã được bảo vệ bằng file .htaccess

Hướng dẫn sử dụng .htaccess

Bước 1: chuẩn bị username và mật khẩu cho .htaccess

[đt@localhost /]# htpasswd -c ./users vicki
New password: tyt
Re-type new password: tyt
Adding password for user vicki
-c để tạo file mới

Sau khi bạn chạy dòng lệnh trên, trong thư mục hiện tại sẽ xuất hiện file users với nội dung như sau:

vicki:JNSQVx3F3/n0c
File lưu username và mật khẩu có dạng như sau:

<username1>:<encrypted-password1>
<username2>:<encrypted-password2>
...
<usernamen>:<encrypted-passwordn>
* Password thường được mã hóa bằng thuật toán DES(Data Encryption Standard). DES được dùng rất phổ biến trên Unix/Linux(*nix), đặc biệt là trong các files /etc/passwd hoặc /etc/shadow. DES rất khó bị crack. Bạn hãy tham khảo một số tài liệu khác để biết rõ về DES.

* Ngoài cách encrypt password bằng htpasswd như trên, bạn cũng có thể dùng Perl code sau để encrypt:

...
$encpass = &encrypt($password);
...
sub encrypt {
my($plain) = @_;
my(@salt);
@salt = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand(time() ^ ($$ + ($$ << 15)) );
return crypt($plain, $salt[int(rand(@salt))] . $salt[int(rand(@salt))] );
}
Bước 2: tạo 1 file .htaccess với nội dung như sau:

AuthName "Khu vực cấm"
AuthType Basic
AuthUserFile /somepaths/users

require user vicki

# nếu bạn đang dùng Apache Server, hãy thêm các dòng sau vào
# để ngăn chặn users download các files .htaccess & .htpasswd

<files .htaccess>
Order allow,deny
Deny from all
</files>

<files .htpasswd>
Order allow,deny
Deny from all
</files>
Giải thích

AuthName "Khu vực cấm" // tiêu đề của hộp thoại sẽ được popup
AuthUserFile /var/www.users // đường dẫn đầy đủ đến file lưu username & mật khẩu
require user vicki // danh sách các username được phép

Bước 3: tạo 1 thư mục trên web server, chẳng hạn như 'security', upload file .htaccess vào thư mục này, đừng quên chmod 644 cho file .htaccess và users. Thử upload vài files khác vào 'security'

Bước 4: mở trình duyệt web và vào thư mục 'security', http://localhost/security/. Bạn sẽ nhận được một hộp thông báo yêu cầu nhập username & password. Thử dùng username=vicki & password=tyt, bạn sẽ thấy được các files trong 'security' directory.

Hack .htaccess & .htpasswd

1/ Một số người sơ ý không chmod đúng cho files .htaccess và .htpasswd. Vì vậy bạn có thể dễ dàng download chúng về máy tính của mình. Sau đó bạn tìm một công cụ crack DES bằng tự điển như John the Ripper hoặc CrackJack để crack file .htpasswd

2/ Sử dụng các công cụ hack tự động

Bạn có thể sử dụng WWWHack hoặc Brutus để hack các websites được bảo vệ bằng files .htaccess và .htpasswd. Đây là các công cụ tấn công bằng tự điển gọn nhẹ nhưng đa năng, có hổ trợ proxy, rất dễ sử dụng. Tuy nhiên, nếu password quá khó hoặc tốc độ đường truyền của bạn cũng như của websites không tốt, có lẽ bạn phải chờ hàng giờ để WWWHack hoặc Brutus hoàn thành nhiệm vụ. Và bạn cũng đừng quên kiếm một tự điển tốt trước khi tiến hành hack.

* WWWHack và Brutus làm việc như thế nào? DES(Data Encryption Standard) dường như rất khó bị crack, chỉ có một cách duy nhất và cũng là dễ nhất là dùng tự điển. WWWHack và Brutuslàm việc gần giống như nhau. Chúng sẽ chọn một password bất kì trong tự điển, sau đó gởi đến website. Nếu nhận được HTML status code 401 - Authorization Required, "Access Denied", "Enter your password again" có nghĩa là password không đúng, chúng sẽ thử lại với một password khác có trong tự điển. Nếu nhận được HTML status code 200 OK, ... có nghĩa là password đúng, hay nói cách khác là đã bị crack.
hy vọng qua bài này các bạn sẽ có thể hiểu "Alert" này cụ thể hơn .

Hoang_philong
31-10-08, 10:26 AM
5.301 redirect

Cách này sẽ giúp cho các WebMaster mong muốn kiếm tiền từ quảng cáo(nhất là GA) nó sẽ bắt người dùng sử dụng một tên miền nhất định do bạn chọn (một domain sẽ có 2 kiểu địa chỉ (Vd: www.pumamavn.com và pumamavn.com)
Sử dụng cả 2 kiểu địa chỉ sẽ làm giảm traffic của site bạn nên Pumama lựa chọn cách sau để tối ưu hóa link nhằm thân thiện hơn với các hệ thống quảng cáo.
Bạn thêm code sau vào .htaccess:



RewriteEngine On
RewriteCond %{HTTP_HOST} !^\.pumamavn\.com$[NC]
RewriteRule ^(.*)$ http://www.pumamavn.com [R=301*L]-

Bạn phải thay pumamavn.com bằng địa chỉ của bạn.Các câu lệnh trên sẽ chuyển tất cả các địa chỉ pumamavn.com thành _www.pumamavn.com

Hoang_philong
31-10-08, 10:31 AM
dụng file .htaccess trên localhost

Rất chi là đơn giản

Vào: AppServ/Apache2.2/conf/httpd.conf ==> edit
Tìm dòng:

#LoadModule rewrite_module modules/mod_rewrite.so

bỏ dấu # ở đằng trước đi ==> khởi động lại apache là chạy được .htaccess

Chú ý là trên localhost file .htacess và các file liên quan đến file htaccess này (như các file thông báo lỗi 404 error …) phải được đặt ở thư mục gốc (www) và nó ko word với IE8