для моей стажировки мне нужно исследовать инструменты анализа кода, которые анализируют код на наличие уязвимостей из OW ASP top 10. Но мне также нужно сделать подтверждение концепции, чтобы я мог показать, что инструмент анализа кода делает свое дело работа. Поэтому я создаю веб-приложение ASP. NET (с. NET Framework) и добавил экран входа в систему, чтобы я мог выполнить инъекцию SQL (что работает). Вторая уязвимость, которую я хочу проверить, - межсайтовый скриптинг (XSS). Поэтому я сделал экран с таблицей, которая показывает все данные из моей базы данных комментариев. Я добавил кнопку поиска, и при вводе: alert («Test») я получаю уведомление о том, что обнаружено потенциально опасное значение Request.Querystring. Мой коллега сказал, что добавление [ValidateInput (false)] в мой контроллер будет работать, и теперь уведомление пропало, но мое уведомление о том, что ничего не может быть найдено в базе данных, отображается каждый раз. Когда я запускаю приложение и заглядываю внутрь исходного кода на Chrome, я вижу, что значение моего поиска: value = alert ("Test") /> вместо предупреждение ( "Test") . Я знаю, что это кодировка Html, но я не знаю, как отключить эту кодировку, чтобы я мог запустить скрипт.
Это моя модель:
{
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public partial class Comments
{
[AllowHtml]
public int CommentID { get; set; }
[DisplayName("Naam:")]
[AllowHtml]
public string Name { get; set; }
[DisplayName("Voer hier uw comment in:")]
[DataType(DataType.MultilineText)]
[AllowHtml]
public string Comment { get; set; }
}
}
Это мой взгляд:
<body>
@using (Html.BeginForm("Index", "XSS", FormMethod.Get))
{
@Html.TextBox("searchcomment")
<input id="comment-button" type="submit" value="Search comments" />
}
<link rel="stylesheet" type="text/css" href="~/Content/CommentPage.css" />
<table id="Comments">
<thead>
<tr>
<th>Naam</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
@if (Model.Count() == 0)
{
<tr>
<td colspan="3" style="color:red">
No comments found!
</td>
</tr>
}
else
{
foreach (var comment in Model)
{
<tr>
<td>@Html.Raw(comment.Name)</td>
<td>@Html.Raw(comment.Comment)</td>
</tr>
}
}
</tbody>
</table>
<input class="text-center" id="comment-button" type="button" value="Add new comment" onclick="location.href='@Url.Action("NewComment", "XSS")'" />
</body>
</html>
Это мой контроллер:
using System.Web.Mvc;
using Afstuderen.Models;
using System.Data.SqlClient;
using System.Linq;
namespace Afstuderen.Controllers
{
public class XSSController : Controller
{
// GET: XSS
[ValidateInput(false)]
public ActionResult Index(string searchcomment)
{
using (CommentsEntities db = new CommentsEntities())
{
return View(db.Comments.Where(model => model.Name.Contains(searchcomment) || model.Comment.Contains(searchcomment) || searchcomment == null).ToList());
}
}
Я действительно надеюсь, что кто-то можете сказать мне, что я делаю неправильно, и показать мне, как это исправить.