幫助: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 頁面寫成,但不是直接翻譯內容。
|