ASP.NET Web应用程序的安全解决方案浅析

一、ASP.NET Web应用程序架构安全隐患
1. 对于程序集主要威胁:未验证的访问、反向工程、代码注入、通过异常获得程序信息、未审核访问。
2. 客户端与Web应用程序之间的安全隐患:代码注入(跨站点脚本或缓冲区溢出攻击)、网络监控(密码和敏感应用程序数据探测)、参数破解(表单字段、查询字符串、Cookie、视图状态、HTTP头信息)、会话状态变量ID取得、信息获取(通常使用异常)。
3. Web应用程序客户端与企业服务之间的安全隐患:非审核访问、破解配置数据、网络监视、未约束代理、数据复制。
4. Web服务客户端及其服务之间的安全隐患:非审核访问、参数破解、配置数据取得、网络监、消息回复。
5. Remoting客户端及服务器之间的安全隐患:非审核访问、参数破解、序列化、网络监控。
6. 客户端到数据之间的安全隐患:非审核访问、SQL注入、破解数据模型和链接详细信息、网络监控、破解配置数据、破解面干应用程序数据。

* ASP.NET安全架构注意事项
1. 在浏览器认证用户;
2. 在浏览器和防火墙通路中1)保护敏感数据2)阻止参数破解3)阻止会话攻击和Cookie回复攻击
3. 在Web应用程序侧1)提供安全配置2)处理异常3)审核用户4)验证输入
4. 应用程序服务器1)认证和审核上传身份2)审核并记录活动和事务
5. 在应用程序服务器和数据库间保护敏感数据
6. 数据库中加密或者哈希加密敏感数据
二、ASP.NET Web应用程序安全性隐患防治办法
1. 防止跨站点脚本攻击(Cross-Site Scripting Attack)
攻击方法:在页面通过输入脚本或HTML内容获取敏感数据。
威胁指数:6
攻击结果:应用程序拒绝服务或重启,获得错误堆栈信息(※)推测代码进行下一步攻击。
※注:在ASP.NET配置文件中如果未关闭CustomErrors则可能导致在出现系统异常时显示错误行代码或数据库连接字符串,泄漏配置数据,造成危险隐患。
预防措施:ASP.NET控件验证或服务器端输入验证。
采用客户端验证和服务器端验证结合的方式对用户输入进行验证,通过比较控件输入和其HTML译码值的一致性确认输入字符串中是否含有HTML特殊符号,以此作为依据转化HTML特殊符号,防止脚本在回发表示时触发。

2. 防止SQL注入攻击(SQL Injection Attack)
攻击方法:通过画面输入或URL参数修改,利用其作为SQL查询条件的特殊性,将输入SQL文注入并返回结果的攻击。
威胁指数:9
攻击结果:可查询敏感数据并可修改系统数据。
预防措施:在数据更新和查询时使用数据库参数对象或使用自定义方法转换输入参数,以使注入SQL文失效。
3. 验证用户输入
通过客户端验证为主、服务器端验证为辅(当禁用客户端Javascript时服务器端验证就尤为重要)
客户端验证主要负责验证用户输入的类型、长度、关联关系的验证(此功能由系统扩展控件提供);
服务器端验证分为两部分:
1) 输入验证
输入验证需要对用户输入文字的HTML特殊字符进行验证,含有特殊字符的要抛出系统错误;数据的长度控制尽量在画面通过控件的允许输入长度进行控制;
2) 数据验证
验证数据类型、长度等;此验证行为在对象上进行。
4. 使用Hash算法保存密码
使用ASP.NET Membership管理用户,用户密码使用Hash算法和Salt加密,安全性高;
对于其它需要保存的密码,系统基础结构将提供Hash加密算法进行不可反向加密,作为验证凭据,或者先取先用不保存在数据存储中。
5. 数据安全性
1) 加密敏感数据:基础结构应提供Hash加密算法支持数据加密。
2) XML数据安全性:防止XML数据攻击。
攻击方法:XPath注入和XXE(扩展XML实体)注入攻击。
威胁指数:8
攻击结果:获得XML文件信息。
预防措施:不在XML中保存敏感信息,所有配置文件中的敏感信息需要加密保存,对于要写入XML的数据应先通过验证。
3) ViewState数据安全性:防止从ViewState获取敏感数据。
攻击方法:通过解码ViewState获得敏感信息。
威胁指数:6
攻击结果:获得ViewState中的敏感信息。
预防措施:禁用ViewState或避免,使用简单控件采用加密方式保存敏感信息。
关联问题:使用JSON字符串时注意敏感数据的处理。
6. 存储安全信息到注册表和配置文件
控制远程用户对配置文件的访问权限,保护配置文件中的敏感数据。
7. 再发布前修正配置文件
为防止错误堆栈信息推测以及通过其它信息查获手段进行攻击,ASP.NET Web应用程序在发布前应对配置文件进行修正。
错误堆栈信息推测攻击
攻击方法:造成系统异常,通过错误页上的堆栈信息推测代码进行下一步攻击。
威胁指数:6
攻击结果:推测系统版本和代码逻辑。
预防措施:捕获系统异常使用统一页面进行处理不表示错误堆栈信息,将自定义错误节点设置为<customErrors mode=”Off” />即可防止错误信息表示给远程用户;同时应关闭调试开关<compilation defaultLanguage=”vb” debug=”false” />防止通过调试信息泄漏源代码或进行代码注入。

