2013-05-30 90 views
0

我正在閱讀.net MVC,並剛剛達到本書的安全性章節。我已經瞭解了xss,並且我從不相信任何用戶輸入,而不必首先進行消毒(通常使用html編碼,甚至像php的strip_tags)。直到這一點,我不熟悉Javascript編碼字符串的保護。用JavaScript編碼防止/理解xss

\x3cscript\x3e%20alert(\x27test\x27)\x3c/script\x3e 

所以很自然,當我得知我想測試一下新的東西:一書中的例子,像串了用戶的通行證。我創造了這個:

public ActionResult Index() 
    { 
     ViewBag.test = "\x3cscript\x3e%20alert(\x27test\x27)\x3c/script\x3e"; 
     return View("index"); 
    } 

,並打印出的頁面上的測試字符串此視圖代碼:

@ViewBag.test 

但是,我不能得到這個警告框,以顯示在所有。當我在頁面上查看源代碼,我得到

<script>%20alert('test')</script> 

我試着用它打了幾個不同的方式

  1. 從查詢字符串
  2. 薪火@ViewBag把viewbag打印的內現有的腳本代碼(這是本書怎麼過的)
  3. 與實際空間
  4. 使用jQuery與ViewBag.test取代HTML更換%20:
    $('#inject_here')。html('@ ViewBag.test');

沒有我嘗試執行此代碼(我猜這是一件好事?)。現在我知道這本書不會有一部分是專門針對那些根本不起作用的,所以問題必須在我的最後。我只是不知道它是什麼。有人有主意嗎?

回答

1

asp.net MVC試圖爲您解決這個問題。它自動編碼輸出。你必須用你的方式打印出一個沒有html編碼的字符串。

@Html.Raw(ViewBag.test) 

有些地方你最終會在應用程序中這樣做。理想情況下,您將擁有模型渲染到的模板。但是,在某些情況下,您將擁有動態的HTML部分,並且需要按原樣打印。在這種情況下,您將使用Html.Raw,只需注意您必須驗證內容的完整性。

+0

你說得對。原來這本書的這部分只是展示了xss的概念性例子,而不是工作代碼。猜猜我跳過那部分:/ – CountMurphy