Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 488|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    前天 22:25
  • 签到天数: 790 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722766
    发表于 2021-5-22 05:37:44 | 显示全部楼层 |阅读模式
    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...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-12 12:45 , Processed in 1.042554 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表