你是说开启safe_mode吗? ' Q6 `& ]8 r, ?5 h
限制多了,速度自然慢 # G i# H0 R! o" y) C
可以关闭的,影响不大~
9 m# [( E4 w, O* }/ c& H
8 h, E9 i" C, c, G! E# N以下设置不影响速度的,可以考虑~
8 K/ @" M2 s+ R) B; v
2 [$ G* [7 N5 O# H(6) 关闭危险函数
. f0 T6 e+ D- E7 P如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:
+ d+ _& _1 @, n* x' Z6 adisable_functions = system,passthru,exec,shell_exec,popen,phpinfo , [# i# C5 @0 h
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 2 A, K0 U* u' G4 p( C6 r6 h, e% v; {
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
, h0 e4 k T4 t以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。
/ }/ w- p5 ?# q$ N" C
+ ]' \( R" W+ S" N' h8 g5 n9 J(7) 关闭PHP版本信息在http头中的泄漏
: y/ A1 T0 E* C7 W2 I我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: $ C3 W/ `' i& r
expose_php = Off % [! r6 l8 I2 Y3 j0 ?
比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 ( ^' E& k6 I' S8 v
$ d) q7 X" ~! `0 m: w
(8) 关闭注册全局变量
1 \ I6 x6 M1 ?. U在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 2 m" p) `0 h- V- p7 p2 z; F
register_globals = Off
. ]" w1 o! V# S& f+ N( t4 ]5 ?4 P' J" `当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。
; |; L1 |- o# R5 p" Y' e5 h4 ]; i; T2 ~6 S7 }% J0 [- ^! W5 o/ d. u
(9) 打开magic_quotes_gpc来防止SQL注入
0 u8 ?5 v/ \# x6 fSQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:
; y X. o6 {! |! q2 @' [/ ~5 Ymagic_quotes_gpc = Off 9 U) i3 g4 ]- C4 a5 R0 ]5 a
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: ) a' C7 N6 n; {- R* h
magic_quotes_gpc = On
" @$ a, F* u. E6 k4 Q8 Y4 B3 z7 X/ j( [7 W
(10) 错误信息控制
2 j! {# O& u m- z% B3 W一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:
6 M5 B/ ^9 k: \$ g5 zdisplay_errors = Off 9 J L- t. K5 J+ l/ \3 p5 Y0 d
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
; T( P1 P# ^1 C6 G- K0 z( C8 ferror_reporting = E_WARNING & E_ERROR
; H& h+ U% K9 q& O当然,我还是建议关闭错误提示。 8 Z/ U3 X$ e4 P1 c4 d5 |! ]1 P
) D B# _+ i! J, {
(11) 错误日志
5 D1 I0 [# T' \* g建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
: C% Q: R7 S0 K! J' |& ?5 f$ Wlog_errors = On : O" m4 n# ~( e" a4 w" I" a; E
同时也要设置错误日志存放的目录,建议根apache的日志存在一起: ( K! F4 A4 V1 r' j. Y8 k4 A
error_log = /usr/local/apache2/logs/php_error.log
) w1 `" x, q1 G% B* V* j; _" x2 f% a注意:给文件必须允许apache用户的和组具有写的权限。 |