我对客户网站进行了一些更改 客户端不断受到SQL注入的攻击,目前URL包含网站需要的变量(即index.php?filenmae = home.php)。
因此,在尽可能使用mysql_real_escape_strings
和stripslashes
保护网站之后,我开始在Apache中进行URL重写。
目前,网站当前所在的服务器不支持mod_rewrite(我已经使用phpinfo进行了检查)并且它不是属于我们的服务器。我的.htaccess文件中有什么可以为这个网站启用mod_rewrite吗?
答案 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。
$_SERVER['QUERY_STRING']
可用于获取问号后的部分( http://example.com/file.php? this_part )。< / LI>
/
;
,explode('/', $_SERVER['QUERY_STRING'])
)拆分它
$_GET
,并将新生成的值放入其中。
注意:filter_input
及相关功能无法在$_GET
上运行。因此,此方法 不适用于filter_input
。答案 3 :(得分:0)
对于共享主机服务器,它确实有效。
.htaccess
的文件。RewriteEngine On
。RewriteBase /
。