遨海湾超级社区

 找回密码
 入住遨海湾

QQ登录

只需一步,快速开始

扫描二维码登录本站

搜索
查看: 1458|回复: 1

Windows 2003 安全设置之PHP篇

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

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

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

x
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。" y" w" l3 P/ k% L& q 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。 , b% K. r$ R' O; z/ m U3 m 7 {# a0 b3 |# w6 U7 u# _% \' [ 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。 2 B: f8 E; _% E9 ]: V& T/ S1 N2 X 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。 ) l8 k6 M) d# \) h 4、把magic_quotes_gpc设置成on,防止SQL注入。 ' V1 L8 m' t# A% b4 L 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。. e1 j- O1 y9 a0 g" V6 m 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。% U8 r2 u; M. { 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启safe_mode吗? % k* H4 s, c- Q P4 g" K \9 l# q 限制多了,速度自然慢 9 D' V& c& n0 D5 j1 x* w5 Z+ M可以关闭的,影响不大~ N$ n# n+ Z0 d$ T9 x4 D/ ? " d7 k1 u# |1 r# _以下设置不影响速度的,可以考虑~ / t- t3 i! s' Q. X2 N " j+ d) O( r% H5 ~ S: K: L(6) 关闭危险函数 ) z* N8 B4 Y) \8 b 如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: ; O* K, h$ x3 A0 a) \4 Mdisable_functions = system,passthru,exec,shell_exec,popen,phpinfo 1 `! f' x# C: |( ]0 e 如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 $ i6 u% x5 d q n( `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 + {; ^' W7 y7 u# N3 n; d0 D 以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 ; t4 c9 ^9 `- w! k9 Y2 A' _# [ _7 w- g4 @* e) Z (7) 关闭PHP版本信息在http头中的泄漏 % K% x4 c# M. |* h 我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: & _) X' t. T4 I8 m6 l4 @/ q expose_php = Off 3 _$ N# y" w: J1 `: H0 D 比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 . `3 x+ M2 q# J6 o1 } 6 s8 ~ y5 ]) p) t (8) 关闭注册全局变量 1 C$ ~2 c6 ]3 [ 在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 7 e; P- x% }7 ?" _% tregister_globals = Off . s( H8 \6 W( U0 D; H% A0 {$ N 当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 - W) m V8 Q7 _" \4 W$ Q7 H- o& q8 @: m8 D: F0 n& q (9) 打开magic_quotes_gpc来防止SQL注入 , D, n3 P) z2 Z7 J SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: ( c$ ?# ~$ @7 y4 D6 E2 e9 C# k5 z magic_quotes_gpc = Off 4 D* Q4 y$ b: z U9 f K' B$ ^$ U 这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: / J* E! S" K; q0 _' U" T- } magic_quotes_gpc = On / Q) w$ C5 n7 B, J P5 Z & e- r$ A! P1 K# Y' g8 X' ~! k (10) 错误信息控制 # r! ?2 ?7 Q, m+ i# W) B7 t" a 一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: - G8 P) G. X. w% \display_errors = Off " ?" ~5 m7 @& b+ Z5 W" K. x如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: . p* @* A' p& m* I, _6 z( Yerror_reporting = E_WARNING & E_ERROR 5 z( z: \* B% \5 G' S 当然,我还是建议关闭错误提示。 : T3 d X" s$ @ {) z, ]0 e5 }) X* g ) y! A' M6 @5 B' w" z: N" ?2 C1 J (11) 错误日志 # i$ a" t) x4 w% D; @; X- H& G 建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: $ q5 X' N! A" a# X: L. T& K$ W# h( Rlog_errors = On & y. S( c% c" m+ [0 X. o. \同时也要设置错误日志存放的目录,建议根apache的日志存在一起: 4 d/ P/ ^6 @, E) V! ]! perror_log = /usr/local/apache2/logs/php_error.log " V1 e' o$ I% X) S; n6 W4 G, Q 注意:给文件必须允许apache用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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