【问题标题】:making links clickable while pushing the data into templates在将数据推送到模板时使链接可点击
【发布时间】:2016-07-19 01:49:53
【问题描述】:

我从用户那里获取输入,然后为提到的用户添加链接,然后在模板中传递相同的链接

输入:你好@ds
添加链接后的字符串 -

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

在 .Msg 中传递上述字符串(使用 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,然后将其存储在 db 中,然后在呈现添加链接的同时使用 document.write(string) 函数。有了这个,我不必更改模板,也不必担心 XSS 附加。此外,我还避免在我的数据库中使用 XSS 脚本。 ——

【问题讨论】:

    标签: javascript html go


    【解决方案1】:

    尝试将您的字符串 (Msg) 包装在 template.HTML 中以禁用 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 攻击的简单方法。

    【讨论】:

    • 谢谢,知道了。但是,如何在实现相同目标的同时避免 XSS 攻击。 twitter 或 facebook 和其他网站是做什么的?他们还使部分推文和 cmets 可点击。
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多