你是说开启safe_mode吗? 3 G$ Z- O. C1 l0 k8 A5 ]
限制多了,速度自然慢 g8 F Q$ U: K! p( e5 Z0 ?
可以关闭的,影响不大~ : y) E+ ?& \( _" O8 d4 w
* x+ H% N2 Y- b9 R! o: g4 G T以下设置不影响速度的,可以考虑~
* C( D" D& v. B7 ?
- l0 ?, H! U. j( Y2 e(6) 关闭危险函数
5 Z) N7 f% r" h3 k* m- Z+ j5 V1 i; D如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: % i+ N d/ @7 g; j$ r/ A
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo 2 v( m9 o2 D6 Q# M
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
0 D7 T' l% _5 a; g1 Mdisable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown " m+ G- g$ Q2 h" Z# u$ Z
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 / b: e, y; H: s6 V& z P
& `9 e5 `4 h9 a- m. s4 y
(7) 关闭PHP版本信息在http头中的泄漏 + w, b' ]0 |& `( |, |( d
我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:
. R7 F& P" W' k( ^: `& ?0 b, M nexpose_php = Off
7 n( K6 w" j2 J' Z6 a* u比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。
4 S" n; E0 W" E* h7 Y+ ^ q, g H2 A& E' r- G2 H& r& a
(8) 关闭注册全局变量 7 F9 s7 F. _9 P
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 3 g }. L. ~! w$ c: D
register_globals = Off % w) E& c- x, V
当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。
! ^ L/ z# q) h/ P( \2 I) l; N: L" N+ q
(9) 打开magic_quotes_gpc来防止SQL注入 ; N! x: Z- {: l# |& {, q
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: / \% j. h9 z } ~% G( f$ x
magic_quotes_gpc = Off
' a$ ]* X+ g: Z. T+ @这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为:
# ?5 ^0 C7 w$ i2 R0 cmagic_quotes_gpc = On
5 t2 S0 P$ o8 _: P- A- g
- H$ C+ t9 }: ~1 X(10) 错误信息控制 9 I/ Y) U' w1 \& l
一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:
1 J. {9 |2 S9 X! Z8 |) L! Rdisplay_errors = Off 8 T# T7 R& D2 H6 q) o0 t
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: 1 T1 n" y4 y. J5 r) X$ n+ n
error_reporting = E_WARNING & E_ERROR % E1 E l9 |4 Z, h5 Y4 r
当然,我还是建议关闭错误提示。
( q/ m; v7 [8 Z( O0 _ e7 f* b4 \
(11) 错误日志
; u& U) A0 u8 ?, P建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: - n* q, @1 J6 P& B' L5 ^/ e1 g7 d$ p
log_errors = On
7 z6 T/ m% x4 x! |2 F' z& C; R同时也要设置错误日志存放的目录,建议根apache的日志存在一起: 3 {9 p" ~7 M* E# I& H1 G
error_log = /usr/local/apache2/logs/php_error.log 2 T, P A" a6 l& | a6 Z
注意:给文件必须允许apache用户的和组具有写的权限。 |