本文转自: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 特性以得到访问权限

最新文章

  1. php文件锁
  2. python &amp; mongo问题记录
  3. Vmware workstation 11 安装 RedHat 9 时 第二个iso文件 出现光盘无法被挂载
  4. 【dubbo】dubbo控制台搭建
  5. Cobbler自动化批量部署CentOS6.5系统
  6. 51nod 最近刷题 简要题解
  7. selenium弹窗关闭
  8. 成长记录 if语句输出 由大到小的数字
  9. 如何查看tomcat是32位还是64位
  10. linxu 挂载分区
  11. html里的table如何在表格内部保留表格横线的同时去掉表格里的竖线
  12. mysql source命令导入sql文件效率分析和索引整理
  13. Winform ComBox模糊查询
  14. [SQL基础教程] 2-3 逻辑运算符
  15. windows 2008 VPN(PPTP/L2TP)搭建
  16. UniDBGrid增加显示记录数的label及隐藏refresh按钮
  17. 亿级用户百TB级数据的AIOps 技术实践之路
  18. 一道面试题让你与JS更近一步
  19. BZOJ3462 DZY Loves Math II(动态规划+组合数学)
  20. java分页实例Demo

热门文章

  1. juruo的刷题&amp;博文祭
  2. Python基础(六) 基础文件操作
  3. CodeForces 367E Sereja and Intervals
  4. zoj 3812 状压dp
  5. PLSQL 下载地址 Spring jar包
  6. 洛谷——P1103 书本整理
  7. 洛谷——P1255 数楼梯
  8. WCF 配置文件中的MaxStringContentLength &amp; MaxReceivedMessageSize
  9. ci 在阿里云访问的时候404
  10. Manthan, Codefest 16 F