.htaccess php_flag引擎关闭不起作用。或者我不明白它是如何工作的

时间:2015-02-17 06:16:49

标签: php .htaccess

例如,名为test的目录放置.htacess,第一行php_flag engine off中只有代码

在目录test中放置文件test.php,其代码为echo 1+3;

另一个文件(main.php)放置include("test.php");

打开main.php并查看4(1 + 3的结果)。

添加了AddType text/plain .php .phtml .php3。同样的结果。

我预计,因为php_flag engine off中的test.php代码无法执行。

要防止在test.php中执行代码需要做什么?

当图像目录中的黑客以某种方式上传php文件时,试图阻止这种情况,然后直接访问该文件或将该文件包含在另一个文件中。

措施:

1)创建了多个验证来检查上传的文件是否是图像,并且不包含某些PHP代码。

2)禁用直接访问图像目录(在htaccess中)

3)要确定黑客不能将上传的php文件包含在另一个目录中的文件中,因为必须将read只设置为所有目录,但images目录除外

1 个答案:

答案 0 :(得分:4)

.htaccess指令仅在处理请求时与Apache相关。它将阻止Apache直接执行test.php文件(或者更确切地说,它会阻止PHP在Apache调用时执行任何操作)。但是,如果Apache正在某个其他文件夹中执行脚本,那么您将拥有一个正在运行的PHP实例。这个实例可以做任何想做的事情。它不会解释任何进一步的.htaccess文件或考虑任何php_flag指令,因为那些只在 PHP启动之前应用。一旦它正在运行它。

.htaccess文件仅由Apache解释如下:

  • 指定路径为/foo/bar/test.php
  • Apache检查/.htaccess是否存在,如果是,则应用其规则
  • Apache检查/foo/.htaccess是否存在,如果是,则应用其规则
  • Apache检查/foo/bar/.htaccess是否存在,如果是,则应用其规则

另一方面,PHP直接包含foo/bar/test.php,它不会查找或解释.htaccess文件。