Bài 05: Một số thủ thuật với .htaccess

Htaccess 10/02/2017 07:00 1282
Việc sử dụng file .htaccess nhằm tối ưu hóa và bảo mật website của bạn hơn. bảo vệ các file quan trọng, giới hạn upload, chuyển hướng 301, trang lỗi tùy chỉnh, tắt liệt kê nội dung thư mục, nén nội dung…

1. Bảo vệ tệp tin

File .htaccess là một file đặc biệt dùng để cấu hình Web server, Nó thật sự nguy hiểm nếu hacker tấn công vào file này của bạn. Để bảo vệ file này ta dùng đoạn code sau:

   Order allow,deny
   Deny from all

2.Bảo mật với .htaccess và .htpasswd

Đôi lúc  ta cần đặt mật khẩu bảo vệ một file nào đó, tức là muốn vào file đó thì phải nhập username và password. Để làm được điều này các bạn phải tạo một file với tên .htpasswd  tại thư mục gôc của file bạn muốn bảo vệ sau đó điền nội dung sau:

MyUsername:MyPassword

Trong đó:

  • MyUsrename là tên username
  • MyPassword là mật khẩu

Ta thêm một đoạn sau vào file .htaccess

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /protected/.htpasswd 
AuthGroupFile /dev/null

require valid-user

Trong đó:

  • AuthName "Restricted Area"  là tên chương trình.
  • /protected/.htpasswd là đường dẫn đến file htpasswd tính từ thư mục chứa file .htaccess.
  • file_protected.php là tên file muốn bảo vệ.

Lưu ý: Bạn có thể lên trang web http://www.tools.dynamicdrive.com/password/ để generate thông tin và lấy code về dán vào file htaccess thay vì tự code.

3. Chỉ thị server hiển thị mã nguồn với một số file thực thi

Trong một số trường hợp cần hiển thị mã nguồn của một file thay vì thực thi chúng.

RemoveHandler cgi-script .pl .py .cgi

4. Chặn truy cập tới file hay thư mục theo thời gian

Trong một số trường hợp bạn không muốn người sử dụn truy cập vào website của bạn vào những lúc không cần thiết.

#- Không cho người truy cập vào lúc nửa đêm
RewriteCond %{TIME_HOUR} ^12$
RewriteRule ^.*$ - [F,L]
#- Không cho người truy cập vào các giờ sau
RewriteCond %{TIME_HOUR} ^(12|13|14|15)$
RewriteRule ^.*$ - [F,L]
Mask
03/07/13, 05:20 PM

5. Chặn truy cập tới các file include trong file .php

Để tránh bị người dùng truy cập tới thư mục chứa các file .php. Ngoài cách đặt mật khẩu truy cập thì bạn có thể tạo một file .htaccess nằm trong thư mục bạn cần chặn với nội dung sau.

RewriteEngine On
RewriteBase /
#- Kiểm tra thư mục chưa include
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /includes/ .*$ [NC]
#- Kiểm tra phần mở rộng của file có .php?
RewriteCond %{REQUEST_FILENAME} ^.+\.php$
#- Forbid Access
RewriteRule .* - [F,NS,L]

5.2 Ngăn cản truy cập tới một file đặc biệt

Để chặn truy nhập vào một file đặc biệt nào đó, thêm đoạn mã sau vào file .htaccess, giả sử là file secretfile.jpg

# prevent viewing of a specific file
<files secretfile.jpg>
order allow,deny
deny from all
</files>

5.3 Chặn truy cập tới nhiều file

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)  $">
Order Allow,Deny
Deny from all
</FilesMatch>
5.3 Chống browse thư mục trái phép

Đảm bảo người dùng không có đủ quyền không thể xem toàn bộ trang web dưới dạng Directory listing.

# disable directory browsing
Options All –Indexes

Ngược lại để cho phép người dùng có thể xem dưới dạng này, sử dụng

# enable directory browsing
Options All +Indexes

Ngăn cản server listing directory:

# prevent folder listing
IndexIgnore *

Ngăn cản truy nhập vào các file có định dạng nào đó, sử dụng IndexIgnore

#prevent display of select file types
IndexIgnore *.wmv *.mp4 *.avi *.etc

6. Hiển thị trang index giả mạo

Nếu bạn vào một folder nào đó trong website mà không có file index.php hoặc index.html thì lúc này tất cả các file hay folder đề bị thấy hết, điều này không tốt lắm vì lộ hết các files và folders. Giải quyết vấn đề này ta dùng file .htaccess với dòng lệnh:

Options All -Indexes

