五种常见的ASP.NET安全缺陷

ASP.NET漏洞 前不久微软安全响应中心发布了一处asp.NET新安全漏洞,但是针对本安全漏洞分析及解决方案很少,盛大创新院产品开发部研究员赵劼最近就此安全漏洞发表了一篇博文,与大家分享他对本漏洞的一些分析及解决方案。现转载于此,供大家参考。全文如下: 上一周爆出了一个关于ASP.NET的安全漏洞,有关这个漏洞的第一篇文章应该是ScottGu的说明,但是其中各方面谈的也是语焉不详。由于这个漏洞关系到“安全”这样敏 阅读详情
一、不能盲目相信用户输入

  在Web应用开发中,开发者最大的失误往往是无条件地信任用户输入,假定用户(即使是恶意用户)总是受到 浏览器的限制,总是通过浏览器和 服务器交互,从而打开了攻击Web应用的大门。实际上,黑客们攻击和操作Web网站的工具很多,根本不必局限于浏览器,从最低级的字符模式的原始界面(例如telnet),到CGI脚本扫描器、Web代理、Web应用扫描器,恶意用户可能采用的攻击模式和手段很多。

  因此,只有严密地验证用户输入的合法性,才能有效地抵抗黑客的攻击。应用程序可以用多种方法(甚至是验证范围重叠的方法)执行验证,例如,在认可用户输入之前执行验证,确保用户输入只包含合法的字符,而且所有输入域的内容长度都没有超过范围(以防范可能出现的缓冲区溢出攻击),在此基础上再执行其他验证,确保用户输入的数据不仅合法,而且合理。必要时不仅可以采取强制性的长度限制策略,而且还可以对输入内容按照明确定义的特征集执行验证。下面几点建议将帮助你正确验证用户输入数据:

  ⑴ 始终对所有的用户输入执行验证,且验证必须在一个可靠的平台上进行,应当在应用的多个层上进行。

  ⑵ 除了输入、输出功能必需的数据之外,不要允许其他任何内容。

  ⑶ 设立“信任代码基地”,允许数据进入信任环境之前执行彻底的验证。

  ⑷ 登录数据之前先检查数据类型。

  ⑸ 详尽地定义每一种数据格式,例如缓冲区长度、整数类型等。

  ⑹ 严格定义合法的用户请求,拒绝所有其他请求。

  ⑺ 测试数据是否满足合法的条件,而不是测试不合法的条件。这是因为数据不合法的情况很多,难以详尽列举。

  二、五种常见的 ASP.NET安全缺陷

  下面给出了五个例子,阐述如何按照上述建议增强应用程序的安全性。这些例子示范了代码中可能出现的缺陷,以及它们带来的安全风险、如何改写最少的代码来有效地降低攻击风险。

  2.1 篡改参数

  ◎ 使用ASP.NET域验证器

  盲目信任用户输入是保障Web应用安全的第一敌人。用户输入的主要来源是HTML表单中提交的参数,如果不能严格地验证这些参数的合法性,就有可能危及服务器的安全。

  下面的C#代码查询后端SQL Server数据库,假设user和pass word变量的值直接取自用户输入:



SqlDataAdapter my_query = new SqlDataAdapter(
 "SELECT * FROM accounts WHERE acc_user='" + user + "' AND acc_password='" + password, the_connection);



  从表面上看,这几行代码毫无问题,实际上却可能引来SQL注入式攻击。攻击者只要在user输入域中输入“OR 1=1”,就可以顺利登录系统,或者只要在查询之后加上适当的调用,就可以执行任意Shell命令:



'; EXEC master..xp_cmdshell(Oshell command here')--



  ■ 风险分析

  在编写这几行代码时,开发者无意之中作出了这样的假定:用户的输入内容只包含“正常的”数据——合乎人们通常习惯的用户名字、密码,但不会包含引号之类的特殊字符,这正是SQL注入式攻击能够得逞的根本原因。黑客们可以借助一些具有特殊含义的字符改变查询的本意,进而调用任意函数或过程。

  ■ 解决方案

  域验证器是一种让ASP.NET开发者对域的值实施限制的机制,例如,限制用户输入的域值必须匹配特定的表达式。

  要防止上述攻击行为得逞,第一种办法是禁止引号之类的特殊字符输入,第二种办法更严格,即限定输入域的内容必须属于某个合法字符的集合,例如“[a-zA-Z0-9]*”。

  2.2 篡改参数之二

  ◎ 避免验证操作的漏洞

  然而,仅仅为每个输入域引入验证器还不能防范所有通过修改参数实施的攻击。在执行数值范围检查之时,还要指定正确的数据类型。

  也就是说,在使用ASP.NET的范围检查控件时,应当根据输入域要求的数据类型指定适当的Type属性,因为Type的默认值是String。








  ■ 风险分析

  由于没有指定Type属性值,上面的代码将假定输入值的类型是String,因此RangeValidator验证器只能确保字符串由0-9之间的字符开始,“0abcd”也会被认可。

  ■ 解决方案

  要确保输入值确实是整数,正确的办法是将Type属性指定为Integer:




