【问题标题】:Enable mod_rewrite On Shared Hosting Apache Server在共享主机 Apache 服务器上启用 mod_rewrite
【发布时间】:2015-10-28 04:29:40
【问题描述】:

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

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

目前,该网站所在的服务器不支持 mod_rewrite(我使用 phpinfo 进行了检查),它不是我们的服务器。我可以在我的 .htaccess 文件中做些什么来为这个网站启用 mod_rewrite 吗?

【问题讨论】:

  • 我认为这个问题属于 serverfault.com。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

如果安装了mod_rewrite,你可以在本地的.htaccess文件中进行配置。

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

如果没有安装,那你就倒霉了 - 没有网络主机会在一个共享主机盒上安装额外的软件,只供一个客户使用。

【讨论】:

    【解决方案2】:

    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'];
    

    只要确保您验证请求的文件名之前包括它,你会好得多。

    【讨论】:

    • 嘿,为您的回复干杯。我已经和托管公司谈过了,他们说他们可以进行 URL 重写,但他们使用 Zeus(?) 代替。所以我现在必须找出如何在其中执行 URL 重写。另外,我已经听取了您的意见,我目前正在实施它。谢谢你:)
    • 我在这段代码中实现了代码,但被告知不能限制用户添加页面。目前,我们将使用 mysql_escape_string 函数而不使用 mod_rewrite 来发布它。感谢您的帮助:)
    【解决方案3】:

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

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

    1. $_SERVER['QUERY_STRING'] 可用于获取问号后面的部分 (http://example.com/file.php?this_part)。
    2. 使用 explode('/', $_SERVER['QUERY_STRING']) 将其拆分为您喜欢的参数分隔符(例如 /;
    3. 遍历值,并使用首选值分隔符(例如“=”、“:”)拆分它们
    4. 用空数组覆盖$_GET,并将新生成的值放入其中。 注意:filter_input 和相关函数对$_GET 不起作用。因此,此方法适用于filter_input

    【讨论】:

    • 不幸的是,移动供应商不是一种选择。我现在会给他们发电子邮件并询问他们。
    • 另外,我是否通过使用 mod_rewrite 来防止 sql 注入做正确的事情?
    • 没有。如果您将 mod_rewrite 视为防止 SQL 注入的安全解决方案,那您就大错特错了。为防止 SQL 注入,请始终使用正确的转义或准备好的语句。
    • 但是 mod_rewrite 是否有助于防止它甚至一点点?我也在代码中包含了 mysql_escape_string。我正试图锁定整个事情。
    • 不,它没有帮助。使用 mod_rewrite 可以捕获机器人的常见扫描,但它不会使您的应用程序更安全。 “我在代码中包含了 mysql_escape_string”:/*mysql_escape_string*/。是的,我现在也包含了它。 mysql_escape_string 已弃用,取而代之的是 mysql_real_escape_string。一切都是为了实施。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      相关资源
      最近更新 更多