多数大学生出来选择的工作和专业无关
首页 > 专业知识

Windows下PHP+MySQL+IIS安全平台

时间:2017-08-02 17:41:06 [来源]:郑州PHP培训学校

   Windows下PHP+MySQL+IIS安全平台

  前面介绍了IIS+MySQL+PHP的基本配置过程和Windows的基本权限设置。这一部分我们需要讨论php的安全配置还有Web目录的安全配置,当然也必须有IIS的变态安全配置了。我这里先废话几句。
  我们最终的目标是Web站点只运行php,不支持asp不支持asp.net,让特定的目录或者子网站不能执行php脚本,例如图片目录,我们对它设置成不能运行php,这样就算您的网站被“黑客”登录了后台,能上传文件。但是最终他也不能执行webshell。
  就算拿到了webshell,他也不能读目录或者文件,不能执行命令。换句大话就是说强大的webshell在黑客手上没有任何的利用价值,让黑客最终直接抓狂而死。呵呵!其实做到这一点不是非常的难,跟随我的脚步来吧。学完本文章你就能独立的完成这样的变态的服务器配置了。
  一、php.ini文件变态配置
  我们为什么把php.ini放在最前面写呢,因为我们的Web网站是php的,所以很多默认的选项是不安全的。给黑客留下了非常多的可利用机会,所以第一步我们必须要把php.ini设置的变态些,这样就能阻止一般脚本黑客的攻击了。
  我们首先来了解一些php.ini的基本概念性。空白字符和以分号开始的行被简单地忽略。设置指令的格式如下:directive = value 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。值(value)可以是:
  1. 用引号界定的字符串(如:"foo")
  2. 一个数字(整数或浮点数,如:0,1,34,-1,33.55)
  3. 一个PHP常量(如:E_ALL,M_PI)
  4. 一个INI常量(On,Off,none)
  5. 一个表达式(如:E_ALL & ~E_NOTICE)
  还有另外一个是设置布尔值,1为On就是开启,0为Off就是关闭。php.ini分了很多部分,例如:模块部分,php全局配置,数据库配置,等等。如图1所示是一个基本的php.ini的例子。了解了基本的概念以后我们就可以开始变态配置之旅。
  打造Windows下PHP+MySQL+IIS安全平台
  图1
  第一个重要的参数是register_globals. 这个配置影响到php如何接收传递过来的参数,说白了register_globals的意思就是注册为全局变量,所以当该参数为值On的时候,传递过来的值会被直接的注册为全局变量直接使用,而当该参数值为Off的时候,我们需要到从特定的数组里去得到它。从www.milw0rm.com很多的php 漏洞来看一大部分是因为Register_Globals为On的时候被利用的,所以强烈推荐将这个参数修改成Off,php目前的最高版中此参数都是默认是Off的,没啥说的了,如果你用的版本比较老的话一定要修改这里。
  第二个重要的参数是magic_quotes_gpc。如果你把magic_quotes_gpc设置成了Off,那么php就不会对4种字符 ' (单引号), " (双引号), \ (反斜线) 和空字符进行转义,那这样的话就会造成服务器可能会被非法注入的可能。但是如果你把Magic_quotes_gpc设置成On的话,php就会给$_POST,$_GET,$_COOKIE提交的变量中如果有上面四种字符的话就会加上\反斜扛.这样就会大大地提高php的安全性。强烈推荐将 Magic_quotes_gpc设置为On。
  第三个比较重要的是display_errors。为什么说这个参数重要呢,因为没有不会犯错误的开发者,php的 display_errors参数就是帮助开发者定位和确定这些错误的。可是如果php提供的这些信息被黑客了解到的话,这就不妙了。如图2所示为某国库的网站,因为对display_errors没有进行设置,导致web目录泄露。这对于黑客来说可是非常重要的信息,因为很多时候的渗透都需要知道web 目录,例如webshell的写入等等。所以我们强烈推荐大家把这个参数设置成Off。
  打造Windows下PHP+MySQL+IIS安全平台(2)
  图2
  第四个重要的参数就是safe_mode,就是我们常说的安全模式。php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system()等函数,同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的访问,比如/etc/passwd,但是默认的 php.ini是没有打开安全模式的,我们把它打开。safe_mode = on。
  第五个参数是open_basedir,使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了webshell的危害,我们一般可以设置为只能访问网站目录(假设网站目录为 E:\test):open_basedir = E:\test 第六个参数是disable_functions,使用disable_functions可以限制一些对于系统来说威胁很大的函数。
  例如,我们在第一部分中看到的有phpinfo()函数的网页中可以看到关于php的环境变量等。还有可以利用system,exec等函数来执行系统命令等等。这里我们推荐过滤的函数如下。disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server。大家如果对某个函数不了解的话,可以google搜索得到函数的作用,然后来决定您自己的服务器是否禁止掉。
  第七个参数是Com组件。Windows平台下的PHP脚本平台存在一个安全漏洞,使得PHP设置即使在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统组件来执行任意命令。漏洞出现的原因是由于在安全模式下的PHP平台虽然system();pathru()函数被禁止,但是com.allow_dcom的设置依旧是为true。以至于攻击者可以使用COM()函数创建系统组件对象来运行系统命令。
  如果是默认的Apache设置或者Web服务器以Loacalsystem权限或Administrators权限运行,攻击者可以使用这个漏洞来提升权限。所以我们必须要关闭掉com.allow_dcom这个参数默认是True,我们需要吧这个参数修改成 com.allow_dcom=false。第八个参数是expose_php。这个参数决定是否暴露 PHP 被安装在服务器上。如图3所示,如果这个参数设置为On的话就会把php的版本等泄露出来了。我们的推荐值是Off。
  打造Windows下PHP+MySQL+IIS安全平台(2)
  图3
  基本上的参数我们就介绍完了,当然php.ini还需要配置,大部分设置跟安全是没有关系的,很大一部分都跟PHP运行的效果(例如优化)等有关系,如果大家有兴趣的话可以自己参考一下php的官方手册来具体了解一下。注意:修改完php.ini以后,必须重新启动IIS,不然你设置的内容不会即时生效。
  二、IIS变态配置
  我们配置完了php.ini,虽然已经算是相当安全了。但是毕竟最重要的设置还是在IIS上面,IIS可以限制某些用户的登录,同时也可以为数据增加SSL(安全套接层)来增强数据在传输过程中的安全性。可以利用IIS限制某些应用程序例如php的执行规则,例如,让php只能运行在指定的目录中,其他的目录是不能执行php的。下面举个例子就好理解了,例如:www.sina.com这个网站,大家都知道的,这个是新浪的。

上一篇:ThinkPHP框架Model分析研究

下一篇:国外主流PHP框架比较分析