天天看點

Mustache使用及其安全分析0x00 Mustache簡介0x01 Mustache模闆使用0x02 安全漏洞及防護

0x00 Mustache簡介

        Mustache是一個logic-less(輕邏輯)模闆解析引擎。起初是一個js模闆,用于展示和js分離,現已經擴充到PHP、Python、Per、C++、javal等多種程式設計語言中。

各環境下使用Mustcache的庫和demo:http://mustache.github.com/

        Mustcache可以被用于html檔案,配置檔案,源代碼等等很多場景,它的運作得益于擴充一些标簽在模闆檔案中,然後使用一個hash字典或者對象對其進行替換渲染。我們之是以稱之為“logic-less”是因為他摒棄了if else 以及for loop 這樣的語句,取而代之的是隻有标簽,有些标簽被替換成一個值,或者不作為,或者是一系列的值,比如數組或者一個清單。

        頁面上的内容是從背景擷取資料并渲染到頁面上時,我們就可以使用mustache模闆。

0x01 Mustache模闆使用

        安全漏洞産生于各種技術使用過程中,可通過Mustache各種使用方法發掘其中存在的安全問題,首先學習該技術的使用方法。

參考文獻:https://github.com/no1msd/mstch  http://web.jobbole.com/84906/

其使用步驟如下所述:

1、下載下傳mustache.js檔案

mustache的渲染需要依賴一個js檔案的實作,下載下傳位址為:https://github.com/janl/mustache.js.git

2、web頁面中引入mustache.js檔案

<script type="text/javascript" src="mustache.js"></script>
           

3、擷取或者建立mustache模闆及其資料源

資料源:

var data = {
    "msg": {
        "sex": " female ", 
        "age": " 22 ", 
        "hobit": " reading "
    }
  }
           

模闆:

<script id="tpl1" type="text/html">
	{{#msg}}sex:{{sex}}{{/msg}}
</script>
           

    4、渲染模闆并顯示

var tpl1 = document.getElementById('tpl1').innerHTML.trim();
document.write(Mustache.render(tpl1,data));
           

        Mustache技術說簡單點就是标簽的值替換。所有的用法在下述幫助手冊中給出:http://mustache.github.io/mustache.5.html

0x02 安全漏洞及防護

         經過簡單分析,在使用該技術過程中需要注意如下幾點:

一、模闆表達式XSS

漏洞示範

         當使用者輸入資料作為模闆資料源的value值時,會存在注入攻擊的現象。例如以下情況:

模闆:

   -{{{msg }}}-  或者 -{{&msg }}-
           

渲染資料:

var data = {"msg": " xiaohua”}
           

         假設msg對應的值為使用者輸入資料,然後送出并被存儲到伺服器中。在其他頁面使用render()渲染方法後HTML界面将顯示:

-xiaohua-

         然而當使用者輸入以下惡意資料給msg時,并且用戶端和伺服器均沒有任何操作,使得在此擷取資料源時data的形式如下所示:

var data = {"msg": " <script language=\"javascript\"> alert(\"hello\")<\/script> ”}

         頁面渲染後會執行惡意代碼:

Mustache使用及其安全分析0x00 Mustache簡介0x01 Mustache模闆使用0x02 安全漏洞及防護

輸入不當執行惡意代碼

        其實資料源中的value值隻要是HTML的元素都可用來渲染,例如:

Mustache使用及其安全分析0x00 Mustache簡介0x01 Mustache模闆使用0x02 安全漏洞及防護

        綜上所述,mustache模闆表達式沒有定義何種資料樣式是合法的,而是完全交由開發人員對資料的定義。使得很容易引起XSS。

使用注意事項

除非不使用該模闆技術,否則為了杜絕mustache的這種注入攻擊,需要做到如下:

1、盡可能使用{{templateName}}而不使用{{{templateName}}}和{{& msg }},{{templateName}}會将值作為字元串進行輸出,而{{{templateName}}}和{{& msg }}會解析HTML元素。若必須使用{{{templateName}}}則遵從3、4訓示。

2、避免使用使用者輸入資料用來渲染mustache模闆,否則遵從下條訓示。

3、不信任任何使用者輸入的資料,使用黑白名單進行過濾或驗證。

繼續閱讀