我的网站存在很多CSRF问题,使用CSRF令牌修复它们需要花费大量的精力。 所以,我的问题是:我可以使用.htaccess基于referer头阻止POST请求吗? 例如,应允许此请求:
POST http://mywebsite.com/password
REFERER: http://mywebsite.com/
pass=xxxx
但是应该阻止这个。
POST http://mywebsite.com/password
REFERER: http://evil.com/
pass=xxxx
还有,如何阻止没有REFERER标头的POST请求?
提前致谢。
答案 0 :(得分:1)
对RewriteCond
和REQUEST_METHOD
HTTP_REFERER
指令
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} ^$ # <- remove this line
RewriteRule .* - [F]
这会向所有403 Forbidden
个请求发送POST
个空引用或不等于http://www.yourdomain.com/anything
实施例
$ curl -vvv --data something --referer http://www.yourdomain.com/something http://yourdomain.com/
200 OK
$ curl -vvv --data something --referer http://evildomain.com http://yourdomain.com/something-else
403 Forbidden
$ curl -vvv --data something --referer http://yourdomain.com http://yourdomain.com/something-else
403 Forbidden
$ curl -vvv --data something http://yourdomain.com/something-else
403 Forbidden
答案 1 :(得分:0)
这是您正在寻找的一般食谱:
RewriteEngine ON
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_REFERER} !=http://mywebsite.com/
# XXX: /? for htaccess-vs-vhost portability
RewriteRule ^/?password - [F]