Web服务器安全,考虑的是应用布署时的运行环境安全。这个运行环境包括Web Server、脚本语言解释器、中间件等软件,这些软件所提供的一些配置参数,也可以起到安全保护的作用。

Web Server的安全我们关注两点:一是Web Server本身是否安全;二是Web Server是否提供了可使用的安全功能。

Apache安全

检查Apache的Module安装情况,根据“最小权限原则”,应该尽可能地减少不必要的Module,对于要使用的Module,则检查其对应版本是否存在已知的安全漏洞。

指定Apache进程以单独的用户身份运行,使用高权限身份运行Apache会带来两个可怕的结果:

  1. 当黑客入侵Web成功时,将直接获得一个高权限(比如root或admin)的shell;
  2. 应用程序本身将具备较高权限,当出现bug时,可能会带来较高风险,比如删除本地重要文件、杀死进程等不可预知的结果。

Nginx安全

Nginx需要注意软件本身的安全,及时升级软件版本。

jBoss远程命令执行

jBoss是J2EE环境中一个流行的Web容器,但是jBoss在默认安装时提供的一些功能却不太安全,如果配置不得当,则可能直接造成远程命令执行。

由于jBoss在默认安装时会有一个管理后台,叫做JMX-Console,它提供给管理员一些强大的功能,其中包括配置MBeans,这同样也会为黑客们打开方便之门。默认安装时访问JMX-Console是没有任何认证的。因此出于安全防御的目的,在加固时,需要删除JMX-Console后台,事实上,jBoss的使用完全可以不依赖它。如果出于业务需要不得不使用JMX-Console,则应该使用一个强壮的密码,并且运行JMX-Console的端口不应该面向整个Internet开放。

Tomcat远程命令执行

Apache Tomcat与jBoss一样,默认也会运行在8080端口,它提供的Tomcat Manager的作用与JMX-Console类似,管理员也可以在Tomcat Manager中部署war包。

由于攻击者可以通过暴力破解等方式获取后台的访问权限,因此虽然Tomcat后台有密码认证,还是建议删除这一后台。

HTTP Parameter Pollution

通过GET或POST向服务器发起请求时,提交两个相同的参数,比如:

在某些服务器环境中,会只取第一个参数;而在另外一些环境中,比如.net环境中,则会变成: