SQL注入
来自站长百科
(重定向自SQL注入攻击)
SQL注入(SQL注入攻击)就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
简介[ ]
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入攻击[ ]
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。
SQL注入原理[ ]
- SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字符为不同命令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等的条件式)
- SQL命令对于传入的字串参数是用单引号字符所包起来。但连续2个单引号字符,在SQL数据库中,则视为字串中的一个单引号字符。
- SQL命令中,可以注入注解连续2个减号字符——后的文字为注解,或“/*”与“*/”所包起来的文字为注解
- 如果在组合SQL的命令字串时,未针对单引号字符作取代处理的话,将导致该字符变量在填入命令字串时,被恶意窜改原本的SQL语法的作用
SQL注入影响[ ]
- 资料表中的资料外泄,例如个人机密资料,帐户资料,密码等。
- 数据结构被黑客探知,得以做进一步攻击(例如SELECT * FROM sys.tables)。
- 数据库服务器被攻击,系统管理员帐户被窜改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
- 取得系统较高权限后,有可能得以在网页加入恶意连结以及XSS。
- 经由数据库服务器提供的操作系统支援,让黑客得以修改或控制操作系统(例如xp_cmdshell "net stop iisadmin"可停止服务器的IIS服务)。
- 破坏硬盘资料,瘫痪全系统(例如xp_cmdshell "FORMAT C:")。
SQL注入防范[ ]
- 在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。大多数的数据API,包括ADO和ADO. NET,有这样的支持,允许你指定所提供的参数的确切类型(譬如,字符串,整数,日期等),可以保证这些参数被恰当地escaped/encoded了,来避免黑客利用它们。一定要从始到终地使用这些特性。
- 建立一个正式的安全过程,做更新时,对所有的编码做审评。
- 不要把敏感性数据在数据库里以明文存放。
- 确认编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。
- 锁定数据库的安全,只给访问数据库的web应用功能所需的最低的权限。
- 从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试。