mod_rewrite和CSRF检查之间的冲突

时间:2014-02-22 09:41:21

标签: php apache .htaccess mod-rewrite csrf

我正在使用CSRF和mod_rewrite开发一个应用程序,但我遇到了一些问题。一切在Safari和Firefox上运行良好,但在Chrome上登录不起作用,这是因为我的.htaccess代码的一行。

那一行:

RewriteRule ^([A-Za-z0-9\._\-]+)+[^\.php]$ profile.php?user=$0 [QSA,L]

每次访问页面时,我都会有一个存储在会话中的CSRF令牌。问题是我认为.htaccess文件加载页面两次,因此CSRF令牌在发布数据到达之前发生变化,并且不验证提交。

显然,当我删除.htaccess文件中的行时,它适用于Chrome。

任何人都可以帮助我吗?请。

这是我的.htaccess文件的代码:

<Files .htaccess>
order allow,deny
deny from all
</Files>

<IfModule mod_rewrite.c>

Options -Multiviews
Options +FollowSymLinks
RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ /$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f
#RewriteCond %{HTTP_COOKIE} !PHPSESSID= [NC]
RewriteRule ^([A-Za-z0-9\._\-]+)+[^\.php]$ profile.php?user=$0 [QSA,L]

</IfModule>

ErrorDocument 400 /errors/badrequest.php
ErrorDocument 401 /errors/authreqd.php
ErrorDocument 403 /errors/forbid.php
ErrorDocument 404 /errors/notfound.php
ErrorDocument 500 /errors/serverr.php

0 个答案:

没有答案