2016-07-18 50 views
0

我正在從用戶輸入,然後添加了對用戶提到的鏈接,然後通過同樣的模板使可點擊的鏈接,同時推動數據到模板

輸入:你好@ds添加鏈接後
字符串 -

"@<a class="tweet-url username" href="/user/ds" data-screen-name="ds" rel="nofollow">ds</a>" 

傳遞。味精上面的字符串(使用golang模板):

 <div class="panel-body" > 
      <p > {{.Msg}} </p> 
    </div> 

預期的結果是:你好@ds(以及點擊在@ds上的能夠鏈接) 但是獲取文本格式的所有內容(與輸入相同)。

@<a class="tweet-url username" href="/user/ds" data-screen-name="ds" rel="nofollow">ds</a> 

我錯過了什麼?


得到了更好的解決方案。首先,我對輸入做htmlEscape,然後將其存儲在數據庫中,然後呈現添加鏈接,然後使用document.write(string)函數。有了這個我不必更改模板,我不必擔心XSS附加。另外我也避免在我的數據庫中使用XSS腳本。 -

回答

2

嘗試在template.HTML中包裝字符串(Msg)以禁用HTML /模板執行的轉義。

實施例從the docs

模板

Hello, {{.}}! 

可以與

tmpl.Execute(out, template.HTML(`<b>World</b>`)) 

被調用來產生

Hello, <b>World</b>! 

代替

Hello, &lt;b&gt;World&lt;b&gt;! 
將已經產生,如果{{}} 是一個普通字符串

請注意,您應該非常小心地執行此操作......請確保您信任您要包裝的字符串template.HTML。這是打開XSS攻擊自己的一個簡單方法。

+0

謝謝了。但是,如何在實現相同目標的同時避免XSS攻擊。 Twitter或Facebook和其他網站做什麼?他們也可以將部分推文和評論點擊。 –