htaccess request method

htaccess request method

  • POST, GET, HEAD, PROPFIND, OPTIONS, PUT, ... là những phương thức request quan trọng và thường dùng trong xử lý form.
  • Trong một số trường hợp, việc bắt buộc form xử dụng các phương thức này là cần thiết, cần cho việc bảo mật, đánh cắp dữ liệu.
  • Trong bài học này sẽ giúp các bạn điều khiển file .htaccess sao cho có thể chặn request nếu không sử dụng các phương thức trên, ta làm như sau:
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|PROPFIND|OPTIONS|PUT)$ [NC]
RewriteRule .? - [F,NS,L]
  • %{REQUEST_METHOD} !^(GET|HEAD|POST|PROPFIND|OPTIONS|PUT)$ [NC] xét điều kiện phương thức khác những phương thức được liệc kê trong ngoặc, [NC] không phân biệt chữ hoa hay thường.
  • .? - [F] [F] những request thỏa điều kiện trên thì sẽ trả về trang lỗi 403.

Ví dụ thêm về request method

REDIRECT UPLOADS

RewriteCond %{REQUEST_METHOD} ^(PUT|POST)$ [NC]
RewriteRule ^(.*)$ /cgi-bin/form-upload-processor.cgi?p=$1 [L,QSA]

FORBID PROXIES

  • Từ chối POST request sử dụng Proxy server, có thể access file, nhưng không thể comment.
  • Ví dụ cho trang web dùng Wordpress:
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:VIA}%{HTTP:FORWARDED}%{HTTP:USERAGENT_VIA}%{HTTP:X_FORWARDED_FOR}%{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION}%{HTTP:HTTP_PC_REMOTE_ADDR}%{HTTP:HTTP_CLIENT_IP} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .? - [F,NS,L]

BAD CONTENT LENGTH

  • Từ chối POST request không có Content-Length Header.
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Length} ^$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .? - [F,NS,L]

BAD CONTENT TYPE

  • Từ chối POST request khác Content-Type: application/x-www-form-urlencoded|multipart/form-data.
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Type} !^(application/x-www-form-urlencoded|multipart/form-data.*(boundary.*)?)$ [NC]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .? - [F,NS,L]

CHỈ POST KHI CÓ USERAGENT

  • Từ chối POST request khi không có UserAgent.
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .? - [F,NS,L]

CHẶN TRACKBACK SPAM

  • Từ chối Trackback Spam.
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^.*(opera|mozilla|firefox|msie|safari).*$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.+/trackback/?\ HTTP/ [NC]
RewriteRule .? - [F,NS,L]