我正在使用最新版本的 ASP.NET MVC 5.2.3 创建一个 Web 应用程序。 我只关心 XSS 攻击。 我发现在 ASP.NET Core 中可以完美地防止这种攻击,XSS 和这个框架非常棒,但它缺乏我的项目所需的第三方。 这是我的担忧。 我也已经启用了自定义错误,但我目前禁用了它以进行测试。

但我想确保这也能抓住。

  1. 输入验证通过。 为了避免这种异常或错误。

从客户端检测到潜在危险的 Request.Form 值 (Name="")。

使用 [AllowHtml] 属性这很好,或者使用 AntiXss 库。

  1. 但是,从 URL。 示例网址,

    http://localhost:54642/Employees/

     http://localhost:54642/Employees/?a=<script>

链接或网址

这个错误应该是,

从客户端 (<) 检测到潜在危险的 Request.Path 值。

所以我的解决方案是从 Web.config 启用它,然后它就可以工作了!

但是 Troy Hunt 在他的教程中说,对于这个错误,这不是一个好的或更好的做法。 所以我决定从这次 XSS 攻击中寻找最佳解决方案。

#1楼 票数:3

在我的表单中,我通常添加这个防伪令牌

 @Html.AntiForgeryToken()

然后在我的控制器上我确保验证令牌

[ValidateAntiForgeryToken] 

同样在传递变量或数据时,我总是声明正确的变量。 无论如何,如果它的会员区页面你总是可以限制对正确的成员角色的访问,例如

  [Authorize] // for registered user

  or more filtered

  [Authorize(Roles = "SUBSCRIBER.VIEW")]

以下仅适用于 .net 4.5 及以上

  // web.config 
  <system.Web> 
     <httpRuntime targetFramework="4.5" />
  </system.Web>

 // enabling anti-xss 
   <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

请求验证 延迟验证是在 ASP.NET 4.5 中引入的,我只是对其进行了一些测试,并且在安装 4.5 框架后,无论您如何设置“requestValidationMode”,似乎都启用了延迟验证。

#2楼 票数:1

查看 OWASP 网站。 这是我在 webapi 应用程序的 web.config 文件中的 system.web 中添加的常见内容。

<httpProtocol>
  <customHeaders>
    <remove name="Server" />
    <remove name="X-Powered-By" />
    <remove name="X-Frame-Options" />
    <remove name="X-XSS-Protection" />
    <remove name="X-Content-Type-Options" />
    <remove name="Cache-Control" />
    <remove name="Pragma" />
    <remove name="Expires" />
    <remove name="Content-Security-Policy"/>
    <clear />
    <add name="X-Frame-Options" value="DENY" />
    <add name="X-XSS-Protection" value="1; mode=block"/>
    <add name="X-Content-Type-Options" value="nosniff" />
    <add name="Cache-Control" value="no-cache, no-store" />
    <add name="Pragma" value="no-cache" />
    <add name="Expires" value="Sun, 1 Jan 2017 00:00:00 UTC" />
    <add name="Content-Security-Policy" value="default-src 'self' 'unsafe-inline' data; img-src https://*;"/>
  </customHeaders>
</httpProtocol>

#3楼 票数:0

Steps:
1. Disables input validation
2. Encodes all the input that is coming from the user
3. Finally we selectively replace, the encoded html with the HTML elements that we want to allow.

[HttpPost]
// Input validation is disabled, so the users can submit HTML
[ValidateInput(false)]
public ActionResult Create(Comment comment)
{
    StringBuilder sbComments = new StringBuilder();
    
    // Encode the text that is coming from comments textbox
    sbComments.Append(HttpUtility.HtmlEncode(comment.Comments));
    
    // Only decode bold and underline tags
    sbComments.Replace("&lt;b&gt;", "<b>");
    sbComments.Replace("&lt;/b&gt;", "</b>");
    sbComments.Replace("&lt;u&gt;", "<u>");
    sbComments.Replace("&lt;/u&gt;", "</u>");
    comment.Comments = sbComments.ToString();

    // HTML encode the text that is coming from name textbox
    string strEncodedName = HttpUtility.HtmlEncode(comment.Name);
    comment.Name = strEncodedName;

    if (ModelState.IsValid)
    {
        db.Comments.AddObject(comment);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(comment);
}

  ask by Patrick translate from so

未解决问题?本站智能推荐:

1回复

如何在没有身份的asp.netMVC中实现自定义身份验证/授权?

我正在研究一个asp.net MVC 5解决方案,现在我需要实现身份验证和授权。 该解决方案具有管理“繁重工作”的外部服务,该服务将在每个请求中使用用户名和密码,并在成功验证后发送回带有用户权限(角色)的令牌,该令牌应与控制器中的属性相匹配。 对我的解决方案的每个请求都应向外部服务请求。
1回复

保护默认MVC5应用程序的Cookie

我在VS2013中启动了一个新的MVC 5应用程序(在向导中使用Authentication = Individual User Accounts)。 我正在查看我的web.config文件,它说: 但是,我可以清楚地创建一个帐户并登录我的网站。 所以这有点神秘。 我已经读过如果我使
2回复

MVC5中的会话固定攻击是否仍然是一个问题

我已经阅读了很多关于会话固定攻击的文章,我遇到的最流行的解决方案是在用户登录时更改 SessionID 并使用 GUID 创建额外的 cookie 以验证用户“属于”SessionID。 我的问题是:仅删除 SessionID cookie (ASP.NET_SessionID) 以确保生成新的 S
7回复

保护ASP.NET应用程序

已关闭 。 这个问题需要更加集中。 它当前不接受答案。 了解更多 。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。
1回复

用户锁定.net4.5.1ASP.NETMVC5

因此,在新的.Net Framework 4.5.1中,AspNetUser表没有用于在有限次数的不成功尝试后锁定用户的列。 是否存在为此目的而构建的框架或解决方案,以替换曾经存在于以前的.net框架中的功能? 或者我必须建立自己的?
2回复

ASP.NetMVC5设置安全和HTTPOnly标志

我需要将httponly和secure标志设置为网站的所有cookie,以通过客户的安全扫描。 我认为web.config配置正确 它适用于我在应用程序内部创建的所有cookie,但不适用于google analitycs的cookie(我知道我对此无能为力),我想的是asp.net的会话
1回复

MVC5Web应用程序脚手架-帐户/注销-为什么使用HTTPPost?

我试图了解MVC 5 Web应用程序模板,并且注意到对LogOff链接周围的安全性给予了特别的关注。 在脚手架模板中,_LoginPartial.cshtml视图中的“ LogOff”链接位于其中包含AntiForgeryToken的HTML表单内,并被定义为对表单的Submit操作的JS调
2回复

ASP.NET组合框MVC

我在Bus.cs的Index.cshtml支架中有数据表 在索引页面中,我需要包含一个包含BusOwner.cs中的BusOwnerID和BusOwnerName的下拉列表 在控制器中,我有以下内容, 在视图中,index.cshtml我需要一个具有BusOwnerID和BusOwn