`

ASP.NET中如何防范SQL注入式攻击

 
阅读更多

ASP.NET中如何防范SQL注入式攻击

一、什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:

⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder( "SELECT * from Users WHERE login = '") .Append(txtLogin.Text).Append("' AND password='") .Append(txtPassword.Text).Append("'");

⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。

⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

二、如何防范?

好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”显然会得到与“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = 'mas' -- AND password =''”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。

⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。

分享到:
评论

相关推荐

    ASP.NET中防范SQL注入式攻击研究.pdf

    在***中防范SQL注入式攻击的方法主要有以下几种: 1. 动态构造SQL查询时过滤:在执行SQL查询之前,对用户输入的数据进行严格过滤,移除其中的非法字符,如引号、分号以及转义字符等。这种方法可以阻止SQL注入代码...

    ASP.NET下如何防范SQL注入式攻击

    在ASP.NET开发环境中,防范SQL注入式攻击是确保应用程序安全的关键步骤之一。SQL注入是一种常见的攻击方式,通过将恶意SQL代码插入到查询语句中,攻击者可以绕过身份验证,篡改数据,甚至完全控制数据库。为了保护...

    ASP.NET防范SQL注入式攻击的方法

    在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:   ⑴ 某个ASP.NET Web应用有一个登录页面,这...

    ASP.NET中如何防范SQL注入式攻击.pdf

    在***开发中,SQL注入式攻击是一种常见的网络攻击手段,攻击者通过在Web表单的输入域或查询字符串中插入SQL代码片段,试图让数据库执行非预期的SQL命令,以达到破坏或获取敏感信息的目的。防范SQL注入攻击是保障Web...

    在ASP.NET中SQL注入式攻击探析.pdf

    在ASP.NET中SQL注入式攻击探析.pdf

    net中sql注入式攻击与防范秘籍

    ### .NET中SQL注入式攻击与防范秘籍 #### SQL注入概述 SQL注入是一种常见的网络安全攻击方式,攻击者通过在数据库查询中插入恶意SQL语句,以达到非法获取数据、篡改数据甚至控制整个数据库的目的。对于使用.NET...

    在ASP.net中如何预防SQL注入式攻击.pdf

    在***环境下,SQL注入式攻击是一种常见的安全威胁。SQL注入攻击主要通过在用户输入的数据中嵌入恶意SQL代码,进而欺骗数据库服务器执行非法的数据库查询或者命令。该攻击手段的成功实现往往是因为在动态生成SQL命令...

    asp.net下检测SQL注入式攻击代码

    本文将详细分析ASP.NET中的一个用于防止SQL注入攻击的实用工具——`PageValidate`类,并深入探讨其工作原理和实际应用。 #### PageValidate 类详解 `PageValidate` 类包含了一系列用于验证和清理用户输入的方法,...

    最新ASP.NET+SQL Server项目

    7. **安全性**:学习如何实现ASP.NET的身份验证和授权机制,以及SQL Server的安全策略,如用户权限管理和SQL注入防护。 8. **性能优化**:讨论如何优化ASP.NET应用程序和SQL Server查询,提高系统性能,例如使用...

    基于ASP.NET的SQL注入攻击与防范.pdf

    首先,SQL注入式攻击是指攻击者利用程序员在处理用户输入数据时对合法性检测不够严格或未检测的问题,恶意构造特殊的数据输入,从而获取数据库内部信息,甚至对数据库执行增删改查等操作。攻击者实施SQL注入的一般...

    在ASP.NET中防止注入攻击

    本文旨在详细介绍如何在ASP.NET中有效防止各种类型的注入攻击,包括SQL注入、跨站脚本(XSS)攻击以及未经授权的文件访问等。 #### 验证所有输入 首先,应该在程序中验证所有的不可信输入。这包括但不限于表单字段...

    ASP.NET和SQLserver搭配运行的教程

    7. **安全性**:确保ASP.NET和SQL Server的安全性是关键任务,包括验证用户身份、限制权限、加密敏感数据、防止SQL注入攻击等。ASP.NET的身份验证和授权机制与SQL Server的角色管理和权限控制相结合,可实现精细的...

    用asp.net.sql做的一个购物车

    7. **安全性**:在购物车系统中,需要考虑数据安全性和用户隐私,例如防止SQL注入攻击,使用加密技术保护敏感信息,以及确保只有授权用户才能访问和修改他们的购物车。 8. **事务处理**:购物车操作,如添加或删除...

    网上书店 源码 asp.net实现,sql数据库

    同时,对用户输入进行验证和过滤,防止SQL注入和XSS攻击,以保护系统安全。 8. **支付集成**: 虽然描述中未提及,但一个完整的网上书店系统通常会集成第三方支付接口,如支付宝、微信支付等,以便用户在线支付。...

    ASP.NET+SQL Server动态网站开发案例精选

    此外,这些案例可能还会涉及安全性问题,如防止SQL注入攻击,使用ASP.NET的身份验证和授权机制保护用户数据,以及利用SQL Server的权限管理功能确保数据安全。可能还会探讨性能优化,比如使用存储过程提高查询效率,...

    ASP.NET中实现身份验证方案

    ·剖析ASP.NET2.0站点导航功能之建立导航 ·用JavaScript解决ASP.NET...·ASP.NET中如何防范SQL注入式攻击 ·IIS、ASP.NET和SQLServer的安全性问题 ·ASP.net中随机数应用实例 ·用asp.net实现的把本文推荐给好友功能

Global site tag (gtag.js) - Google Analytics