同时应该关闭Trace优化性能并防止方法攻击者利用Trace推测代码执行过程和详细内容:<trace enabled=”false” requestLimit=”10” pageOutput=”false” traceMode = ”SortByTime” />
对于Web服务要防止远程用户利用WSDL描述进行推测攻击。
攻击方法:访问Web服务WSDL文件,获得Web服务相关信息。
威胁指数:4
攻击结果:获得Web服务方法描述,推测Web服务参数,进行下一步攻击。
预防措施:在配置文件中指定不表示Web方法描述内容,配置文件改修如下:


代码如下:

<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>

8. 使用Session但不使用Cookieless的Session
原因:Cookieless的Session将在URL中曝露SessionID,使别人易于利用进行攻击。
9. 预防方向工程
攻击方法:获得程序集使用工具进行反向工程。
威胁指数:9
攻击结果:了解程序逻辑,盗取开发成果。
预防措施:在发布时进行强加密和混淆工程。

参考:

ASP.NET Security: 8 Ways to Avoid Attack

http://www.devx.com/security/Article/20898/1954

《Hacking Exposed Web 2.0 : Web 2.0 Security Secrets and Solutions》,Rich Cannings, Himanshu Dwivedi, Zane Lackey,2008.

(0)

相关推荐

  • ASP.NET Web应用程序的安全解决方案浅析

    一.ASP.NET Web应用程序架构安全隐患 1. 对于程序集主要威胁:未验证的访问.反向工程.代码注入.通过异常获得程序信息.未审核访问. 2. 客户端与Web应用程序之间的安全隐患:代码注入(跨站点脚本或缓冲区溢出攻击).网络监控(密码和敏感应用程序数据探测).参数破解(表单字段.查询字符串.Cookie.视图状态.HTTP头信息).会话状态变量ID取得.信息获取(通常使用异常). 3. Web应用程序客户端与企业服务之间的安全隐患:非审核访问.破解配置数据.网络监视.未约束代理.数据复制

  • asp.net Web Service 接口大量数据传输解决方案

    具体请看下面的流程图及其说明 1,流程图 2,流程说明:线程1开始请求接口获取1W条数据,当数据成功获取后,接口是闲置的,这时我们开始线程2获取数据,同时线程1继续执行获取数据的后续工作,如果转换数据,这里我用的办法是,使用预先定义的实体对象格式 反序列化XML (据说这种方式比遍历XML或是载入到DataSet中循环 读取都要高效的,具体我没有测试过 ,哈哈)将数据插入到数据后停止线程1.使用这样线程循环的办法处理所有线程读取数据.

  • 创建ASP.NET Core Web应用程序并介绍项目模板

    目录 创建ASP.NET Web 应用程序 运行ASP.NET Core Web 应用程序: ASP.NET Core应用程序模板 空 API Web应用程序模板 Web应用程序(模型视图-控制器)模板 Angular, React.js, React.js, and Redux: 创建ASP.NET Web 应用程序 打开安装后的VisualStudio 2019,点击"创建新项目", 如下所示. 单击"创建新项目"框后,它将打开"创建新项目"

  • ASP.NET Web.config配置文件详解

    分析: .NET Web 应用程序的配置信息(如最常用的设置ASP.Net Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中.当你通过VB.NET新 建 一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置.如果你想修改子目录的配置设置, 你可以 在该子目录下新建一个 Web.config文件.它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置.      

  • ASP.NET+Web服务实现软件共享

    摘 要 本文提出一种新的通过软件功能共享而实现软件共享的方法,这种方法的优点是以远程调用Web服务的形式实现软件功能的共享,而不将软件拷贝到客户端,也减小了网络上的一些资源冗余,也有利于共享现有Web服务集成新的系统.而且本文通过学生身份验证模块实例分析了这种新方法的有效性. 引言 传统的软件共享是将软件从网络的服务器拷贝到客户端,以实现软件的共享,这种方法的缺点是每一个需要使用该软件的客户端都必须先拷贝该软件,导致网络上的空间冗余,因而导致产生了大量孤立的数据和重复的业务逻辑. Web ser

  • vs.Net2003无法打开或创建Web应用程序若干解决办法.

    昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不敢独享,供大家相互学习交流之用. 起因是这样的,机子运行IE时假死,我用着不爽,就二话不说热启动,结果就出事了. 重新打开正在Vs2003.Net里面正在作的项目时,老半天没反应,机子变得异常慢,当然,出于职业的敏感,马上来了个Ctrl+Alt+Del,这下不好,CPU占用100%,一直高居不下,运

  • 分享提高ASP.NET Web应用性能的技巧

    在这篇文章中,将介绍一些提高 ASP.NET Web 应用性能的方法和技巧.众所周知,解决性能问题是一项繁琐的工作,当出现性能问题,每个人都会归咎于编写代码的开发人员. 那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置为「true」是非常有用多,但在应用程序发布部署时,需将其设置为「false」. <compilation defaultLang

  • 使用Visual Studio创建ASP.NET Web API项目

    在本篇文章中将讲解如何使用Visual Studio创建一个新的ASP.NET Web API项目. 在VisualStudio中有两种方式用于创建WebAPI项目: 1.创建带MVC的WebAPI项目. 2.创建独立的WebAPI项目. 一.创建带MVC的WebAPI项目 在示例程序中使用的是VisualStudio 2013版本,创建一个新的WebAPI项目并且带MVC的模板,它包含了所有必要的引用. 1.选择“文件”->“新建”->“项目”,截图如下所示: 2.在弹出的新建项目窗口中,左

  • 巧用ASP.NET预编译Web应用程序规避调用延迟的方法

    自从ASP.NET面市以来,开发人员一直都在要求(微软)出台一个解决办法,而ASP.NET 2.0利用预编译提供了一个有效的解决方案. 预编译选项 在首次启动应用程序的时候,ASP.NET会动态地分析和编译所有的ASP.NET文件(aspx页面).运行环境要对编译的结果进行缓冲,以便更好地服务未来所有的请求. 在服务器重启或者Web服务器重启之后,第一次启动应用程序也意味着这一过程要重新开始.而且,对应用程序任何文件的改变都会被系统检测到,而在文件发生改变之后首次运行应用程序也会让这一过程再次发

  • ASP.NET第一次访问慢的完美解决方案(MVC,Web Api)

    问题现象 访问asp.net web项目的时候,第一次访问比较慢,当闲置一段时间后,再次访问还是会非常慢. 问题原因 这是IIS回收造成的,再次访问的时候会初始化操作,初始化需要耗费时间,所以访问会比较慢,第二次访问的时候不需要初始化操作,因此变快了. 解决办法 IIS应用初始化会在网站第一次创建后或者对应网站的应用程序池回收后,自动开启新程序池,并启动网站初始化,模拟一次正常请求,使网站一直处于在线状态. 修改IIS中的配置 1.修改启用应用程序池(AlwaysRunning):保证应用程序池

随机推荐