2

我正在使用Asp.NET MVC 3和EF 4.1與SQL Azure。我有linq表達式以及存儲過程。允許所有特殊字符並防止SQL注入/ XSS

現在,我需要允許輸入所有特殊字符,如"';&<>/等,並將其保存在數據庫中。但是,渲染時,它不應該呈現爲HTML(即,應該呈現爲文本)。我該如何防止SQL注入和XSS攻擊?

我擔心的是當我們在@Html.TextBoxFor@Html.EditorFor或標籤中顯示? 我不想妥協輸入的字符類型。請提出如何解決這個問題?

+1

你有一個開發工作站/數據庫,你可以嘗試一些這些東西? Afaik,因爲您使用的是EF,除了不使用EF *的地方(或者您沒有使用SQL參數或其他地方),沒有理由擔心sql注入。例如,你的任何存儲過程是否生成並執行任何sql?檢查他們。同樣,*我認爲*編輯器和標籤的內容通常是html編碼的,這意味着當頁面被解釋爲html時,內容*將被渲染爲文本*。不過,我認爲確認他們是htmlencode會很好。 – JayC 2013-03-21 17:46:09

回答

-1

您應該始終使用預準備語句來防止SQL注入。這允許您插入像單引號(')這樣的元字符。最好的做法仍然是拒絕任何你不想要的東西,但聽起來你已經定義了包含大多數鍵盤字符。儘管如此,您仍然可以拒絕高位ASCII和控制代碼。

對於XSS,您需要HTML實體編碼以HTML格式顯示的用戶來源的任何內容,而不管它在哪裏使用。如果您在發送給用戶之前進行編碼(輸出驗證),則不必擔心用戶看到雙重編碼。

+0

HTML實體編碼不足以防止XSS;看[這個答案](http://stackoverflow.com/a/70222/2489497) – 2015-12-29 13:30:03