Help:Widget代码的安全性审查步骤
Widgets插件是由Sergey Chernyshev、Yaron Koren等人为MediaWiki开发的代码嵌入插件。由于是非官方开发,并且在2008年创建插件时MediaWiki程序并没有完备的XSS扫描模块。导致该插件极易引入XSS攻击。
XSS是什么?
“ | 跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。 |
” |
——zhwp:跨站脚本 |
XSS检查方法
通常有一些方式可以測試網站是否有正確處理特殊字符:
><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
"><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert (vulnerable)</script>
%3Cscript%3Ealert('XSS')%3C/script%3E
<script>alert('XSS')</script>
修改器
因为用户可能给widget的参数输入任何内容。需要对输入内容进行检查,并将可能的攻击代码进行转义。转义后的代码将会纯粹作为文字输出显示,而不是被误当作代码执行。
常见'escape'值
widgets使用php的一个常见模板引擎smarty,其中的变量修饰器'escape'可将输入代码进行转码。widget通过转码来避免XSS攻击生效。 (更多说明参见官网 https://www.smarty.net/docs/zh_CN/language.modifier.escape.tpl )
escape修饰器设定了 html, htmlall, url, urlpathinfo, quotes, hex, hexentity, javascript, mail, ISO-8859-1, UTF-8 等预制模式。对于萌娘百科来说,通常需要使用如下几个:
htmlall
- 会对所有输入字符进行转义。 应当在参数会被直接包含在html页面,或html标签中时使用。(默认应使用这个全转义,除非出错)url
- 会对【: / ? = & # 汉字】进行转义。当输入参数会被用作URL时使用。urlpathinfo
- 当输入参数为URL的一部分时使用,可以直接用上面的url修饰设置替代quotes
- 会对会对单引号进行转义把 ‘ 变成 \’。当输入参数被包含在单引号内时使用。html
- 它会对以下5个字符进行转义 & “ ‘ < > 。 应当在参数会被直接包含在html页面,或html标签中时使用。但实际使用中攻击者可以绕开这区区5个字符实现攻击,所以不应被使用。
常见validate值
Widgets 插件通过 PHP Data filtering 实现了validate
修改器。这个修改器会检测输入内容的类型是否匹配。常用于要求输入长宽高数字,或者url链接的参数。
widgets插件支持的validate模式有:
url
(FILTER_VALIDATE_URL)(检查是否是正确的url)int
(FILTER_VALIDATE_INT)(检查输入的是不是阿拉伯数字)boolean
(FILTER_VALIDATE_BOOLEAN)(检测【true】【flase】)float
(FILTER_VALIDATE_FLOAT)(检查浮点)email
(FILTER_VALIDATE_EMAIL)(检查邮箱地址格式)ip
(FILTER_VALIDATE_IP)(检查IP地址格式)
联用多个修改器
你可能会需要在widget里联用多个修改器,例如default
默认一个值0,并对输入的值进行检查是不是数字。 可以用管道符 | 来联用:
主人公的名字叫:<!--{$name|default:'小明'|escape:'htmlall'}-->
。
经过一番艰苦的战斗回到旅馆后,小明身边现在有<!--{$LoliCount|default:'0'|validate:int}-->
只猫耳萝莉围着他。
外链
- 该帮助条目参考了 https://www.mediawikiwidgets.org/Widget_reviewers 页面写成,但不是直接翻译内容。
|