首页 电脑 电脑学堂 查看内容

和php有关的几种稀有安全细节分析

2010-4-2 15:49 537 0

摘要:     PHP自身再老版本有一些疑问,比如在 php4.3.10和php5.0.3以前有一些比拟严重的bug,所以推荐运用新版。另外,现在闹的轰轰烈烈的SQL Injec...
关键词: nbsp PHP 配置 文件 安全 apache 目录 方式 函数 变量

    PHP自身再老版本有一些疑问,比如在 php4.3.10和php5.0.3以前有一些比拟严重的bug,所以推荐运用新版。另外,现在闹的轰轰烈烈的SQL Injection也是在PHP上有许多运用方式,所以要保证安全,PHP代码编写是一方面,PHP的配置更是十分主要。     咱们php手手工装置的,php的默许配置文件在 /usr/local/apache2/conf/php.ini,咱们最首要就是要配置php.ini中的内容,让咱们执行php可以更安全。整个 PHP中的安全配置首要是为了防止phpshell和SQL Injection的攻击,一下咱们渐渐讨论。咱们先运用任何编辑工具翻开/etc/local/apache2/conf/php.ini,假设你是采用其他方式装置,配置文件能够不在该目录。     (1) 翻开php的安全方式     php的安全方式是个十分主要的内嵌的安全机制,可以控制一些php中的函数,比如system(),     同时把许多文件操作函数执行了权限控制,也不准许对某些主要文件的文件,比如/etc/passwd,     但是默许的php.ini是没有翻开安全方式的,咱们把它翻开:     safe_mode = on     (2) 用户组安全     当safe_mode翻开时,safe_mode_gid被关闭,那么php脚本可以对文件执行访问,并且类似     组的用户也可以够对文件执行访问。     建议配置为:     safe_mode_gid = off     假设不执行配置,能够咱们无法对咱们服务器站点目录下的文件执行操作了,比如咱们须要     对文件执行操作的时辰。     (3) 安全方式下执行顺序主目录     假设安全方式翻开了,但是却是要执行某些顺序的时辰,可以指定要执行顺序的主目录:     safe_mode_exec_dir = D:/usr/bin     普通情况下是不须要执行什么顺序的,所以推荐不要执行系统顺序目录,可以指向一个目录,     然后把须要执行的顺序拷贝从前,比如:     safe_mode_exec_dir = D:/tmp/cmd     但是,我更推荐不要执行任何顺序,那么就可以指向咱们网页目录:     safe_mode_exec_dir = D:/usr/www     (4) 安全方式下包括文件     假设要在安全方式下包括某些公共文件,那么就修正一下选项:     safe_mode_include_dir = D:/usr/www/include/     原本普通php脚本中包括文件都是在顺序自己以前写好了,这个可以依据详细须要配置。     (5) 控制php脚天性访问的目录     运用open_basedir选项可以控制PHP脚本只好访问指定的目录,这样可以防止PHP脚本访问     不应该访问的文件,必需水平极限定了phpshell的危害,咱们普通可以配置为只好访问站点目录:     open_basedir = D:/usr/www     (6) 关闭风险函数     假设翻开了安全方式,那么函数制止是可以不须要的,但是咱们为了安全照旧思索进去。比如,     咱们觉得不期盼执行包括system()等在那的可以执行命令的php函数,或许可以检查php信息的     phpinfo()等函数,那么咱们就可以制止它们:     disable_functions = system,passthru,exec,shell_exec,popen,phpinfo     假设你要制止任何文件和目录的操作,那么可以关闭许多文件操作     disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown     以上只是列了局部不叫常用的文件处理函数,你也可以够把上面执行命令函数和这个函数结合,     就可以抵抗大局部的phpshell了。     (7) 关闭PHP版本信息在http头中的透露     咱们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:     expose_php = Off     比如黑客在 telnet www.chinaz.com 80 的时辰,那么将无法看到PHP的信息。     (8) 关闭注册全局变量     在PHP中提交的变量,包括运用POST或许GET提交的变量,都将自动注册为全局变量,可以直接访问,     这是对服务器十分不安全的,所以咱们无法让它注册为全局变量,就把注册全局变量选项关闭:     register_globals = Off     当然,假设这样配置了,那么获取对应变量的时辰就要采用合理方式,比如获取GET提交的变量var,     那么就要用$_GET['var']来执行获取,这个php顺序员要留意。     (9) 翻开magic_quotes_gpc来防止SQL注入     SQL注入是十分风险的疑问,小则站点后台被入侵,重则整个服务器沦陷,     所以必需要留意。php.ini中有一个配置:     magic_quotes_gpc = Off     这个默许是关闭的,假设它翻开后将自动把用户提交对sql的查询执行转换,     比如把 ' 转为 \'等,这对防止sql注射有严重作用。所以咱们推荐配置为:     magic_quotes_gpc = On     (10) 错误信息控制     普通php在没有衔接到数据库或许其他情况下会有提示错误,普通错误信息中会包括php脚本当     前的途径信息或许查询的SQL语句等信息,这类信息提供应黑客后,是不安全的,所以普通服务器建议制止错误提示:     display_errors = Off     假设你却是是要显示错误信息,必需要配置显示错误的级别,比如只显示劝诫以上的信息:     error_reporting = E_WARNING & E_ERROR     当然,我照旧建议关闭错误提示。     (11) 错误日志     建议在关闭display_errors后可以把错误信息记载下来,便于查找服务器运转的原由:     log_errors = On     同时也要配置错误日志寄存的目录,建议根apache的日志存在一同:     error_log = D:/usr/local/apache2/logs/php_error.log     留意:给文件必需准许apache用户的和组具有写的权限。     MYSQL的降权运转     新树立一个用户比如mysqlstart     net user mysqlstart ****microsoft /add     net localgroup users mysqlstart /del     不属于任何组     假设MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限     然后在系统服务中配置,MYSQL的服务属性,在登录属性当中,挑选此用户 mysqlstart 然后输入密码,确定。     重新启动 MYSQL服务,然后MYSQL就运转在低权限下了。     假设是在windos平台下搭建的apache咱们还须要留意一点,apache默许运转是system权限,     这很恐惧,这让人觉得很不爽.那咱们就给apache降降权限吧。     net user apache ****microsoft /add     net localgroup users apache /del     ok.咱们树立了一个不属于任何组的用户apche。     咱们翻开计算机维护器,选服务,点apache服务的属性,咱们挑选log on,挑选this account,咱们填入上面所树立的账户和密码,     重启apache服务,ok,apache运转在低权限下了。     实践上咱们还可以议决配置各个文件夹的权限,来让apache用户只好执行咱们想让它能力的事情,给每一个目录树立一个独自能读写的用户。     这也是现在许多虚拟主机提供商的盛行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部