你是说开启safe_mode吗?
- U$ N8 }/ n. q% i4 P+ t限制多了,速度自然慢
& x5 ], F3 P7 u% A+ Q可以关闭的,影响不大~ 7 Q( p' f' V: V
) b- \8 [$ a- W: G& R! ` o" m
以下设置不影响速度的,可以考虑~ : n# M+ k; X. Q- |% [% u4 [* h6 ~
- }' j" C, P, z" t( j# \(6) 关闭危险函数
( I6 c0 P; i: f1 X) `' V6 f$ X6 c8 c如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:
8 }6 o' V y, m% |disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
$ W: g1 B% \0 m6 @如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
3 Q% j5 i' Q+ I, U) o8 E% ]0 F+ Ddisable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown - ?1 ^3 B' Y( Y [$ k3 Z
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 " h, v# P/ q* U) S
! L3 X7 S4 y" x9 U* Y* q
(7) 关闭PHP版本信息在http头中的泄漏 * z d( `, m4 K9 z, R
我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:
# s# m3 u0 C( u: {0 \( ]$ l9 wexpose_php = Off
4 m8 X# V1 ^* I' A2 `比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。
. M0 e; S" f; Z3 j, R2 ~- j4 K9 s- s+ m6 y
(8) 关闭注册全局变量 " \4 H3 I/ C& r N" b* C
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: ( n1 J j5 ]& _1 K, i& L
register_globals = Off
* K- K6 b$ x7 f7 t* ?* r当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。
- \8 F& T! j1 A; h2 t$ P" ~; R& d' y' y# U9 d9 y+ c* l" z* \: N* M6 i
(9) 打开magic_quotes_gpc来防止SQL注入
6 T2 |1 k n2 ASQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:
* C4 \' x9 V7 a# U1 T) K, m" hmagic_quotes_gpc = Off
2 C$ n( ^) {, c8 w& q$ ]这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: 3 V& s1 M+ T$ y0 d P
magic_quotes_gpc = On
$ c6 q5 X# ^# l
Z+ {; d* ] }" ~- [(10) 错误信息控制 1 m$ r7 N% _0 W% e& C& ~; L
一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: 7 Q% F1 P" }8 f+ ~; z* p: ~& {
display_errors = Off
; Z9 x2 F, X) K0 {如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
, t' c* G! V% werror_reporting = E_WARNING & E_ERROR $ [" h; y+ \8 `
当然,我还是建议关闭错误提示。 6 s* ~& F o$ ~5 I
7 E, l1 e4 q8 A/ f' @
(11) 错误日志
. J6 M/ ]( ?; z( a8 D8 ?建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: 7 B; x# b2 F# m7 B
log_errors = On
. {3 Z7 I; t/ j8 N3 y同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
# N4 d) e' G) P6 Herror_log = /usr/local/apache2/logs/php_error.log * T" Z4 B* [. h- m7 |
注意:给文件必须允许apache用户的和组具有写的权限。 |