概述
SQL注入: 应用程序在向后台数据库传递SQL( Structured Query Language , 结构化查询语言 )查询时,如果攻击者提供了影响该查询的能力,就会引发SQL注入。SQL注入不只是一种会影响Web应用的漏洞,对于任何从不可信源获取输入的代码来说,如果使用输入来构造动态SQL语句,就有可能也会受到攻击。
Web应用原理
Web应用它们都具有交互性并且多半是数据库驱动的。
数据库驱动的Web应用通常包含三层:表示层( Web浏览器或呈现引擎)、逻辑层( 如C#、ASP、.NET、PHP、JSP等编程语言 ) 和存储层( 如Microft SQL Server、MySql、Oracle等数据库)。
Web浏览器( 表示层 )向中间层( 逻辑层 )发送请求,中间层通过查询、更新数据库( 存储层 ) 响应该请求。
数据库驱动的的Web应用的三层架构:
复杂架构
三层架构不具扩展性,所以对三层架构就行改进。n层应用程序开发范式。其中包括一种4层解决方法,该方案在Web服务器和数据库之间使用了一层中间件 ( 通常称为应用服务器 )。n层架构中的应用服务器负责将API ( 应用编程接口 )提供给业务逻辑和业务流程以供程序使用。可以根据需要引入其他的Web服务器。此外应用服务器可以与多个数据源通信,包括数据库、大型机以及其他旧式系统。
四层架构
Web浏览器( 表示层 )向中间层( 逻辑层 )发送请求,后者依次调用由位于应用层的应用服务器提供的API,应用层通过查询、更新数据库( 存储层 )来响应该请求。
理解SQL注入
SQL注入是一种将SQL代码插入或添加到应用( 用户 )的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。
参数化查询是指SQL语句中包含一个或多个嵌入参数的查询。可以在运行过程中将参数传递给这些查询。包含的嵌入到用户输入中的参数不会被解析成命令而执行,而且代码不存在被注入的机会。
SQL数据库将单引号字符 ( ’ ) 解析成代码与数据间的分割线。单引号外边的内容均是需要运行的代码,而用单引号引起来的内容均是数据。
在进行攻击和防御时,了解各种数据库的特性是非常必要的。特别是各种数据库中的转译字符。
SQL注入的产生过程
1. 转义字符处理不当
2. 类型处理不当
3. 查询语句处理不当
4. 错误处理不当
5. 多个提交处理不当
6. 不安全数据库配置