在共享主机Apache服务器上启用mod_rewrite

时间:2010-12-10 16:28:21

标签: php apache .htaccess mod-rewrite

我对客户网站进行了一些更改 客户端不断受到SQL注入的攻击,目前URL包含网站需要的变量(即index.php?filenmae = home.php)。

因此,在尽可能使用mysql_real_escape_stringsstripslashes保护网站之后,我开始在Apache中进行URL重写。

目前,网站当前所在的服务器不支持mod_rewrite(我已经使用phpinfo进行了检查)并且它不是属于我们的服务器。我的.htaccess文件中有什么可以为这个网站启用mod_rewrite吗?

4 个答案:

答案 0 :(得分:2)

如果安装了mod_rewrite,您可以在本地.htaccess文件中配置它。

  • 在您网站的根文件夹中创建名为.htaccess的文件。
  • 第一行应为RewriteEngine On
  • 第二行应为RewriteBase /
  • 之后,需要输入您的重写规则。

如果没有安装,那你就不走运了 - 没有网络主机会在一个客户端的共享主机盒上安装额外的软件。

答案 1 :(得分:1)

Mick,最适合您的解决方案是更改代码。我猜你的代码中包含了指定的文件名,例如

include $_GET['filename'];

简而言之,无法使用mod_rewrite可以确保您的安全。

但是,通过检查文件名是否有效,您可以非常轻松地使其更安全,例如

$valid_filenames = array('home.php', 'foo.php', 'bar.php', /* etc... */);
if (!in_array($_GET['filename'], $valid_filenames)) {
    echo "Invalid request.";
    exit;
}
include $_GET['filename'];

只需确保验证所需的文件 之前包含它,你就会好多了。

答案 2 :(得分:0)

不,你不能动态加载mod_rewrite。大多数托管服务提供商在Apache服务器上启用了mod_rewrite。如果他们不这样做,你可以要求他们启用它。否则,如果你真的需要mod_rewrite,请考虑切换托管服务提供商。

作为替代方案,您可以在PHP中重写URL。

  1. $_SERVER['QUERY_STRING']可用于获取问号后的部分( http://example.com/file.php? this_part )。< / LI>
  2. 使用/
  3. 按首选参数分隔符(例如;explode('/', $_SERVER['QUERY_STRING']))拆分它
  4. 循环显示值,并使用首选值分隔符(例如'=',':')分割它们
  5. 使用空数组覆盖$_GET,并将新生成的值放入其中。 注意:filter_input及相关功能无法在$_GET上运行。因此,此方法 不适用于filter_input

答案 3 :(得分:0)

对于共享主机服务器,它确实有效。

  • 在您网站的根文件夹中创建名为.htaccess的文件。
  • 第一行应为RewriteEngine On
  • 第二行应为RewriteBase /
  • 之后,需要输入您的重写规则。