时间:2021-05-26
一、CGI模式安装安全
二、以Apache模块安装安全
当 PHP 以 Apache 模块方式安装时,它将继承 Apache 用户(通常为“nobody”)的权限。这对安全和认证有一些影响。比如,如果用 PHP 来访问数据库,除非数据库有自己的访问控制,否则就要使“nobody”用户可以访问数据库。这意味着恶意的脚本在不用提供用户名和密码时就可能访问和修改数据库。一个 web Spider 也完全有可能偶然发现数据库的管理页面,并且删除所有的数据库。可以通过 Apache 认证来避免此问题,或者用 LDAP、.htaccess 等技术来设计自己的防问模型,并把这些代码作为 PHP 脚本的一部份
一个常犯的对安全性不利的错误就是让 Apache 拥有 root 权限,或者通过其它途径斌予 Apache 更强大的功能。
把 Apache 用户的权限提升为 root 是极度危险的做法,而且可能会危及到整个系统的安全。所以除非是安全专家,否则决不要考虑使用 su,chroot 或者以 root 权限运行。
除此之外还有一些比较简单的解决方案。比如说可以使用 open_basedir 来限制哪些目录可以被 PHP 使用。也可以设置 Apache 的专属区域,从而把所有的 web 活动都限制到非用户和非系统文件之中。
三、文件系统安全
PHP 遵从大多数服务器系统中关于文件和目录权限的安全机制。这就使管理员可以控制哪些文件在文件系统内是可读的。必须特别注意的是全局的可读文件,并确保每一个有权限的用户对这些文件的读取动作都是安全的。
PHP 被设计为以用户级别来访问文件系统,所以完全有可能通过编写一段 PHP 代码来读取系统文件如 /etc/passwd,更改网络连接以及发送大量打印任务等等。因此必须确保 PHP 代码读取和写入的是合适的文件。
两个重要措施来防止此类问题。
# 只给 PHP 的 web 用户很有限的权限。
# 检查所有提交上来的变量。
* Null字符问题
由于 PHP 的文件系统操作是基于 C 语言的函数的,所以它可能会以您意想不到的方式处理 Null 字符。 Null字符在 C 语言中用于标识字符串结束,一个完整的字符串是从其开头到遇见 Null 字符为止。
# 会被 Null 字符问题攻击的代码:
$file = $_GET['file']; // "http://ing GET/POST/Cookie data.; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
如果不能修改服务器端的配置文件,使用 .htaccess 也可以。范例如下:
php_flag magic_quotes_gpc Off
为了能写出移植性较强的代码(可以运行于任何环境),例如不能修改服务器配置的情况,下面的例子可以在运行时关闭 magic_quotes_gpc。但是这样做比较低效,适当的修改配置才是更好的办法。
Example #2 在运行时关闭魔术引号
复制代码 代码如下:
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>
九、隐藏PHP
一般而言,通过隐藏的手段提高安全性被认为是作用不大的做法。但某些情况下,尽可能的多增加一份安全性都是值得的。
一些简单的方法可以帮助隐藏 PHP,这样做可以提高攻击者发现系统弱点的难度。在 php.ini 文件里设置 expose_php = off ,可以减少他们能获得的有用信息。
另一个策略就是让 web 服务器用 PHP 解析不同扩展名。无论是通过 .htaccess 文件还是 Apache 的配置文件,都可以设置能误导攻击者的文件扩展名:
Example #1 把 PHP 隐藏为另一种语言
# 使PHP看上去像其它的编程语言
AddType application/x-httpd-php .asp .py .pl或者干脆彻底隐藏它:
Example #2 使用未知的扩展名作为 PHP 的扩展名
# 使 PHP 看上去像未知的文件类型
AddType application/x-httpd-php .bop .foo .133t或者把它隐藏为 HTML 页面,这样所有的 HTML 文件都会通过 PHP 引擎,会为服务器增加一些负担:
Example #3 用 HTML 做 PHP 的文件后缀
# 使 PHP 代码看上去像 HTML 页面
AddType application/x-httpd-php .htm .html要让此方法生效,必须把 PHP 文件的扩展名改为以上的扩展名。这样就通过隐藏来提高了安全性,虽然防御能力很低而且有些缺点。
十、保持更新
PHP 和其它的大型系统一样,在持续的研究和改进中。每一个版本都会有或多或少的改进来增强安全性和修复任何缺陷,配置问题以及任何会影响到整个系统安全与性能的问题。
和其它系统级的脚本语言一样,最好的途径是经常更新,并时刻留意最新版本及其改变
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患。从配置选项来看,可以做如下的优化。1.屏蔽PHP错误输出。在/etc/php.ini(默认配置
PHP安全配置详解PHP勿庸置疑是非常强大的服务器端脚本语言,但是强大的功能总是伴随着重大的危险,在这章里,你将学习到使用PHP的安全模式来阻止一些PHP潜在的
另外,目前闹的轰轰烈烈的SQLInjection也是在PHP上有很多利用方式,所以要保证安全,PHP代码编写是一方面,PHP的配置更是非常关键。我们php手手工
【安全模式】 PHP的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的PHP开放的Web服务器上。当一个Web服务器上运行的PHP打开了安全模式
PHP安全配置(1)打开php的安全模式php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进