`

如何防范SQL注入攻击

阅读更多
如何防范SQL注入攻击

  SQL注入攻击是你需要担心的事情,不管你用什么web编程技术,再说所有的web框架都需要担心这个的。你需要遵循几条非常基本的规则:

  1、在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。大多数的数据API,包括ADO和ADO.NET,有这样的支持,允许你指定所提供的参数的确切类型(譬如,字符串,整数,日期等),可以保证这些参数被恰当地escaped/encoded了,来避免黑客利用它们。一定要从始到终地使用这些特性。

  例如,在ADO.NET里对动态SQL,你可以象下面这样重写上述的语句,使之安全:

  Dim SSN as String = Request.QueryString("SSN")

  Dim cmd As new SqlCommand("SELECT au_lname, au_fname FROM authors WHERE au_id = @au_id")

  Dim param = new SqlParameter("au_id", SqlDbType.VarChar)

  param.Value = SSN

  cmd.Parameters.Add(param)

  这将防止有人试图偷偷注入另外的SQL表达式(因为ADO.NET知道对au_id的字符串值进行加码),以及避免其他数据问题(譬如不正确地转换数值类型等)。注意,VS 2005内置的TableAdapter/DataSet设计器自动使用这个机制,ASP.NET 2.0数据源控件也是如此。

  一个常见的错误知觉(misperception)是,假如你使用了存储过程或ORM,你就完全不受SQL注入攻击之害了。这是不正确的,你还是需要确定在给存储过程传递数据时你很谨慎,或在用ORM来定制一个查询时,你的做法是安全的。

  2、在部署你的应用前,始终要做安全审评(security review)。建立一个正式的安全过程(formal security process),在每次你做更新时,对所有的编码做审评。后面一点特别重要。很多次我听说开发队伍在正式上线(going live)前会做很详细的安全审评,然后在几周或几个月之后他们做一些很小的更新时,他们会跳过安全审评这关,推说,“就是一个小小的更新,我们以后再做编码审评好了”。请始终坚持做安全审评。

  3、千万别把敏感性数据在数据库里以明文存放。我个人的意见是,密码应该总是在单向(one-way )hashed过后再存放,我甚至不喜欢将它们在加密后存放。在默认设置下,ASP.NET 2.0 Membership API 自动为你这么做,还同时实现了安全的SALT 随机化行为(SALT randomization behavior)。如果你决定建立自己的成员数据库,我建议你查看一下我们在这里发表的我们自己的Membership provider的源码。同时也确定对你的数据库里的信用卡和其他的私有数据进行了加密。这样即使你的数据库被人入侵(compromised)了的话,起码你的客户的私有数据不会被人利用。

  4、确认你编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。这么做是非常重要的,有助于捕捉住 (catch)“就是一个小小的更新,所有不会有安全问题”的情形带来的疏忽,来提供额外的安全层以避免偶然地引进坏的安全缺陷到你的应用里去。

  5、锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限从你的account payables表来生成报表,那么确认你禁止它对此表的 insert/update/delete 的权限。

  6、很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试。

  可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。

  7、对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。

  第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,为什么这么说呢?笔者想,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。

  1、对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。

  2、对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。

  3、把真正的管理员密码放在ID2后的任何一个位置

  由于SQL注入攻击针对的是应用开发过程中的编程不严密,因而对于绝大多数防火墙来说,这种攻击是“合法”的。问题的解决只有依赖于完善编程。专门针对SQL注入攻击的工具较少,Wpoison对于用asp,php进行的开发有一定帮助...。
分享到:
评论

相关推荐

    关于JSP防范SQL注入攻击

    ### 关于JSP防范SQL注入攻击 #### 一、引言 随着互联网技术的发展与普及,Web应用程序的安全问题越来越受到人们的关注。其中,SQL注入攻击是威胁Web应用安全的主要漏洞之一,尤其对于采用JSP(Java Server Pages)...

    JSP如何防范SQL注入攻击

    ### JSP如何防范SQL注入攻击 #### 背景介绍 在进行Web开发的过程中,安全性是不容忽视的重要一环。特别是在使用动态语言如Java Server Pages (JSP)时,开发者必须时刻警惕各种潜在的安全威胁,其中SQL注入是最常见...

    如何防范SQL注入攻击.pdf

    防范SQL注入攻击的方法多种多样,本文介绍的两种方法都具有较强的可行性。第一种方法是使用正则表达式验证控件法。此方法通过对用户输入进行严格的模式匹配来阻止非法字符的输入。在实际应用中,可以在用户输入框...

    一种基于LINQ防范SQL注入攻击的多层体系结构.pdf

    在这份文档中,徐海涛和孙丹凤两位作者主要探讨了SQL注入攻击的原理、现有防范方法,以及一种基于LINQ的多层体系结构来防范SQL注入攻击的方案。以下是对文中提及知识点的详细阐述: 1. SQL注入攻击原理 SQL注入是一...

    追根溯源 防范SQL注入攻击.pdf

    追根溯源 防范SQL注入攻击.pdf

    用Java Web防范SQL注入攻击.pdf

    【Java Web防范SQL注入攻击】 Java Web平台因其跨平台性和"一次编写,到处运行"的特性,被广泛应用在各种web应用程序开发中。然而,如果不妥善处理用户输入,就可能为SQL注入攻击提供机会。以下是一些Java Web环境中...

    ASP_NET防范SQL注入攻击的研究与实践.kdh

    ASP_NET防范SQL注入攻击的研究与实践.kdh

    《SQL注入攻击与防御》PDF版本下载.txt

    定期对开发人员进行安全意识培训,增强他们识别和防范SQL注入攻击的能力。 综上所述,SQL注入攻击是一种严重的安全威胁,但通过实施上述防御策略可以显著降低受到攻击的风险。对于企业来说,建立一套完善的安全管理...

    ASP.NET网站如何防范SQL注入攻击.pdf

    ASP.NET网站如何防范SQL注入攻击.pdf

    ASP.NET防范SQL注入攻击的研究与实践.pdf

    ASP.NET防范SQL注入攻击的研究与实践.pdf

    SQL注入攻击与防范措施.pdf

    为了防范SQL注入攻击,开发人员必须采取多种措施。首先,应对所有用户输入进行严格的验证和转义处理,避免直接将用户输入拼接到SQL语句中。其次,使用参数化查询或预编译语句,这样可以有效避免恶意SQL代码被数据库...

    sql注入攻击的详解

    三、防范SQL注入攻击的策略 1. **参数化查询/预编译语句**:使用预编译的SQL语句,将用户输入作为参数传递,而不是直接拼接到SQL字符串中。 2. **输入验证**:对用户输入进行严格的检查,确保其符合预期的数据格式...

    SQL注入攻击及其防范技术研究.pdf

    在防范SQL注入攻击方面,文章提到了构建完善的防范体系,其核心在于对输入数据的合法性进行严格校验。防范措施包括: 1. 防范原则:通过限制对数据库的访问权限,使得攻击者即使能够构造出SQL注入代码,也无法执行...

    SQL注入攻击的原理及其防范措施

    防范SQL注入攻击的措施有很多,以下是一些常见的方法: 1.使用参数化查询:使用参数化查询可以避免恶意的SQL代码执行,例如,使用stored procedure或prepared statement。 2.输入验证:对用户输入数据进行严格的...

    SQL注入攻击与防御.pdf

    尽管文档的具体内容没有给出,但可以从标题、描述以及标签中推断出该文档涉及的是关于如何理解和防范SQL注入攻击的专业知识。接下来,我们将围绕这一主题展开详细的讨论。 ### SQL注入攻击概述 SQL注入...

    SQL注入攻击与防范研究

    为了有效防范SQL注入攻击,可以从以下几个方面着手: 1. **参数化查询**:使用参数化查询可以有效防止SQL注入攻击。这种方法通过将用户输入的数据作为参数传递给SQL语句,而不是将其直接拼接到查询语句中,可以避免...

    SQL注入攻击实验报告

    - **实验目的**:本实验旨在通过搭建一个简单的Web应用程序,模拟SQL注入攻击的过程,并探讨相应的防御措施,帮助理解SQL注入攻击的基本原理及其防范策略。 #### 二、实验原理 - **SQL注入的概念**:SQL注入是一种...

    基于LINQ架构防范SQL注入攻击的公共自行车交通系统.pdf

    【基于LINQ防范SQL注入】 在公共自行车交通系统中,采用基于LINQ的多层体系结构可以有效防止SQL注入攻击。具体来说,开发者不再需要手动编写SQL查询语句,而是利用LINQ的查询语法来处理数据库操作。在运行时,LINQ ...

    SQL注入攻击的分析和应对方法.pdf

    #### 五、防范SQL注入攻击的方法 1. **参数化查询:**使用预编译语句或参数化查询来分离SQL代码和数据,确保用户输入不会被解释为SQL命令的一部分。 2. **输入验证:**对所有用户输入进行严格的验证,只接受符合...

    SQL注入攻击-网络安全攻防新焦点

    #### 三、如何有效防范SQL注入攻击 面对SQL注入攻击带来的威胁,企业和开发者应当采取积极的预防措施来保护自己的系统免受攻击。以下是一些有效的防范措施: 1. **输入验证**:对所有用户输入的数据进行严格的验证...

Global site tag (gtag.js) - Google Analytics