本文转自:http://www.cnblogs.com/Jessy/p/3539564.html

asp.net MVC 常见安全问题及解决方案
一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用)

详细说明: http://imroot.diandian.com/post/2010-11-21/40031442584
 
Example :            在登陆状态下进入了攻击网站向安全站点发送了请求。
 
Solution: 在view 中使用 @Html.AntiForgeryToken(), 在Action 上加上 [ValidateAntiForgeryToken]   特性。 再次点到跨域请求的时候就会显示 :
 
“The required anti-forgery cookie "__RequestVerificationToken" is not present.”
 
二.XSS (XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。)
 
Solution:  分为 Html ,js ,url 三大领域。 需要区别对待进行输入输出编码。
 
Html 使用 Server.HtmlEncode , Server.HtmlDecode;
 
url使用 Server.urlEncode, Server.urlDecode;
 
js 使用: escape, unescape;
 
 
 
或者使用 Anti-XSS 库。 下载地址 :
 
http://www.microsoft.com/en-us/download/details.aspx?id=28589
 
引入后,html ,js ,url 分别对应的方法 HtmlEncode(string),JavaScriptEncodes(string),UrlEncode(string).
 
 
 
三.直接对象引用
 
Example:  …/Bidding/RFPRFI/Detail?editId=xxx。可以直接看到其他公司的信息;
 
bidding-> evaluation . 应标方可直接在地址栏中输入:…/Bidding/Evaluation/SaveScope?proposalId=1603&priceScope=100&proScore=100&chs=100。 来随意修改评分。
 
还有MDI 系统中的下拉框是easyui绑定一个隐藏域两部分。 甚至可以使用浏览器的调试工具, 直接修改hidden 域的值后提交。
 
Solution: 加入验证。 例如 : select * from rfprfi where edited = xxx and owner = currentuser.userid. 验证该用户对此信息是否有读写的权限。(具体要根据业务逻辑一一处理,这个工作量十分大。建议后期完成)。
 
 
四.DOS
 
Solution:可使用HTTPModule阻止访问率太高的ip。 example code 见我的博客:
 
http://www.2cto.com/kf/201307/226466.html
 
这种方式是针对固定IP发起的DOS攻击来的。 如果攻击方使用了代理IP,则需要考虑用其他方式。 关于这一点后续会作补充。 
 
 
五.传输层未做保护
 
Example: 登陆系统的post请求中将account , loginname , password 信息都是明文传输。
 
Solution: 使用HTTPS。(需要付费)。
 
 
六.暴力破解密码
 
目前的登陆和修改密码,没有错误次数的限制。
 
Solution: 是否可以加入新的逻辑:单位时间内输入错误次数大于一个数值时,改账号会被冻结。可以由改company的admin 解冻 或者发送申请到 sunnet后由sunnet公司解冻。
 
 
七.数据加密
 
目前登陆密码是用DES加密的。 一般登陆用的密码都是用单向的加密,比如MD5。而例如Invoice number ,pipeline 的位置信息,都用DES加密后存入数据库
 
 
 
八.身份验证
 
问题:目前是使用了session认证。如果被会话劫持或者会话冒充。则失去了认证机制。
 
Solution:使用多重保险。
1.使用form认证:目前配置文件中已加入form认证的节点,<forms loginUrl="~/Account/Login" timeout="2880"/>
但是code中并没有使用。需要再登陆成功后加入 System.Web.Security.FormsAuthentication.SetAuthCookie登出后加入 System.Web.Security.FormsAuthentication.SignOut,在basecontrol 中再加上一层 User.Identity.IsAuthenticated的判断即可。
 
2.使用membership 与FormsAuthentication 一起创建身份验证。
 
3.是否考虑使用WCF 来完善验证机制。
 
4.Passport 验证。(由微软提供,需要收费。。)
 
 
 
九.错误处理
 
问题:为了安全起见,应该假设在某些时候会发生一个没有捕获的异常。
Solution: 1.重写 Controller 的 OnException方法: 

1
2
3
4
5
protected override void OnException(ExceptionContext filterContext)
 {
    filterContext.ExceptionHandled = true;
    this.View("").ExecuteResult(filterContext.Controller.ControllerContext);
 }
