这个令我感到困惑,如果它不是特定于脚本,那么托管我的应用程序的Amazon AMI会出现问题。
我发布了.htaccess和索引文件的确切内容。唯一的区别是我发送的电子邮件。
这是我的.htaccess文件
<IfModule mod_rewrite.c>
Options +FollowSymlinks
Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteBase /
</IfModule>
Options -MultiViews
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
这是我的index.php
<?php
mail('me@email.com', '', '7');
当我加载索引页面时,我将收到2封当前设置的电子邮件。但如果我注释掉RewriteRule并加载索引页面,我正确地收到了1封电子邮件给我。
有没有人遇到过这个?
编辑: access_log使用RewriteRule
显示此信息[21/Feb/2013:03:48:27 +0000] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
[21/Feb/2013:03:48:27 +0000] "GET /favicon.ico HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
access_log显示没有RewriteRule
[21/Feb/2013:03:47:58 +0000] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
[21/Feb/2013:03:47:58 +0000] "GET /favicon.ico HTTP/1.1" 404 295 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
答案 0 :(得分:3)
问题在于您将不存在的文件的每个请求路由到index.php
。加载页面时,浏览器会自动向http://yourdomain.com/favicon.ico发出请求。由于您的网站上尚未存在此文件,因此index.php
再次受到攻击。您可以通过检查$_SERVER['SCRIPT_FILENAME']
中的index.php
来避免这种情况,只有在它应该是一个页面时生成邮件(与图像文件等相反)。
例如:
if (!preg_match('/\.(ico|jpg|png|gif|txt)$/i', $_SERVER['SCRIPT_FILENAME']))
mail('me@email.com', '', '7');
检查ico
,jpg
,png
,gif
和txt
个文件。
答案 1 :(得分:0)
问题在于RewriteRule不正确
这是导致重复电子邮件的那个
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
修复是将“/”添加到规则中,如此
RewriteRule ^/(.*)$ index.php/$1 [L,QSA]
我的假设是原始RewriteRule
无法正确捕获GET
个请求。正如 N Rohler 指出正在请求favicon.ico
,但请求是"/favicon.ico"
未被原始RewriteRule