阅读时间5分钟 (1091字)

确保一切安全 - Joomla安全团队冲刺,科隆,2018年5月

Secure all the things - Joomla Security Team Sprint, Cologne, May 2018

Joomla安全团队冲刺,科隆,2018年5月。我想我们都会同意,提供尽可能安全的软件是Joomla的关键优先事项之一,因为这在使用Joomla的用户体验中起着至关重要的作用——一个被黑客攻击的用户,是一个非常不高兴的用户。

Joomla一直通过运行专门的开发团队,即Joomla安全打击队(JSST)来认真对待安全问题。这个团队目前由14名成员组成,有三个主要任务

  1. 处理安全报告:对报告的问题进行分类,开发并测试补丁,与报告者和其他团队沟通
  2. 通过推进新的安全技术来提高Joomla的架构安全性
  3. 积极查找代码库中的问题:通过审查现有或新的代码部分,我们试图不仅依赖于外部报告,还要发挥主动作用

2018年5月,该团队在科隆举办了首次面对面代码冲刺,紧随国际J&Beyond会议之后。除了在共度时光时自然而然发生的团队建设之外,我们还专门解决了3个领域的问题

  1. 准备好的语句:在SQL注入问题方面,Joomla有一个相当不幸的记录,这主要是由于数据库API没有提供使用所谓的“准备好的语句”这种成熟技术的可能性。随着Joomla 4的临近,我们想确保准备好的语句最终进入核心。
  2. 内容安全策略:除了SQLI之外,另一个主要问题是所谓的跨站脚本问题(XSS)。这些问题主要是由于Joomla的设计造成的,使用纯PHP作为模板引擎,因此依赖于开发者在输出到网站标记之前积极保护每个用户提供的数据。内容安全策略(CSP)是大幅减少潜在XSS问题影响的好方法
  3. 处理最近报告的问题和之前已知但难以修复的错误

预定义语句

SQL注入允许攻击者将自己的数据库命令传递到SQL查询中,从而修改返回的结果(例如,返回用户密码散列而不是文章),或者更糟的是,修改写入数据库的内容,例如覆盖超级管理员的密码。

在IT界,有一个非常著名和成熟的防止此类问题的技术,即所谓的预定义语句。基本思想相当简单:不是在包含实际命令和其中使用的内容的大查询上构建,而是将查询和内容分开。因此,数据库引擎(即MySQL)本身可以对该内容应用任何所需的过滤技术,保证攻击者不能修改周围的命令。实际上,这也意味着在数据库服务器上进行了多次调用,将查询和参数分开传输,实际的解析和执行发生在引擎内部,而不是PHP中。

迄今为止,在Joomla中使用预定义语句还不可能,主要有两个原因

  1. 我们使用的是不支持预定义语句的mysql PHP驱动程序
  2. JDatabase API没有(或不一致地)实现预定义语句

为了改变这种情况,Michael Babker在框架的数据库包中做了大量工作,将无名称参数语法引入了Joomla 4中使用的所有驱动程序。在我们的冲刺期间,我们添加了一个映射层,以便也能够使用mysqli驱动程序中的命名参数,从而在所有驱动程序中一致地支持更易于使用的命名参数。此外,我们还测试了现有的数据库相关PR,并开始将现有文档中的查询转换为预定义语句。

内容安全策略

有效地解决Joomla中的XSS问题相当复杂。Joomla使用PHP作为它的模板引擎,它简单且具有很多优点,但有一个很大的缺点:PHP默认不转义输出,因此完全依赖于开发者根据需要转义(并因此确保)输出。由于我们在成千上万的地方生成输出,而所有这些代码都是人类编写的,因此开发者忘记添加转义是自然而然的,从而导致XSS问题。

为了克服这个设计问题,JSST希望Joomla成为第一个默认启用默认内容安全策略的主要Web应用程序。内容安全策略(CSP)是一个标准,允许Web应用程序(如Joomla)告诉浏览器哪些资产(JavaScript、Iframe、字体、样式等)可以在特定的网页上使用 - 如果资源不包含在白名单中,它将被浏览器自动阻止,从而防止例如执行恶意脚本。

为了生成提到的白名单,我们扩展了核心,使其能够自动将使用服务器端JDocument API添加的资产包含到该列表中。因此,如果您作为开发者按照预期使用核心API,您的资产将自动考虑在CSP中,使我们能够在Joomla 4中默认拒绝任何其他(可能是恶意)脚本,向更安全站点迈出了巨大的一步。

除此之外,JSST还找到了一种创新的方法来排查和修复现实网站中可能出现的与CSP相关的潜在问题:我们想通过CSP的报告功能和专门设计的核心组件来实现一个“修复模式”(仍是一个工作标题),通过启用修复模式并以管理员身份浏览损坏的子页面,可以自动将受阻塞的资源添加到白名单中。这是一种极为友好的修复此类问题的方法,并且简化了普通用户对这个标准的复杂性。

解决开放问题清单

在冲刺前几周,团队报告了多个非关键问题,这些问题在冲刺期间得到了修复和测试,并将随即将来版本的Joomla发布。

JSST - Joomla最强大的防线

在3天的冲刺期间,团队极具动力,尽可能地解决尽可能多的问题。我已经参加了多次冲刺,但很少体验到如此集中的氛围。我几乎不得不强迫人们停下来吃饭或仅仅放松5分钟,这明显显示出大家对让Joomla比以往任何时候都更安全的极大热情。

我为能与这个伟大的团队一起工作而感到非常自豪和感激 —— 而作为Joomla用户,您也可以确信您的网站安全处于非常可靠的手中!

在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能并不代表Joomla项目的官方立场

0
五月JUG回顾
 

评论

已经注册? 在此登录
尚无评论。成为第一个发表评论的人

通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务