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/
- 在那之后,输入你的重写规则是必需的
/*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重写。谢谢你的帮助:)