我有一個顯示我的文章的內容show
路線爲什麼我的視圖被標記爲XSS漏洞?
控制器:
def show
@article = Article.find(params[:id])
end
查看:
...
<li class="content"><%= @article.content.html_safe %></li>
...
當運行司閘員,它的標誌上面的潛在的跨站點腳本(XSS)漏洞
Unescaped model attribute near line 34: Article.find(params[:article_id]).content
我想弄清楚XSS究竟是什麼,是什麼讓這種脆弱?如果有人注入了一些惡意的文本或輸入到params[:id]
領域的途徑(例如/articles/BAD_INPUT
),那麼Article.find()
不會發現的文章,並引發錯誤
視圖渲染是,如果一個有效的Article
記錄被發現的唯一辦法,右?用戶還可以如何操縱它?
謝謝!
編輯:我一定要agains的情況下保護時沒有找到的文章,將引發一個錯誤,但我想這是更壞的設計,而不是一個安全漏洞
謝謝!出於好奇,爲什麼數據庫的值本身不受信任?我希望像'params'這樣直接來自用戶和表單的輸入是不可信的,但是大概這些輸入數據的數據經過了驗證,現在只是被檢索出來,對吧? – user2490003
@ user2490003:原因是因爲數據庫可能存儲原始用戶輸入。 Stack Overflow就是一個很好的例子 - 數據庫中會有'
好找到了答案後,一些挖掘。
它顯然與
html_safe
和raw
(這只是html_safe
的別名)有關。這個問題是特定於Brakeman和概述here該線程表示問題已得到承認和解決,但它仍然不適用於我使用最新版本。
我解決了它如下
控制器:
查看:
本質上講,我們正在紀念文章內容
html_safe
(使用別名raw()
),所以它不會導致問題e視圖。梅西耶比我想的,但它的工作原理
來源
2016-02-17 20:19:27 user2490003
如果你在你的模型存儲的HTML和你on Rails的4.2 ++,你可以考慮使用
sanitize
助手(docs)。例如,可以允許特定的標籤(例如鏈接):
的docs有很多很好的例子。
這裏的another write-up如果你想了解更多的信息。
來源
2016-11-15 16:56:19 blimmer