Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在共享托管Apache服务器上启用mod_重写_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 在共享托管Apache服务器上启用mod_重写

Php 在共享托管Apache服务器上启用mod_重写,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我对客户网站做了一些更改。 客户端不断受到SQL注入的攻击,此时URL包含网站需要的变量(即index.php?filenmae=home.php) 因此,在尽我所能使用mysql\u real\u escape\u strings和stripslashes保护网站安全后,我开始在Apache中重写URL 目前,网站当前所在的服务器不支持mod_rewrite(我已经使用phpinfo进行了检查),而且它不是属于我们的服务器。在我的.htaccess文件中,我可以做些什么来启用此网站的mod_r

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

因此,在尽我所能使用
mysql\u real\u escape\u strings
stripslashes
保护网站安全后,我开始在Apache中重写URL


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

不,您不能动态加载mod_rewrite。大多数托管提供商都在Apache服务器上启用了mod_rewrite。如果他们没有,您可以要求他们启用它。否则,如果您真的需要MODY重写,请考虑切换主机提供商。

或者,您可以用PHP重写URL

  • $\u服务器['QUERY\u STRING']
    可用于获取问号后的零件(http://example.com/file.php?此部分
  • 使用
    分解(“/”,$服务器['QUERY\u字符串])
  • 循环遍历这些值,并使用首选值分隔符(例如“=”、“:”)拆分这些值
  • 用空数组覆盖
    $\u GET
    ,并将新生成的值放入其中。 注意:
    filter\u input
    和相关功能不在
    $\u GET
    上运行。因此,此方法不适用于
    过滤器\u输入

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

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

    如果没有安装,你就倒霉了——没有一个网络主机会在一个共享主机上为一个客户端安装额外的软件。

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

    只需确保在包含请求的文件名之前验证该文件名,您的情况就会好得多。

    对于共享托管服务器,它确实有效

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

    我认为这个问题属于serverfault.com。不幸的是,移动提供商不是一个选项。我现在会给他们发电子邮件,询问他们有关情况。另外,我使用mod_rewrite来防止sql注入是否正确?不。如果你认为mod_rewrite是防止sql注入的安全解决方案,那你就大错特错了。要防止SQL注入,请始终使用正确的转义语句或准备好的语句。但是mod_rewrite是否有助于防止一点点SQL注入?我在代码中也包含了mysql\u escape\u字符串。我想把整个事情都锁起来。不,没用。使用mod_rewrite可以捕获机器人的常见扫描,但不会使应用程序更加安全。“我在代码中包含了mysql\u escape\u string”:
    /*mysql\u escape\u string*/
    。是的,我现在也包括在内了
    mysql\u escape\u string
    被弃用,取而代之的是
    mysql\u real\u escape\u string
    。这一切都是为了实现。嘿,为你的回答干杯。我已经和托管公司谈过了,他们说他们可以做URL重写,但是他们用宙斯(?)来代替。因此,我现在必须找出如何在这种情况下执行URL重写。此外,我已经听取了你的意见,目前我正在实施这一意见。谢谢:)我在这段代码中实现了这段代码,但有人告诉我,用户在添加页面时不能受到限制。目前,我们将使用mysql\u escape\u字符串函数发布它,而不使用mod\u重写。谢谢你的帮助:)