常见漏洞
跨站脚本/XSS
跨站脚本问题是 Joomla 扩展生态系统中最常见的问题。
一个简单的例子:假设一个 Joomla 评论扩展允许用户使用主题和文本评论文章。现在假设评论的以下输出模板
<div class="comment">
<h3><?php echo $comment->subject; ?></h3>
<?php echo $comment->text; ?>
</div>
看起来很简单,对吧?但是现在假设用户没有使用“我爱你的网站”作为评论主题,而是使用了<script>executeEvilJs()</script>
。使用上面给出的输出模板,用户提供的 JS 将作为可执行的 HTML 标签输出,并且恶意代码将在访问显示该评论的网站的每个用户的浏览器中执行 - 这是一种跨站脚本漏洞。
预防
过滤/验证用户输入
在上面的示例中,提供的主题应进行过滤和/或验证,以仅允许所需的字符 - 并且它应该不允许创建 HTML 标签所需的字符,即<
和>
字符。如果用户输入可以包含 HTML 标记,则必须过滤标记本身以确保它仅包含安全标记。有关更多信息,请参阅关于输入处理的章节。
转义输出
除非特别需要用户生成的标记(例如,因为用户可以使用 WYSIWYG 编辑器),否则强烈建议转义每个用户提供的片段内容。转义通过用 HTML 实体替换控制字符(如<
),例如<
,将 HTML 标记转换为纯文本。
要在 Joomla 中转义用户内容,请在组件视图中输出内容时使用echo $this->escape($evilString)
方法,或在组件视图外部使用echo htmlspecialchars($evilString, ENT_QUOTES, 'UTF-8')
。
SQL 注入/SQLi
SQL 注入攻击是一种漏洞,攻击者可以通过注入用户控制的内容来操纵 SQL 查询。
在关于安全数据库查询的章节中了解有关此攻击场景和预防的更多信息。
不受限制的文件上传
将用户提供文件上传到 Web 服务器是一项潜在的危险任务,因为它同时暴露了多个攻击媒介
- 通过上传危险的文件类型(例如 PHP 文件),攻击者可能能够执行代码
- 攻击者可能能够控制存储路径,从而在不应该允许的目录中存储文件
- 通过上传大文件,攻击者可能会很快填满 Web 空间,从而导致拒绝服务
因此,必须非常小心地实施文件上传。检查Joomla\CMS\Helper\MediaHelper
类的canUpload
方法,它将帮助您完成此操作。
跨站请求伪造/CSRF
CSRF 是一种攻击类型,其中外部攻击者控制的网站上的 HTML 表单用于对目标网站进行攻击。
预防
在本手册的CSRF 章节中了解更多信息。