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

Windows 2003 安全设置之PHP篇

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

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

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

×
今天来说说windows 2003服务器上的PHP的安全问题。一般来说,Windows的服务器上不会只运行asp或者aspx程序,PHP的程序很多,所以一般都有在服务器上装PHP,既然有装,就要对PHP进行安全设置。 6 L6 y" g$ Z7 P+ ? 1、把safe_mode=off 改成 safe_mode=on,使php运行于安全模式。运行于安全模式的PHP能禁止一些系统命令的执行,如果你要执行这些系统命令,可以在 "safe_mode_exec_dir =" 设置,如果你要D盘的wwwroot可以执行系统命令函数,那么就把这个设置为"safe_mode_exec_dir = D:\wwwroot" 。 8 A: Q0 s G9 Q6 G9 Z, y$ t4 z( v 2、找到disable_functions这行,改成"disable_functions = phpinfo,passthru,exec,shell_exec,system,这样设置就是不允许在PHP中执行这些函数。2 R6 A( D5 J5 ^. |) B 3、把register_globals设置成off,就是关闭全局变量的注册。因为我们通过get或者post提交的变量都会自动注册成全局变量,用户可以访问,这就对服务器造成了不安全。% }5 H: ^) i' ]! q: T+ W 4、把magic_quotes_gpc设置成on,防止SQL注入。: q, e8 Y* B1 P' Q) Y 5、把open_basedir前面的分号去掉,设置成你的网站的程序的地址。使PHP不能操作该目录之外的文件。 $ M; T/ ]9 t# F 6、如果不想让PHP运行时候的出错信息在浏览器中显示,可以设置display_errors = Off。 a/ Y! J9 m* F 如此设置之后,PHP的安全就不错了。
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-10-21 16:01:33 | 显示全部楼层
你是说开启safe_mode吗? - U$ N8 }/ n. q% i4 P+ t限制多了,速度自然慢 & x5 ], F3 P7 u% A+ Q可以关闭的,影响不大~ 7 Q( p' f' V: V ) b- \8 [$ a- W: G& R! ` o" m 以下设置不影响速度的,可以考虑~ : n# M+ k; X. Q- |% [% u4 [* h6 ~ - }' j" C, P, z" t( j# \(6) 关闭危险函数 ( I6 c0 P; i: f1 X) `' V6 f$ X6 c8 c如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们: 8 }6 o' V y, m% |disable_functions = system,passthru,exec,shell_exec,popen,phpinfo $ W: g1 B% \0 m6 @如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 3 Q% j5 i' Q+ I, U) o8 E% ]0 F+ Ddisable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown - ?1 ^3 B' Y( Y [$ k3 Z 以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。 " h, v# P/ q* U) S ! L3 X7 S4 y" x9 U* Y* q (7) 关闭PHP版本信息在http头中的泄漏 * z d( `, m4 K9 z, R 我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中: # s# m3 u0 C( u: {0 \( ]$ l9 wexpose_php = Off 4 m8 X# V1 ^* I' A2 `比如黑客在 telnet www.aosea.com 80 的时候,那么将无法看到PHP的信息。 . M0 e; S" f; Z3 j, R2 ~- j4 K9 s- s+ m6 y (8) 关闭注册全局变量 " \4 H3 I/ C& r N" b* C 在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: ( n1 J j5 ]& _1 K, i& L register_globals = Off * K- K6 b$ x7 f7 t* ?* r当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET['var']来进行获取,这个php程序员要注意。 - \8 F& T! j1 A; h2 t$ P" ~; R& d' y' y# U9 d9 y+ c* l" z* \: N* M6 i (9) 打开magic_quotes_gpc来防止SQL注入 6 T2 |1 k n2 ASQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置: * C4 \' x9 V7 a# U1 T) K, m" hmagic_quotes_gpc = Off 2 C$ n( ^) {, c8 w& q$ ]这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,这对防止sql注射有重大作用。所以我们推荐设置为: 3 V& s1 M+ T$ y0 d P magic_quotes_gpc = On $ c6 q5 X# ^# l Z+ {; d* ] }" ~- [(10) 错误信息控制 1 m$ r7 N% _0 W% e& C& ~; L 一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示: 7 Q% F1 P" }8 f+ ~; z* p: ~& { display_errors = Off ; Z9 x2 F, X) K0 {如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: , t' c* G! V% werror_reporting = E_WARNING & E_ERROR $ [" h; y+ \8 ` 当然,我还是建议关闭错误提示。 6 s* ~& F o$ ~5 I 7 E, l1 e4 q8 A/ f' @ (11) 错误日志 . J6 M/ ]( ?; z( a8 D8 ?建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因: 7 B; x# b2 F# m7 B log_errors = On . {3 Z7 I; t/ j8 N3 y同时也要设置错误日志存放的目录,建议根apache的日志存在一起: # N4 d) e' G) P6 Herror_log = /usr/local/apache2/logs/php_error.log * T" Z4 B* [. h- m7 | 注意:给文件必须允许apache用户的和组具有写的权限。
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-4-4 06:27

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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