遨海湾超级社区

 找回密码
 入住遨海湾

QQ登录

只需一步,快速开始

扫描二维码登录本站

搜索
网站解决方案专享优惠-3折上云
查看: 1597|回复: 1

Windows 2003 安全设置之PHP篇

[复制链接]
发表于 2008-10-21 15:54:42 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有帐号?入住遨海湾

x
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。 9 t& F5 S: T1 T5 B( T, B) e2 [/ T 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。9 D( E7 U( g/ b9 | * W! U S# {8 z# m 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。 # {# y* W3 ]5 S! g2 ? 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。 9 H% r7 M+ ~- j- ] 4、把magic_quotes_gpc设置成on,防止SQL注入。# ^; {+ d/ Q4 \% c3 b 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。 8 Y0 d8 B v. C1 p: F; E 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。& X& Q# ]" o* c7 j 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启safe_mode吗? 0 {, `1 {8 B8 g0 E2 q! X 限制多了,速度自然慢 7 y5 d' M2 X% |0 t2 G4 ?# H/ o 可以关闭的,影响不大~ 1 u* q' z* C8 ~ 4 z @1 o3 j( E以下设置不影响速度的,可以考虑~ 0 X2 A! q3 M5 v/ ^ * {0 U" T" f8 B, U& J! U (6) 关闭危险函数 ( l, f8 Z9 r) Y! z如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: 0 `' H8 I( l, F" P% ?4 J/ _* ~ disable_functions = system,passthru,exec,shell_exec,popen,phpinfo & \5 n$ ]2 j/ Z; l8 ^7 m$ I5 S 如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 9 G% K- Q! v2 e+ i0 [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 + `' f8 ]7 B% @. I8 \9 ~ 以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 / w) g1 `: _% r8 t* M8 y6 u( T + [* N$ p X0 ?( t0 G1 }1 J(7) 关闭PHP版本信息在http头中的泄漏 . h* u, G1 n2 p4 n# P3 M; N% L. D7 }, y 我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: 9 H1 B g) ^) O$ d3 q0 ~ expose_php = Off a7 O2 u; A7 n$ `" i比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 3 b) q( h* _4 s" v! k+ q+ h , K# k. E$ D+ c: U- v (8) 关闭注册全局变量 3 B; b f; d% Y. h, R& D2 y- m 在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 3 A9 w3 N8 _3 |3 Z- _register_globals = Off 2 K4 o$ U3 G* A& O: ]& ]2 _ 当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 , x4 c3 \- q8 S9 ?+ u7 C. J 4 V0 ^; \& r% o; `( ]/ _% k(9) 打开magic_quotes_gpc来防止SQL注入 5 ]6 u+ p6 A0 q! b2 hSQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: + |7 M9 {7 X9 r) `9 c" W magic_quotes_gpc = Off - A3 O4 U3 G0 N' {* ^2 s4 _- b 这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: / i9 }) p. \% `$ t1 w- n8 c7 Bmagic_quotes_gpc = On c( l# k. c" B' y7 G0 u2 p- }9 z9 ^ E) z8 m& ^ (10) 错误信息控制 * ?, M4 x# z4 v, l3 i: }9 R一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: % o3 ^$ ]* w0 W6 I display_errors = Off 9 D0 Z2 [ d9 p: A) O v- I如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: 8 X- K$ n6 p" X- q; E error_reporting = E_WARNING & E_ERROR # q7 F: P# A/ y; D; [: z/ _8 r 当然,我还是建议关闭错误提示。 + C7 J$ }2 f0 i 9 E: q/ _5 E0 j" Y5 j/ H- }/ w (11) 错误日志 3 k0 {. E% |' b5 S; p 建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: & K3 T9 Y8 g/ V4 }$ N& e log_errors = On # v2 i i/ ?/ h, t V 同时也要设置错误日志存放的目录,建议根apache的日志存在一起: 6 x* t, f3 O$ y8 v( Qerror_log = /usr/local/apache2/logs/php_error.log " |( t H/ |# F* E+ _: b% X: A 注意:给文件必须允许apache用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云
快速回复 返回顶部 返回列表