2013-07-01 47 views
2

我有以下代碼:爲什麼標籤x = txtName.Text;受到XSS攻擊,這裏有什麼預防措施?

label x = txtName.Text; 

當安全團隊分析,他們說,這是能夠將在上面的代碼中的XSS攻擊的DLL。我知道文本框Text屬性不能阻止XSS攻擊,所以我現在應該怎麼做?

以下修改是否可以解決問題?

label x = Server.HtmlEncode(txtName.Text); 
+0

更多代碼,然後我們可以告訴。 –

+0

我剛從文本框中取出數據並分配給標籤。我不確定爲什麼這個簡單的代碼行在XSS攻擊下。 –

+0

也許安全團隊可以提供一些見解?我沒有看到任何會導致問題的東西,但我也不是安全專家 –

回答

0

我不認爲label x = txtName.Text;是有效的C#。我假設你的意思是x.Text = txtName.Text;其中xLabel的ID。

這是一個問題,因爲如果我在文本框中輸入<script>alert('XSS!')</script>?我的輸入可以呈現給頁面並作爲腳本執行。這個簡單的例子可能無法正常工作,但有許多技巧可以讓XSS工作。

您可以通過在頁面上顯示之前對輸入進行編碼來解決此問題,並且我會爲該任務推薦Microsoft AntiXSS。我也同意你的意見,你應該問你的安全團隊如何解決它。

+0

好吧,我會問安全團隊,但每個asp.net webform都包含頁面驗證屬性,這在我的情況中是如此。我認爲它不會允許從文本框中發佈文本。 –

+1

這會使得利用此漏洞更加困難,但RequestValidation不是100%萬無一失的。最好關閉這些漏洞,特別是當它很容易這樣做時。 –

4

我假設你是在談論一個WebForms的Label - 它不是從問題(!後實際代碼)

這清楚是ASP.NET Web窗體的設計有問題。許多元素都有一個名爲Text的屬性,但屬性根據元素做了不同的事情。

您會希望在控件上設置Text可以設置其純文本內容。這個安全操作就是這個名字的意思。這是在這些控件的情況:

  • 文本框
  • 按鈕
  • 的ImageButton
  • 列表項

不幸的是,很多其他的控件,同名的實際屬性在元素中設置HTML標記。所以如果你有一個文本字符串<b>,你會得到一些粗體文本,而不是在一些尖括號中的字母b。如果文本中包含<script>等字符串,代碼將在瀏覽器上執行,從而導致安全問題。

一些不幸的不安全控件是:

  • 標籤
  • 超鏈接
  • 的LinkBut​​ton
  • 單選
  • 複選框
  • TableCell的

要安全地使用這些內容,您必須對寫入Text屬性的所有內容進行HTML編碼。

最後有一個控制該擺動兩種方式:

  • 文字

默認情況下此設置HTML標記(!BOO),但如果設置了Mode="Encode"屬性,它設置文本而不是。

這當然都非常混亂,沒有辦法設計一個web框架,但這就是我們需要處理的。