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

Windows 2003 安全设置之PHP篇

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

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

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

×
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。: r. L- y! n% V5 r8 d 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。 ) F! z/ ^/ v) @- E8 s3 _7 k4 h! l* w6 K1 L1 Y0 E; N% ^ 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。 : p0 @; n/ K I7 j# a6 x B5 S 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。3 t$ O- T4 w* F 4、把magic_quotes_gpc设置成on,防止SQL注入。( ?3 _& A9 X- z+ K, I# s/ a 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。7 _4 e" h6 l, u! D1 L 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。 0 ~8 C6 f+ g. h# ~- F6 ~ 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启safe_mode吗? 7 G6 K; Z* A+ }. q# w: L. S* |, f 限制多了,速度自然慢 * S8 S; J1 a' u* D7 H" ?. M' R& V 可以关闭的,影响不大~ 1 J( I0 ^9 V9 j; a% Q% Y , O: r( E/ r; O& }# t3 l 以下设置不影响速度的,可以考虑~ ' b% a! p' ~* y" L; e @, V2 s, Q* L8 H2 v0 K1 `* }( g (6) 关闭危险函数 1 p" M R. N7 b$ Y/ F4 ]如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: & q# v# ^$ c U6 A disable_functions = system,passthru,exec,shell_exec,popen,phpinfo / s: a3 r' R2 |$ S2 O如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 1 M' W7 j( c0 u4 y" }( Z 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 & r* b* G1 H1 g: G6 Q& ?4 H- h以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 ' d# D9 o& i) V6 q6 A; ]2 A# x [: T3 x6 g/ k. Y4 x1 @$ v (7) 关闭PHP版本信息在http头中的泄漏 , O2 T/ {. [ |/ ^9 ?我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: ' P4 [2 B9 @- g. _, X6 \expose_php = Off - `* c+ }6 J1 S2 R( U- u" b3 M) n7 Z 比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 , s2 P1 d N. C5 ?. { $ q$ Y- E9 }0 E Y (8) 关闭注册全局变量 5 q+ b+ f( O" j: v! {在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: 3 k+ ~) r& ^9 \6 H( E- r$ }2 O) m register_globals = Off $ j: S, \( H) U7 I1 S. A, _) v/ r 当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 ! D0 J1 S; b8 B! R# U 4 c6 c; w2 T) U% V0 ?* b/ F (9) 打开magic_quotes_gpc来防止SQL注入 4 a3 R; E- U' HSQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: : G* y6 ?/ R% Y9 B; N; X I" Wmagic_quotes_gpc = Off ! Y8 c' O4 x1 F6 D: g这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: & ~- e' J O; L( Emagic_quotes_gpc = On & Q; N, o) W* f) b0 D% x% v- Z& C5 H: j. |% w6 _7 d (10) 错误信息控制 ) d' w' t2 w1 U, s+ } 一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: 0 Y; ?2 ]6 ?: X display_errors = Off 6 Z# M3 U4 C3 G/ [1 t1 ^7 ~如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: # E* u1 ?2 |7 W' j" ^3 perror_reporting = E_WARNING & E_ERROR 8 J8 u$ U% Z8 R$ q+ n4 h当然,我还是建议关闭错误提示。 % K* R$ J2 G, E7 b8 D; @ / P* ]4 Y6 G8 I8 z7 A' K" i(11) 错误日志 1 `( a2 A% E" N+ }4 K( v* O 建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: - N8 j+ f& S& x, k! Q log_errors = On . t- B# G8 a' o) ]7 t 同时也要设置错误日志存放的目录,建议根apache的日志存在一起: 6 x3 ?6 W; d, p* B- A error_log = /usr/local/apache2/logs/php_error.log 3 k0 R$ E3 W( n/ f* R: T 注意:给文件必须允许apache用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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