找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1933|回复: 1

Windows 2003 安全设置之PHP篇

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

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

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

×
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。, h) X' ~8 j- i7 B. @ 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。# a1 g! T+ O5 }. x8 { 9 z. H% k, r# R+ E8 t 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。" d3 _7 _+ g7 h5 P 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。' |0 h- q7 T0 ]8 U% _ N 4、把magic_quotes_gpc设置成on,防止SQL注入。( R+ l8 i- a2 C 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。 3 V& P! V+ U7 d0 i N 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。 0 p/ v! a1 f0 V' s. m6 c 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启safe_mode吗? 0 `2 T3 a# x7 W( K# R6 l7 F限制多了,速度自然慢 " P$ e5 C# ]! G8 z8 ]: E可以关闭的,影响不大~ & O* }- s6 S7 P* g+ `* L( O. y " T5 ]0 N6 X, E& R4 Y 以下设置不影响速度的,可以考虑~ ! f2 w% n( P, b6 e" V - L4 O; j6 R: `0 j: n% k$ K9 A' g(6) 关闭危险函数 |" F) f% h2 z j' O) F如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: ' L& k7 G& z" R# c; X disable_functions = system,passthru,exec,shell_exec,popen,phpinfo & f% q2 s9 U6 O如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 : ]3 i' Q4 N+ x; j! M2 Y( Kdisable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown 6 i' X% M7 I8 ~1 C+ E/ ^& |以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 ) V3 V: K- E( t& P4 j8 F4 y7 n# ]3 S4 m/ s" X' P/ _, j7 f7 I (7) 关闭PHP版本信息在http头中的泄漏 " V9 m$ }5 `1 @8 e 我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: & k8 | J" L1 S0 K' { expose_php = Off E$ ]9 w7 W% M3 m9 O7 l" f比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 , A* S4 K% X5 `4 N+ {; Q# s- D7 Z; k `* G (8) 关闭注册全局变量 ! E+ w: i, w7 z7 P6 S. b9 I) p8 s, n在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: * B# [+ B h) [( D2 x8 O) zregister_globals = Off 2 p% E' D% \2 h/ P# ?5 M. \, v当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 7 V( |9 o8 E1 s* @8 v3 D# G% B + S0 j# p) N( N9 z9 O& w(9) 打开magic_quotes_gpc来防止SQL注入 h- U0 O" L* x SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: ) E( s6 Q& q5 gmagic_quotes_gpc = Off ) G6 i( G$ u7 K6 P2 n' j ?' ] 这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: 4 A7 F# _& t7 L6 F9 V magic_quotes_gpc = On # `% l, X& h1 |. x8 h& i5 e+ w4 G% S8 w$ l: V$ ~ (10) 错误信息控制 0 I1 }" ~) L$ t! a3 {一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: * j0 R6 E9 @0 X" u8 r Y, o display_errors = Off : q2 u0 s; f/ J r 如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: ( j8 y$ [& ]& m* d& Serror_reporting = E_WARNING & E_ERROR * i F! X" C. B" \, W) q: [ 当然,我还是建议关闭错误提示。 * @9 z' @3 s8 U5 m1 r! S! O 5 T, Q) s: s' h( s8 p5 b! Z(11) 错误日志 * Y& Z! K- E+ b& H. z: U/ W4 w B建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: 3 E' _2 Y) W3 e2 W* U4 u% Wlog_errors = On / [: K& U$ f9 V同时也要设置错误日志存放的目录,建议根apache的日志存在一起: . N4 G \4 Y# c1 w# X/ f2 Uerror_log = /usr/local/apache2/logs/php_error.log : K2 i0 U3 H4 ^5 u5 i: D1 f9 Z 注意:给文件必须允许apache用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

QQ|手机版|小黑屋|遨海湾超级社区

GMT+8, 2025-5-15 04:44

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表