MaximumValue="9" Type="Integer"



  2.3 信息泄漏

  ◎ 让隐藏域更加安全

  在ASP.NET应用中,几乎所有HTML页面的__VIEWSTATE隐藏域中都可以找到有关应用的信息。由于__VIEWSTATE是BASE 64编码的,所以常常被忽略,但黑客可以方便地解码BASE 64数据,用不着花什么力气就可以得到__VIEWSTATE提供的详细资料。

  ■ 风险分析

  默认情况下,__VIEWSTATE数据将包含:

  ⑴ 来自页面控件的动态数据。

  ⑵ 开发者在ViewState中显式保存的数据。

  ⑶ 上述数据的密码签字。

  ■ 解决方案

  设置EnableViewStatMAC="true",启用__VIEWSTATE数据加密功能。然后,将machineKey验证类型设置成3DES,要求ASP.NET用Triple DES对称加密算法加密ViewState数据。

  2.4 SQL注入式攻击

  ◎ 使用SQL参数API

  正如前文“篡改参数”部分描述的,攻击者可以在输入域中插入特殊字符,改变SQL查询的本意,欺骗数据库服务器执行恶意的查询。

  ■ 风险分析

  恶意查询有可能获取后端数据库保存的任何信息,例如客户信用卡号码的清单。

  ■ 解决方案

  除了前面介绍的办法——用程序代码确保输入内容只包含有效字符,另一种更加健壮的办法是使用SQL参数API(例如ADO.NET提供的API),让编程环境的底层API(而不是程序员)来构造查询。

  使用这些API时,开发者或者提供一个查询模板,或者提供一个存储过程,然后指定一系列的参数值,由底层API将参数值嵌入到查询模板,然后将构造出来的查询提交给服务器查询。这种办法的好处是确保参数能够正确地嵌入,例如,系统将对引号进行转义处理,从根本上杜绝SQL注入式攻击的发生。同时,在表单中引号仍是一个允许输入的有效字符,这也是使用底层API的一个优点。

  按照这种思路修改前文“篡改参数”部分的例子,结果如下:



