我正在使用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