2. 或者通过 HandleError特性来实现一个或多个异常处理器。特别是比如invoice paid之类的重要操作,需要更细粒度的错误处理
 
 
 
十.CAS 权限
 
目前没有控制代码访问安全。
 
Solution:
 
1.
 
使用具体的权限类实现标准的方法:
 
比如需要严格控制文件的读权限。

1
2
3
4
5
6
7
8
9
10
FileIOPermission iopermission = new FileIOPermission(FileIOPermissionAccess.Read, "xx.txt");
try
{
iopermission.Demand();
//实现方法
}
catch(SecurityException ex)
{
//处理异常
}
或者使用相关联的特性:
[FileIOPermission(SecurityAction.Demand,Read =”xx.txt”)]
2.那些需要Full Trust 的代码放到 GAC单独的程序集中存储。因为GAC中的代码全部在Full Trust 下运行的。添加方式可以通过命令提示符 –sn 或者通过工具完成。添加完成后就可以在主程序中添加引用,并且需要添加 AllowPartiallyTrustedCallers 特性以得到访问权限

[转]asp.net MVC 常见安全问题及解决方案的更多相关文章

  1. asp.net MVC 常见安全问题及解决方案

    asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...

  2. AJAX跨域调用ASP.NET MVC的问题及解决方案

    AJAX跨域调用ASP.NET MVC的问题及解决方案 问题描述: 解决方法: 只需要在web.config中添加如下标为红色的内容即可: <system.webServer> <h ...

  3. ASP.NET MVC常见问题解决方法

    1.页面报错: The following errors occurred while attempting to load the app. - No assembly found containi ...

  4. ASP.NET MVC 多语言实现——URL路由

    考虑实现一个完整的基于asp.net mvc的多语言解决方案,从路由到model再到view最后到数据库设计(先挖好坑,后面看能填多少). 我所见过的多语言做得最好的网站莫过于微软的msdn了,就先从 ...

  5. ASP.NET MVC学习之路由篇(1)

    1.基本路由 RouteConfig.cs: 1 public class RouteConfig 2 { 3 public static void RegisterRoutes(RouteColle ...

  6. ASP.NET MVC Boilerplate简介

    ASP.NET MVC Boilerplate简介 ASP.NET MVC Boilerplate是专业的ASP.NET MVC模版用来创建安全.快速.强壮和适应性强的Web应用或站点.它在微软默认M ...

  7. ASP.NET MVC学习(一)之路由篇Route

    什么是路由 通过[路由]配置,路由可以规定URL的特殊格式,使其达到特殊效果. 在ASP.NET MVC框架中,通过路由配置URL,使用户的URL请求可以映射到Controller下的action方法 ...

  8. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  9. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

随机推荐

  1. PAT 1141 PAT Ranking of Institutions

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  2. 阿里云服务器Ubuntu 16.04 3安装mysql

    .更新系统 apt-get update [注意:要在root用户下] .安装mysql-server apt-get install mysql-serverapt-get install mysq ...

  3. Android BottomSheet:便捷易用的底部滑出面板(1)

    Android BottomSheet:便捷易用的底部滑出面板(1) Android BottomSheet是github上的一个第三方开源项目,其主页:https://github.com/Flip ...

  4. android中listview点击监听器onItemClick四个参数的含义

    public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) X, Y两个listvie ...

  5. [bzoj 1041][HAOI2008]圆周上的整点(枚举)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 分析:实质上是求(a,b,c)勾股数的个数,其中c是确定的. 对于勾股数有一组通式: a ...

  6. Java的动态代理(DynamicProxy)

    代理的概述 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式UML图 ...

  7. C/C++异常处理机制

    1.C语言异常处理   1.1 异常终止   标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于<stdlib.h>头文件中.这两个函数本身不能检测 ...

  8. 这篇讲angular 的$q的讲得不错

    原文: https://segmentfault.com/a/1190000000402555 ---------------------------------------------------- ...

  9. hive学习笔记-表操作

    Hive数据类型 基本数据类型 tinyint,smallint,int,biging,float,double,decimal,char,varchar,string,binary,boolean, ...

  10. F广搜

    <span style="color:#330099;">/* F - 广搜 基础 Time Limit:1000MS Memory Limit:10000KB 64b ...