2012-11-08 48 views
4

如果ViewStatemac在ASP.NET應用程序中啓用,用戶可以修改ViewState中的內容併成功將其傳回服務器?惡意用戶可以修改視圖狀態嗎?

我有一個應用程序(別人寫道)使用ViewState中的內容在SQL查詢中創建非參數化的ORDER BY子句。我應該擔心SQL注入嗎?

回答

2

如果啓用了ViewStateMAC,攻擊者需要能夠破解「機器密鑰」才能更改ViewState,因此如果該值保持私密,應該是合理安全的。

是否在代碼後面設置的值(例如ViewState["OrderBy"])而不是通過控件?如果是這樣,這將不會受到事件驗證。

1

是的,你可以修改視圖狀態,並通過簡單的複製將頁面粘貼到本地站點作爲html並修改它。

如何回發驗證將會失敗,並且如果您打開EventValidation Property,則默認情況下它將被打開。

asp.net爲該屬性頁面上的每個控件和每個事件保存散列文件,並在回發後對其進行驗證。如果失敗,則不會繼續。如果你有這個關閉,那麼它可以做你的話。

看看這個簡單的HTML表單:

<form name="input" action="someaction.asp" method="post"> 
    <select name="sel"> 
     <option value="1" >Milk</option> 
     <option value="2" >Coffee</option> 
     <option value="3" >Tea</option> 
    </select> 
<input type="submit" value="Submit"> 
</form> 

任何人都可以改變<option value="1" >Milk</option><option value="1 OR 1=1" >Milk</option>,並張貼回來,因爲它是,所以你需要前添加一個哈希代碼渲染它,並與它張貼到一起休息,並驗證相同的值(返回相同的散列)。

一些網站,以及編碼器上選擇後的每一個值,比如你看到亞馬遜,你注意到般的線條來加密回來,:

<input name="offeringID.1" value="y3A0L7tSnS%2B7LBLvI....morehere" type="checkbox" id="fbt_x_check" style="display: none;" class="check" checked="checked"> 

你,如果你使用自定義HTML控件,你需要添加您的個人驗證值,以避免被修改。

asp.net開發人員決定製作所有控件的總散列值,並將其保留在EventValidation上。

因此,請保持EventValidation,並且修改將失敗。

+0

您的'option value =「1」'示例甚至是視圖狀態? –

+0

@AbeMiessler如果您使用asp.dropdownlist,那麼會自動添加,如果您使用html控件,則需要手動添加額外的哈希代碼。我個人使用的是asp.net控件,或者在我的自定義html表單上創建加密數據。我的意思是,你使用的是asp.net控件,然後dot net添加驗證,並檢查沒有人更改這個值,包括viewstate。因此,如果你在viewstate上放置任何東西並保持EventValidation爲ON,那麼dot net會考慮它們的安全性 – Aristos