Asp.Net MVC Web应用程序中的安全向量

一。阻止跨站脚本攻击(XSS)

1. 对所有内容进行Html编码,对于Asp.Net MVC 而言,只需要在视图中使用Html.Encode或者Html.AttributeEncode方法就可实现对特定值的编码替换。

Razor视图默认输出内容采用Html编码,所以使用@Model.FirstName.显示的模型属性将被进行Html编码,而程序员不需要进行任何工作

2.  Url.Encode或者Html.AttributeEncode方法: 对预期的URL进行编码

3. JavaScript编码:使用Ajax.JavaScriptStringEncode辅助函数对在JavaScript中使用的字符串进行编码

二。阻止跨站请求伪造(Cross-Site Request Forgery, CSRF)

  1) 令牌验证

  在每个表单请求中插入一个唯一的隐藏输入元素,代码如下:

  

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
}

  用 @Html.AntiForgeryToken辅助方法会输出一个加密值作为隐藏的输入元素:

<input type="hidden" value="012386uuudefuye0123456" />

  该值将于作为会话Cookie储存在用户浏览器中的另一个值进行匹配。在提交表单时,ActionFilter就会验证这两个值是否匹配

  [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ID,Name")] Product product)
        {
            if (ModelState.IsValid)
            {
                db.Products.Add(product);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(product);
        }

  2) 幂等的Get请求

  如果一个操作时幂等的,则执行多次而不会改变执行结果。一般情况下,仅仅通过Post请求来修改数据库或者网站中的内容,这里的修改包含Registration,Logout, Login

  3) HttpReferrer验证

  使用ActionFilter来查看提交表单值的客户端是否确实在目标站点

  

public class IsPostFromThisSiteAttribute: AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext != null)
            {
                if (filterContext.HttpContext.Request.UrlReferrer == null)
                {
                    throw new System.Web.HttpException("Invalid submission");
                }

                // 判断返回的url是否是自己所在站点
                if (filterContext.HttpContext.Request.UrlReferrer.Host != "localhost")
                {
                    throw new System.Web.HttpException("this form wasn‘t submitted from this site!");
                }
            }
        }
    }

三。阻止Cookie盗窃

  Cookie主要分为2种,

  1. 会话Cookie: 储存在浏览器的内存中,在浏览器的每次请求中通过Http头进行传递

2.持久Cookie:持久性Cookie储存在计算机内存上的实际文本文件中,与会话Cookie采用同样的方式传递

二者的区别在与:会话Cookie通常在会话结束后忘记会话Cookie,而持久性Cookie则不同,在下一次站点时依然会记住它

若盗取某人在一个网站上的身份验证Cookie,就可以在站点上冒充某人进行此人权限内的所有操作

     1. 用HttpOnly阻止Cookie盗窃

在web.config中对所有Cookie进行设置

 <httpCookies domain="" httpOnlyCookies="true" requireSSL="false"/>

或者在程式中单独设置

Response.Cookies["MyCookies"].HttpOnly = true

四。使用Bind特性防止重复提交(Over-posting)攻击

  防御重复提交攻击的最简单办法就是使用[Bind]属性显示的控制需要由模型绑定器绑定的属性。Bind特性既可以放到模型类上,或者放到控制器操作参数中。可以使用[Bind(Include="Name, Comment")]指定绑定哪些字段,也可以使用[Bind(Exclude="Name, Comment")]排除绑定的字段。

  另一种方法可以使用UpdateModel或者TryUpdateModel方法中的一个重载版本来接收一个绑定列表,例如代码:

  

UpdateModel(review, "Review", new string{"Name", "Content"})

  

时间: 2024-11-15 12:33:37

Asp.Net MVC Web应用程序中的安全向量的相关文章

在 ASP.NET MVC Web 应用程序中输出 RSS Feeds

RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发布时间.最后更新时间等信息. 本文将介绍通过LINQ to XML生成XML文档,并在ASP.NET MVC Web应用程序中输出. 在生成RSS文档前,先简单了解一下RSS的结构.根节点rss下有channel节点,channel节点的一些子节点(title,link,description)包含

Web 应用程序中的安全向量 &ndash; ASP.NET MVC 4 系列

       Web 程序运行在标准的.基于文本的协议(HTTP 和 HTML)之上,所以特别容易受到自动攻击的伤害.本章主要介绍黑客如何滥用应用程序,以及针对这些问题的应对措施.   威胁:跨站脚本攻击(XSS)        XSS 攻击在 Web安全威胁上排名第一,然而遗憾的是,导致 XSS 猖獗的主要原因是开发人员不熟悉这种攻击.可以使用 2 种方法实现 XSS: 被动注入(Passive Injection):通过用户将恶意的脚本命令输入到网站中,而这些网站又能接收"不干净"

2、Web应用程序中的安全向量 -- CSRF/XSRF(跨站请求伪造)

CSRF的概念可以分为两类:XSS和混淆代理. 混淆代理中的"代理"是指用户的浏览器.CSRF是基于浏览器的工作方式运作的.用户登录到一个站点后,用户的信息将会存储在cookie中(会话cookie或者持久cookie),通过这两种cookie中的任何一种,浏览器会告诉站点这是一个真是用户发出的请求. 使用XSS加混淆代理来实现对用户攻击的能力正式CSRF的核心. CSRF使得用户在不知情的情况在,使用自己真实的用户信息,去执行了黑客植入的恶意的脚本或者链接,造成非正常的操作. 阻止C

ASP.NET MVC - 探究应用程序文件夹

为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下所示:   应用程序信息 PropertiesReferences 应用程序文件夹 App_Data 文件夹Content 文件夹Controllers 文件夹Models 文件夹Scripts 文件夹Views 文件夹 配置文件 Global.asaxpackages.configWeb.conf

ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1-1 手把手引进门 1-2 进阶 1-3 杂项 (相关理论知识) 第一篇含两个步骤. 1-1-1 ASP.NET Core & Entity Framework Core 后端(内核)含两篇 ( 第一篇链接    

ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口都以“I”开头,以“Repository”结尾.仓储层实现都以“Repository”结尾. 2.服务层接口都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目TianYa.DotNetShare.Core

ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

原文:ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用) 在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. PS:本章将主要采用构造函数注入的方式,下一章将继续分享如何使之能够同时支持属性注入的方式. 约定: 1.仓储层接口都以“I”开头,以“Repos

ASP.NET MVC Web API 学习笔记---Web API概述及程序示例

1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP) 2. ASP.NET W

ASP.NET MVC Web API 学习笔记---第一个Web API程序

http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有