防止服务器行为:执行没有扩展名的脚本

时间:2013-04-19 18:16:39

标签: php apache2.2

即使我没有添加.php,我也在处理一个倾向于执行脚本的服务器 所以假设我的页面是activities.php然后我可以用:

执行我的脚本
www.example.com/activities.php
www.example.com/activities
and even www.example.com/activities/

我试图通过以下方式绕过问题:

if ($_SERVER['REQUEST_URI'] != $_SERVER['SCRIPT_NAME'])  header('Location: '. $_SERVER['SCRIPT_NAME']);

工作正常,直到我需要发布一些数据。 我的htaccess文件中没有任何内容可以解释这种行为(没有mod_rewrite东西或任何东西)。我怎么能关掉这个?

服务器信息:

Linux Linux1 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 
Apache Version  Apache/2.2.22 (Ubuntu)
Apache API Version  20051115 

提前致谢

编辑: .htaccess文件

php_flag display_errors on
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_Host} ^domain.be [NC]
RewriteRule ^(.*)$ http://www.domain.be/$1 [L,R=301]

1 个答案:

答案 0 :(得分:3)

您的服务器可能已启用MultiViews(Apache内容协商);当它启用并且找不到文件时,apache将查找相同的文件,但具有任何扩展名。要禁用此功能,您可以将-MultiViews添加到选项(如果您的主机允许)...

Options +FollowSymLinks -MultiViews

我会质疑为什么这对你来说是一个问题,如果你没有.php没有链接到你的任何脚本那么人们将如何找到它们?如果存在指向这些其他页面的链接,那么规范URL只是一个问题。

此外,通过检查$_SERVER['REQUEST_METHOD'] ...

,您可以改进基于php的重定向以检查当前请求方法,而不是重定向POST请求
if ($_SERVER['REQUEST_URI'] != $_SERVER['SCRIPT_NAME'] and $_SERVER['REQUEST_METHOD'] != 'POST')  header('Location: '. $_SERVER['SCRIPT_NAME']);