Drupal 基础安全实战

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

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

SSLv3 Enabled

Openssl对于ssl poodle问题的说明

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

Apache Server的配置:

    SSLProtocol all -SSLv3 -SSLv2

Nginx Server的配置

Drupal静态缓存

Drupal的伸缩性是存在的,而且非常强大。当我们问别人对Drupal的看法时候,多数时间得到的答案是:据说那东西很慢。在我的工作中见到过很多性能低下的Drupal站点,缓存是其中的重要原因。即使是基础的Drupal安装,其中也包含了一套针对数据表的多层缓存,不幸的是,这一缓存体系很容易被开发者破坏。

阻碍缓存的最大原因可能就是在自定义模块中错过了利用缓存提升性能的机会。把计算后的结果保存在PHP变量中,接下来的调用过程可能会得到成百上千倍的性能提升。要使用这一技巧只需要很小成本:如果一个结果已经得出,就返回这一结果;否则,运算得到结果之后,首先保存结果,然后才返回。

Drupal SQL注入漏洞后的一周——黑客教了我们什么?

在10月15日,黑客们忙着跟进一个问题:如何利用Drupal 7的SA-CORE-2014--005漏洞进行SQL注入。一个星期过去了,攻击者们仍然在持续忙碌。Moshe Weizman发文解释了我们如何在这一缺陷暴露的情况下保护客户的网站。在本文中,我们会看看近期对Acquia Cloud中针对SQL注入缺陷的攻击的来龙去脉。

本文的数据基于Acquia Cloud上托管的几万个网站中产出的大量日志,并经过了内部工具的整理和分析。所有本文中提及的时间都是美国东部标准时间。我们目前认为Acquia Cloud中的站点尚未被击破,所以我们只会描述一些入侵的尝试,不过外边的Drupal站点来说,运气可能就没那么好了。如果在阅读本文时你还没有对你的站点进行修补,也许下一分钟你的站点就已经被侵入了。

模式1:docroot中的后门

攻击次数:7785

第八部 热点问答

Tags: 

我为什么需要关注Drupal 8?

起初Drupal是为开发者设计的,在过去的日子里,Drupal提供了一系列的API,让用户能够利用代码来构建网站,这其中包括内容录入Form、管理页面以及侧边栏Block等。在后期的版本尤其是Drupal 7中,进行了一些为非技术用户的倾斜,为基础任务提供了用户界面(安装、数据建模、信息架构以及着陆页等)。现在多数Drupal站点都会安装一些第三方模块例如可视化编辑器,Views等等。在Drupal核心和第三方模块的支持下,Drupal开始为一部分最大规模的重要网站提供支撑。

第七部 代码的变化

Tags: 

Proudly Found Elsewhere(这一标题我想翻译成他山之石)

"非我首创综合症"的反义词,代表了Drupal核心开发者的思维方式的转变——尝试找到最好的工具并集成到软件(Drupal)中去,而不是构造Drupal专属的,仅对Drupal用户有益的定制化技术。

Security Kit模块

该模块为Drupal提供了大量的安全加固选项,能降低Web应用被攻击的风险。

跨域脚本

通过IE和Firefox的X-Content-Security-Policy、Chrome和Safari的X-WebKit-CSP以及Content-Security-Policy(官方名称)的HTTP响应头,来实现内容安全策略。其中包含配置页面,并且对违反CSP的访问记录到Watchdog。

Internet Explorer/Apple Safari/Google Chrome提供了内置的XSS过滤功能,利用XSS-Protection这一HTTP响应头来进行控制浏览器的这些功能。

修复Drupal 6的上传问题,Drupal 7的上传功能合并到了FileField中,所有D7版本没有这一选项。

利用Libraries API向Drupal项目中添加JS库

作为一个前端开发者,我经常需要为了前端的一些需求向项目中加入JavaScript库。在Drupal中,有很多种方式来完成这一任务,最近我开始注意到一个模块:Libraries API,它为Drupal开发者提供了一个稳定的方法来添加各种库。

一个Library是一组代码,通常是CSS和JS,有时候也会是一组PHP,或者一些其他什么东西。一般来说,这些库并不是为Drupal设计的。

过去,我直接把JS库加入到我的主题之中,接下来使用drupal_add_js()把JS加入到页面。这意味着这个库同主题被绑定在一起。如果我想要在模块中使用这个库,我必须要知道这个主题的名字——用drupal_get_path()。这很明显是个混蛋办法,他基本上断绝了模块化和代码复用的可能性。

另一个添加JS库的方法就是使用模块进行加载。这种方法的不足在于,JS库常需要通过Drupal UI来配置,配置能力有时会影响库的能力,同步更新也不容易保证。在多数情况下,这种方式可以使用Libraries API来实现。

如何用Drush Make完成日常任务

众所周知,Drupal Make在Drupal发行版的创建过程中具有重要作用,不过他对从来没有接触过发行版的人来说同样很有用,一个很好的例子就是《applying patches like a boss》

本文中我会展示在日常工作中我如何实用Drush Make来达成一些自动化目的,同时帮助我发现一些有趣的Drupal窍门。

Drush Make命令


Drush Make内置两个命令:

  1. make:把".makefile"转化为Drupal代码。

  2. make-generate:从当前Drupal站生成".makefile"。

Drupal 7 - Hook执行顺序

Tags: 

没有什么文档来说明这个事情,在阅读"module_implements"代码的过程中,我获得了变更Hook执行顺序的灵感。

下面是module_implements中的代码片段

// Allow modules to change the weight of specific implementations but avoid
// an infinite loop.
if ($hook != 'module_implements_alter') {
drupal_alter('module_implements', $implementations[$hook], $hook);
}

所以只要简单的实现一下"module_implements_alter",在代码中对Module列表进行重新排序,也就改变了Hook的执行顺序。

下面是示例代码:

页面