Drupal 基础安全实战

最近翻译了一篇老外写的全站SSL介绍,感觉水得一塌糊涂,恰好前一段时间被合作方的安全团队在安全方面骚扰很久,涉及的问题范围较广,也比较全面,这里做个总结,也给大家一个参考。

下面行文主要从 Issues List 里面提取,顺序上可能稍显跳跃,因为是工程案例,所以偏重于见招拆招的解决问题,而较少提供问题的剖析,不过尽量会提供引文供读者延伸阅读。

SSLv3 Enabled

Openssl对于ssl poodle问题的说明

Digital Ocean对这个问题的说明和对策

Apache Server的配置:

    SSLProtocol all -SSLv3 -SSLv2

Nginx Server的配置

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

检查方法:

    openssl s_client -connect [host_name]:[port_number] -ssl3

返回内容应有一行类似内容

    CONNECTED(00000003)
    55339:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

HTTPS访问

这个很简单,建议使用全站 HTTPS 的方案来做。

需要注意的是,自颁发的证书基本相当于是无效的。配置过程中,要注意证书链这个概念。

非常好的一篇数字证书入门:《数字证书原理》

提供两个检查 https 配置情况的在线工具:

http://www.networking4all.com/en/support/tools/site+check

https://www.sslshopper.com/ssl-checker.html

另外还可以利用 Security Kit 模块启用 HSTS。强制浏览器使用 HTTPS 通信。

Input Validation

在工期较紧,又包含大量自开发模块的项目中,经常会出现这种问题,缺乏对 Form 输入的基本验证。

Flood Control

Drupal对登陆行为自带了 Flood Control 用于防止暴力破解。但是这部分涉及的系统变量和 Ban List 都属于隐藏内容,无法直接操作,可以通过 Flood control模块对登陆行为进行控制。

fbip 模块据说更进一步的提供了对所有 Form 的 Flood Control,笔者目前还没有实测。

密码策略

可以通过 Password policy 模块设定密码的复杂度策略。

PHP 错误信息

为防止站点出错时,泄露服务器信息,可以在 admin/config/development/logging 下选择None来禁止错误信息的显示。

自动完成

多数时候,这一特性方便了用户,但在多个用户使用同一终端的情况下,有可能造成信息泄露,对于HTML5浏览器,可以写一个 form_alter,禁止指定或全部 Form 的自动完成:

function auto_complete_off_form_alter(&$form) {
    $form['#attributes']['autocomplete'] = 'off';
}

Click Jacking

Wooyun 的介绍文章

文中也写到 X-FRAME-OPTIONS这一 HTTP 头能够有效防御这一攻击

前文提到的 Security Kit 即可设置。

Trace Method

          HTTP/1.1(RFC2616)规范定义了HTTP TRACE方法,主要是用于客户端通过向Web服务器提交TRACE请求来进行测试或获得诊断信息。当Web服务器启用TRACE时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中HTTP头很可能包括Session Token、Cookies或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE请求可以通过客户浏览器脚本发起(如XMLHttpRequest),并可以通过DOM接口来访问,因此很容易被攻击者利用。

禁用的方法很简单:

Apache,启用Rewrite:

      RewriteEngine On
      RewriteCond %{REQUEST_METHOD} ^TRACE
      RewriteRule .* - [F]

Nginx已经禁止很久了。

检测方法

      telnet your_host
      Trying your_ip...
      Connected to your_host.
      Escape character is '^]'.
      TRACE / HTTP/1.0

查看返回内容是否 4xx 即可。

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关