Dòng lệnh này sẽ hiển thị một thông báo  Forbidden thay vì hiển thị cấu trúc folder.

7. Thiết lập trang index mặc định

Mặc định Web Server sẽ chọn những file index.html, index.php, default.html, default.php.. làm file mặc định của thư mục. Nếu bạn muốn thiết lập file mặc định khác bạn phải tạo ra một file đó và thêm đoạn code sau vào file .htaccess:

DirectoryIndex myindex.html

8. Giới hạn upload

Nếu bạn cho phép người dùng tải nên các file có dung lượng lớn sẽ làm cho Web Server sẽ phải làm việc lâu hơn. Có thể gây tắc nghẽn, trì trệ một số tiến trình xử lý của Web Server, ngoài ra còn tốn dung lượng lưu trữ một cách không cần thiết. Để giới hạn người dùng tải nên các file không được vượt quá mức quy định bạn làm như sau:

# Chỉ cho phép người dùng tải nên nhưng file <= 10MB
LimitRequestBody 10240000

9. Giới hạn quyền truy cập

Đôi khi bạn muốn giới hạn một trang nào đó chỉ cho phép một vài người truy cập, hoặc cho tất cả trừ một vài người không được phép truy cập vào (ngăn những ip đang flood). Cả hai trường hợp này có thể giải quyết nhẹ nhàng nhờ .htaccess

9.1 Chỉ cho phép một số ip truy cập

Đầu tiên ta cấm tất cả, sau đó cho phép một số:

order deny,allow
deny from all
allow from 127.0.0.1
allow from 192.168.0.1

Chỉ cho phép ip 127.0.0.1 và 192.168.0.1 truy cập vào trang web (nếu bạn đặt .htaccess ở thư mục gốc).

9.2 Cấm một số ip truy cập

order allow,deny
allow from all
deny from 203.113.135.6
deny from 203.162.*

10. Trang lỗi tùy chỉnh

Khi người dùng vào website và gặp lỗi, Thì họ sẽ nhận được trang thông báo lỗi mặc định từ Apache. Tuy nhiên, với .htaccess bạn có thể tuỳ biến trang thông báo này theo cách của bạn.

Ví dụ sau tạo trang thông báo lỗi tuỳ biến cho một số trang thông báo lỗi, ví dụ như đưa ra một form tìm kiếm nội dung trong trang, cấu hình lại đúng đối số trên trang.

ErrorDocument 403 /403.htm
ErrorDocument 404 /404.htm
ErrorDocument 401 /401.htm
ErrorDocument 400 /400.htm
ErrorDocument 408 /408.htm
ErrorDocument 500 /500.htm

Các con số lỗi trên có ý nghĩa như sau:

  • 404 - Not Found
  • 401 - Unauthorized
  • 403 - Forbidden/Access Denied
  • 400 - Bad Request
  • 408 - Request timeout
  • 500 - Internal Server Error

11. Chuyển hướng 301

Khi người dùng truy cập vào page_1.html trong website của bạn. Vì một số lý do nào đó khi người dùng truy cập vào đó thì hệ thống sẽ tự động chuyển hướng người dùng truy cập sang trang page_b.html. Trường hợp này có thể giải quyết nhẹ nhàng nhờ .htaccess.

Redirect 301 [URL cũ] [URL mới]

Ví dụ:

Redirect 301 /tut/old.html /tut/new.html

12. Chuyển hướng sử dụng RewriteRule

Khi redirect các page, sử dụng Redirect với các page trong cùng domain, sử dụng RewriteRule cho bất cứ domain nào. RewriteRule mạnh hơn Redirect.

RewriteRule http://old-domain.com/old-file.html http://new-domain.com/new-file.html
RewriteRule http://old-domain.com/old-dir/ http://new-domain.com/new-dir/
RewriteRule http://old-domain.com/ http://new-domain.com/

13. Bật nén PHP compression (bandwidth)

Việc cho phép nên một số thành phần của trang web sẽ giúp web nhẹ nhàng hơn, tốc độ tải trang cũng được cải thiện đáng kể.

# php compression – use with caution
php_value zlib.output_compression 16386

14. Tránh trùng lặp nội dung

Trong một website không nên có 2 liên kết cùng có một nội dung giống nhau.

# set the canonical url
RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

Tổng kết.

Việc sử dụng file .htaccess nhằm tối ưu hóa và bảo mật website của bạn hơn. bảo vệ các file quan trọng, giới hạn upload, chuyển hướng 301, trang lỗi tùy chỉnh, tắt liệt kê nội dung thư mục, nén nội dung…

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.