SqlDataAdapter my_query = new SqlDataAdapter("SELECT * FROM accounts
WHERE acc_user= @user AND acc_password=@pass", the_connection);
SqlParameter userParam = my_query.Select_Command.Parameters.Add(
"@user",SqlDb.VarChar,20);
userParam.Value=user;
SqlParameter passwordParam = my_query.Select_Command.Parameters.Add(
"@",SqlDb.VarChar,20);
passwordParam.Value=password;



  2.5 跨站脚本执行

  ◎ 对外发的数据进行编码

  跨站脚本执行(Cross-site scripting)是指将恶意的用户输入嵌入到应答(HTML)页面。例如,下面的ASP.NET页面虽然简单,却包含着一个重大的安全缺陷:



<%@ Page Language="vb" %>

标签文字


请在此处输入反馈信息




Text="提交!" OnClick="do_feedback">






  ■ 风险分析

  攻击者可以用JavaScript代码构造一个恶意的查询,点击链接时JavaScript就会运行。举例来说,脚本可以通过下面的用户输入来嵌入:







  ■ 解决方案

  在一个双层的安全体系中,对HTML页面中出现的外发用户数据执行输入验证和HTML编码,确保浏览器只把用户输入数据当成纯粹的文本,而不是其他具有特殊含义的内容,例如HTML代码、JavaScript脚本。

  对于本例,只要加入一个HtmlEncode调用即可:



Label1.Text=Server.HtmlEncode(feedback.Text)



  这样,应答HTML流将包含用户输入内容的HTML编码版本,也就是说,浏览器不会执行用户输入的JavaScript代码,因为根本不存在HTML的“
ToDesk配置文件config.ini完全解析:从安全设置到代理配置,一篇搞定 本文全面解析ToDesk配置文件config.ini,涵盖安全设置、代理配置等高级技巧,帮助IT专业人士优化远程控制体验。从基础参数到企业级安全加固,提供详细配置指南和实用建议,确保高效与安全并重。 阅读详情

相关推荐

CVE-2019-18935:RCE漏洞用于ASP.NET AJAX的Telerik UI中的.NET JSON反序列化漏洞

CVE-2019-18935 Telerik UI中用于ASP.NET AJAX的.NET JSON反序列化漏洞的概念验证漏洞,允许远程执行代码。 描述 是用于Web应用程序的UI组件的广泛使用的套件。 它以不安全的方式反序列化JSON对象,从而导致在软件的基础主机上执行任意远程代码。 有关更多信息,请参见: DerpCon演讲( )详细介绍了利用不安全的反序列化的其他基础知识,并将其应用于这种利用,并逐步介绍了一些在ASP.NET Web应用程序上获取shell的技巧。 该主教福克斯,包括此漏洞的完整的演练,并利用此问题的详细信息(带补丁的说明一起)。 入门 先决条件 您需要安装才能使用build-dll.bat编译混合模式.NET程序集DLL有效负载。 安装 git clone https://github.com/noperator/CVE-2019-18935.git &&

代码审计-ASP.NET项目-未授权访问漏洞

Inherits msdn解释:定义提供给页继承的代码隐藏类。 它可以是从 Page 类派生的任何类。 此特性与 CodeFile 特性一起使用,后者包含指向代码隐藏类的源文件的路径。 Inherits 特性在使用 C# 作为页面语言时区分大小写,而在使用 Visual Basic 作为页面语言时不区分大小写。

xiaoheizi的博客 3705

FX2N-2AD模块实战:从硬件连接到FROM/TO指令编程详解

本文详细解析FX2N-2AD模拟量输入模块的硬件连接与FROM/TO指令编程技巧,涵盖BFM缓冲存储器配置、梯形图程序设计及工程实战经验。通过实例演示如何实现精准信号采集与数据处理,特别针对PLC系统中的常见故障提供解决方案,助力工业自动化工程师高效完成设备调试与维护。

prometheus9mon的博客 508

asp.net core web框架可能存在哪些漏洞

ASP.NET Core 是一个开源的跨平台的 web 应用程序开发框架,它建立在 ASP.NET 框架的基础上,具有更高的性能和可扩展性。为了减少漏洞的风险,开发人员应该实施安全开发最佳实践,如输入验证、输出编码、身份验证和授权、安全的会话管理、日志记录和监控等。此外,及时更新和修补 ASP.NET Core 框架和相关组件也是非常重要的。

极客神殿 947

Ubuntu安装opencv4.5(自己安装过程详细)

1.下载opencv 在opencv官网下载source版,下载链接 http://opencv.org/releases.html。别下载错版本 下载过程就不多说了。 2.安装过程 2.1解压 unzip opencv-4.5.0.zip cd opencv-4.5.0 2.2安装依赖的库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-

weixin_45629790的博客 1万+

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

Yilu264的博客 1万+

ASP.NET常见漏洞

未隐藏错误讯息  开发人员常会将方便排错,但正式上线时却忘了移除,导致一旦程序出错,相关程序代码细节甚至程序片段就赤裸裸地展示出来。黑客可能由其中找到相关的文件位置、数据库信息、组件版本... 等信息,提供入侵的指引。关闭Request Validation  依Hunt的统计,近30%的网站豪迈地关闭了全站的Request验证。若真有需要,针对页面关闭就好,至少伤害面变小,但如果心有余力,避

www.i201314.net 5716

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 376

分享来自zoomla!逐浪CMS的五种常见的ASP.NET安全缺陷

分享来自zoomla!逐浪CMS的五种常见的ASP.NET安全缺陷    篡改参数    使用ASP.NET域验证器   盲目信任用户输入是保障Web应用安全的第一敌人。用户输入的主要来源是HTML表单中提交的参数,如果不能严格地验证这些参数的合法性,就有可能危及服务器的安全。  篡改参数之二    避免验证操作的漏洞   然而,仅仅为每个输入域引入验证器还不能防范所有通过修改参

q1579153275的专栏 608

ROS——无人机ROS仿真包 rotors_simulator 编译教程

文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth

漫长IT路 5865

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111

五种常见的ASP.NET应用程序安全缺陷

五种常见的ASP.NET应用程序安全缺陷 一、不能盲目相信用户输入  在Web应用开发中,开发者最大的失误往往是无条件地信任用户输入,假定用户(即使是恶意用户)总是受到浏览器的限制,总是通过浏览器和服务器交互,从而打开了攻击Web应用的大门。实际上,黑客们攻击和操作Web网站的工具很多,根本不必局限于浏览器,从最低级的字符模式的原始界面(例如telnet),到CGI脚本扫描器、Web代理、We

Kevin yan的专栏 2140

ResNet改进(45):结合通道混洗(ShuffleNet)的混合架构

本文提出了一种创新的卷积神经网络(CNN)架构CustomResNet,它将ResNet34与通道混洗(ChannelShuffle)技术相结合。该模型通过ShuffleBlock模块替换原始ResNet层,包含三个核心组件:1) ChannelShuffle模块实现通道分组混洗;2) ShuffleBlock模块整合点卷积、分组卷积和残差连接;3) CustomResNet主模型保持ResNet整体架构但替换核心层为ShuffleBlock。这种设计既保留了ResNet的残差学习能力,又通过通道混洗增强特

2401_82355416的博客 212
上一篇: JSP应用的安全问题
下一篇: 编写安全的ASP代码
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值