我想确保人们不能在URL中输入PHP脚本的名称并运行它。这样做的最好方法是什么?什么是仅允许包含PHP文件的最佳方式?
我可以在将包含此文件的文件中设置一个变量,然后在包含的文件中检查该变量,但有没有更简单的方法?
我想确保人们不能在URL中输入PHP脚本的名称并运行它。这样做的最好方法是什么?什么是仅允许包含PHP文件的最佳方式?
我可以在将包含此文件的文件中设置一个变量,然后在包含的文件中检查该变量,但有没有更简单的方法?
您可以检查URI,看看是否有文件被调用`
$_SERVER['SCRIPT_FILENAME']
,或者你可以将文件移到公共文件夹之外,这是一个更好的解决方案。
正如Unkwntech建议的那样,Zend Framework建议您将文件保存在Web根目录之外。我会说这是最安全和最愚蠢的解决方案。
从PHP Nuke的模块:
<?php
if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
// more code ...
?>
替换modules.php您的文件名,该文件不能被直接调用。我见过很多
一种方法是创建具有存在于每一个包含文件,并检查第一件事就是在每一个变量包括:
if(!isset($in_prog)){
exit;
}
我早就把一切除了直接可见的脚本在网页根目录之外。然后配置PHP以将您的脚本目录包含在路径中。一个典型的设立将是:
appdir include html
在PHP配置(无论是全球PHP配置或在.htaccess
文件中html
目录)补充一点:
include_path = ".:/path/to/appdir/include:/usr/share/php"
或(适用于Windows)
include_path = ".;c:\path\to\appdir\include;c:\php\includes"
请注意,该行可能已经在您的php.ini
文件中,但可能会被注释掉,以允许默认值工作。它也可能包含其他路径。一定要保留这些。
如果你将它添加到.htaccess文件,格式为:
php_value include_path .:/path/to/appdir/include:/usr/share/php
最后,你可以用这样的编程添加路径:
$parentPath = dirname(dirname(__FILE__));
$ourPath = $parentPath . DIRECTORY_SEPARATOR . 'include';
$includePath = ini_get('include_path');
$includePaths = explode(PATH_SEPARATOR, $includePath);
// Put our path between 'current directory' and rest of search path
if ($includePaths[0] == '.') {
array_shift($includePaths);
}
array_unshift($includePaths, '.', $ourPath);
$includePath = implode(PATH_SEPARATOR, $includePaths);
ini_set('include_path', $includePath);
(基于工作代码,但已修改,因此未经测试)
这应该在您的前端文件中运行(例如index.php
)。我把它放在一个单独的包含文件中,在修改上面的文件后,可以将其包含在#include '../includes/prepPath.inc'
之类的文件中。
我已经使用了我在这里介绍的所有版本,并取得了成功。使用的特定方法取决于偏好,以及项目将如何部署。换句话说,如果你不能修改php.ini
,你显然不能使用这种方法
在我探讨过的一些开源应用程序中,包括Joomla和PHPBB,他们声明了一个常量主要包括文件,然后验证不断在每个存在包括:
// index.php
require_once 'includes.php';
// includes.php
define('IN_MY_PROJECT', true);
include 'myInc.php';
// myInc.php
defined('IN_MY_PROJECT') || die("No direct access, plsktnxbai");
我想最好的办法就是把你要包括里面的文件“/包括”文件夹,并把访问权限700该文件夹
您能否更清楚一点?我真的不明白,如果你的浏览器指向它,你不希望文件不能运行... – 2008-10-06 03:53:17
也许如果预制函数的功能,也许是为了安全起见,为什么不相关。 – UnkwnTech 2008-10-06 03:54:29
@Unkwntech:我的困惑来自这样的事实,如果一个文件是在webroot下它应该是查看,任何安全必须在它之外... – 2008-10-06 03:58:46