Bài 05: Một số thủ thuật với .htaccess
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 ...
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 (bandawidth)
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…