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

Windows 2003 安全设置之PHP篇

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

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

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

×
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。 w4 ?1 y9 E2 r 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。/ c0 @) u7 X4 b" T+ D - ?, w. ?, n9 z 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。 % K# C+ V. x' }' |" h 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。 d; D+ x0 L5 m6 g/ l) m1 c 4、把magic_quotes_gpc设置成on,防止SQL注入。( k% ^* Z6 C+ t; W4 n 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。5 t6 f0 z0 g L7 H, |& W 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。* P2 o0 p7 q0 J# ?/ z7 c, T/ L 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启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用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 02:19

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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