2013-08-18 2 views
0

У меня есть приложение MVC 4, в котором я пытаюсь имитировать приложение XSS. У меня просто есть кнопка и текстовое поле, которое просто выведет значение, введенное в текстовое поле, как показано ниже. Когда я вводим <script>alert('xss')</script> в текстовое поле автоматически, исключение показывает, что сообщение об опасном значении было обнаружено у клиента. Как я могу предотвратить это, по крайней мере, для учебных целей. Теперь исключение не возникает после того, как он дал советы Furqan. Однако я ожидаю появления окна предупреждения, но это не так, и вместо этого тег скрипта отображается как строка.Имитация атаки XSS в приложении VS2012 MVC4

Может кто-нибудь объяснить, почему это так?

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<h2>@ViewBag.Message</h2> 
<form method="post" action="/home/index"> 
<input type ="text" id="text" name="search" value="@ViewBag.Message"/> 
<input type="submit" /> 
    </form> 

Это мои действия с контроллером.

public ActionResult Index() 
     { 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Index(string search) 
     { 
      ViewBag.Message = search; 
      return View(); 
     } 
+2

использовать атрибут '[AllowHtml]' для метода index для HTTPPost Request. –

+0

[AllowHtml] действителен только для свойств – ckv

+2

Извините, забыл об этом, используйте '[ValidateInput (false)]' для действия контроллера. –

ответ

3

Вы должны использовать оба [ValidateInput(false)] о действиях и @Html.Raw в представлении:

Контроллер:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Index(string search) 
{ 
    ViewBag.Message = search; 
    return View(); 
} 

Вид:

<h2>@Html.Raw(ViewBag.Message)</h2> 
1

MSDN есть большая статья о предотвращении Скрипты между сайтами: How To: Prevent Cross-Site Scripting in ASP.NET.

Вы также можете попробовать некоторые инструменты безопасности, такие как Netsparker, которые будут проверять массив обычных и менее распространенных векторов атаки.