你是说开启safe_mode吗?
( `6 N* \8 S& V$ j# G \限制多了,速度自然慢 V1 k; m$ H) s ~- {
可以关闭的,影响不大~
8 M E8 W- ^- \; K- R* y
- N/ n Y- p0 X Y# k" z以下设置不影响速度的,可以考虑~
8 n9 W# {3 k. }& d" W7 h5 M- d/ i2 l! `3 l. |( i* R
(6) 关闭危险函数
2 |. R$ t# n% G7 U如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:
; Z$ S0 `) ?7 u3 Edisable_functions = system,passthru,exec,shell_exec,popen,phpinfo [) q0 {6 }, d
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
( _% C G) W- ^$ Sdisable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
( U" Q: M8 y9 ?6 {+ s8 @" o- h以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。
# m5 _# Q* ?+ h, F; ?' A
7 z& h4 k# c: l(7) 关闭PHP版本信息在http头中的泄漏 : t) j! C, @# G8 O
我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:
7 D; D# k5 J& X, j; i3 l. }expose_php = Off
0 a3 ^% I7 U1 F: z1 D比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。
2 r" M! F5 o$ ?6 ^! {- s
3 j6 w ^( D' \% V6 M& d/ w% A8 L(8) 关闭注册全局变量 ' m' r! t1 I/ \. M
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 6 a$ g$ L" H$ C4 O
register_globals = Off
& \. v; ~. g' s当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 6 d' P1 r1 v- B3 ]3 u
+ [6 \! Z( ?' Y5 G/ C4 r
(9) 打开magic_quotes_gpc来防止SQL注入
7 v$ X" v5 w% s% X7 JSQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:
. `% w% h% o. `( Q3 n% o9 Jmagic_quotes_gpc = Off
8 c0 S1 i' U, S% P" {6 ?# q. N这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为:
- |1 | T6 D+ _, S( q) Zmagic_quotes_gpc = On 9 F& w# A$ k, o) e! m7 ~
( `4 f$ l$ j2 p( C( z# |1 _
(10) 错误信息控制
4 z4 x, a' h2 O. p6 j2 d1 g/ G' e一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: ; E. ~4 H0 ^% S- W1 u+ U/ u
display_errors = Off 2 K. N; C3 `- t
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: 8 V4 Y. o F, _1 H
error_reporting = E_WARNING & E_ERROR
) ~1 |$ W3 Z7 n1 N当然,我还是建议关闭错误提示。
) V% a7 W5 F: V' t% z/ O1 c8 D1 ]" | m, P! S) T, ?
(11) 错误日志
$ ^8 f" a1 X p, |5 {建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: 1 K/ m, u4 U7 k
log_errors = On
2 |5 A5 z6 j6 s. P' b" |7 n同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
. l- q* N$ O9 h s& t" Yerror_log = /usr/local/apache2/logs/php_error.log ; {7 h9 X5 P& u! \& t
注意:给文件必须允许apache用户的和组具有写的权限。 |