這些天學習安全:)
我需要允許用戶在表單中輸入文本並允許他們使用一些HTML標記:粗體,斜體,列表等,並防止它們出現添加一些危險的JavaScript代碼。
所以我用this whitelist implementation消毒HTML。
但我仍然對如何以正確的方式保存和顯示感到困惑。
所以在這裏我所做的:
型號:如何將HTML保存到數據庫並正確檢索
public class Post
{
[AllowHtml]
public string Data { get; set; }
}
控制器:
[HttpPost, ActionName("Create")]
[ValidateAntiForgeryToken]
public ActionResult Create(Post model)
{
// Decode model.Data as it is Encoded after post
string decodedString = HttpUtility.HtmlDecode(model.Data);
// Clean HTML
string sanitizedHtmlText = HtmlUtility.SanitizeHtml(decodedString);
string encoded = HttpUtility.HtmlEncode(sanitizedHtmlText);
查看:
@using (Html.BeginForm("Create", "Home", FormMethod.Post)) {
@Html.AntiForgeryToken()
@Html.TextAreaFor(a=>a.Data)
<input type="submit" value="submit" />
}
所以,當我張貼的形式我看到:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p><img src="http://metro-portal.hr/img/repository/2010/06/medium/hijena_shutter.jpg" /></p>
Becaouse的<p><
我認爲我需要它首先解碼:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p><img src="http://metro-portal.hr/img/repository/2010/06/medium/hijena_shutter.jpg" /></p>
然後我清理它針對白名單,我得到消毒HTML:
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p>
1)我應該保存它像這樣在數據庫?
2)或者我需要編碼這個結果,然後將其保存到數據庫(編碼波紋管)?
<p>Simple <em><strong>whitelist</strong> </em>test:</p>
<ul>
<li>t1</li>
<li>t2</li>
</ul>
<p>Image:</p>
<p>
在這裏,我很困惑,如果我把它放在這樣的觀點:
@Model.Data
我得到這個的觀點:
<p>Simple <em><strong>whitelist</strong> </em>test:</p> <ul> <li>t1</li> <li>t2</li> </ul> <p>Image:</p> <p>
或
<p>Simple <em><strong>whitelist</strong> </em>test:</p> <ul> <li>t1</li> <li>t2</li> </ul> <p>Image:</p> <p>
那麼怎麼做才能正確顯示這個HTML(粗體,列表)等等)?
啊哈......清晰:)所以後門柱基本上我可以將此保存到數據庫'
這是安全文本和危險如下> <腳本> alert('attack'); < /腳本>
'只是在視圖上使用SanitizeHtml。我認爲我不能在數據庫中保存html標籤。我得到的這個值是從視圖到創建方法的模型(它增加了&qt,lt等)。 – 1110是的,你的理解是正確的。將原始HTML存儲在數據庫中沒有任何問題。 –
謝謝Darin :) – 1110