- 浏览: 47151 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
SQL注入简述
SQL Injection攻击具有很大的危害,攻击者可以利用它读取、修改或者删除数据库内的数据,获取数据库中的用户名和密码等敏感信息,甚至可以 获得数据库管理员的权限。如果能够再利用SQLServer扩展存储过程和自定义扩展存储过程来执行一些系统命令,攻击者还可以获得该系统的控制权。而且,SQL Injection 也很难防范。网站管理员无法通过安装系统补丁或者进行简单的安全配置进行自我保护,一般的防火墙也无法拦截SQL Injection 攻击。
SQL Injection 原理:
结构化查询语言(SQL)是一种用来和数据库交互的文本语言。SQL Injection 就是利 用某些数据库的外部接口把用户数据插入到实际的数据库操作语言(SQL)当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入 的数据没有进行严格的过滤,导致非法数据库查询语句的执行。
如下面的用户登陆验证程序:
$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
$result = mysql_db_query($dbname, $sql);
如果我们提交如下url:
http://127.0.0.1/injection/user.php?username=angel' or '1=1
那么就可以成功登陆系统,但是很显然这并不是我们预期的,同样我们也可以利用sql的注释语句实现sql注入,如下面的例子:
http://127.0.0.1/injection/user.php?username=angel'/*
http://127.0.0.1/injection/user.php?username=angel'%23
这样就把后面的语句给注释掉了!说说这两种提交的不同之处,我们提交的第一句是利用逻辑运算,第二、三句是根据mysql的特性,mysql支持/*和#两种注释格式,所以我们提交的时候是把后面的代码注释掉,值得注意的是由于编码问题,在IE地址栏里提交#会变成空的,所以我们在地址栏提交的时候,应该提交%23,才会变成#,就成功注释了, 这个比逻辑运算简单得多了。
开发中可以采取的措施
1) prepareStatement + Bind-variable对Java和Jsp 开发的应用,可以使用 prepareStatement + Bind-variable 来防止sql注入,另外从PHP 5开始,也在扩展的mysqli中支持prepared statements,所以在使用这类语言作数据库开发时,强烈建议使用prepareStatement + Bind-variable 来实现,而尽量不要使用拼接的sql。
2) 使用应用程序提供的转换函数
很多应用程序接口都提供了对特殊的字符进行转换的函数,恰当的使用这些函数,可以防止应用程序用户输入使应用程序生成不期望的效果的语句的数值。
MySQL C API:使用mysql_real_escape_string() API调用。
MySQL++:使用escape和quote 修饰符。
PHP:使用mysql_real_escape_string()函数(适用于PHP 4.3.0,之前的版本请使用mysql_escape_string(), PHP 4.0.3之前的版本请使用addslashes())。从PHP 5开始,可以使用扩展的mysqli,这是对MYSQL新特性的一个扩展支持,其中的一个优点就是支持prepared statements。
Perl DBI :使用placeholders或者quote()方法。
Ruby DBI :使用placeholders或者quote()方法。
Java JDBC :使用PreparedStatement和 placeholders。
3) 自己定义函数进行校验
如果现有的转换函数仍然不能满足要求,则需要自己编写函数进行输入校验。输入验证是一个很复杂的问题。输入验证的途径可以分为以下几种:
整理数据使之变得有效;
拒绝已知的非法输入;
只接受已知的合法的输入。
所以如果想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证。
SQL Injection攻击具有很大的危害,攻击者可以利用它读取、修改或者删除数据库内的数据,获取数据库中的用户名和密码等敏感信息,甚至可以 获得数据库管理员的权限。如果能够再利用SQLServer扩展存储过程和自定义扩展存储过程来执行一些系统命令,攻击者还可以获得该系统的控制权。而且,SQL Injection 也很难防范。网站管理员无法通过安装系统补丁或者进行简单的安全配置进行自我保护,一般的防火墙也无法拦截SQL Injection 攻击。
SQL Injection 原理:
结构化查询语言(SQL)是一种用来和数据库交互的文本语言。SQL Injection 就是利 用某些数据库的外部接口把用户数据插入到实际的数据库操作语言(SQL)当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入 的数据没有进行严格的过滤,导致非法数据库查询语句的执行。
如下面的用户登陆验证程序:
$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
$result = mysql_db_query($dbname, $sql);
如果我们提交如下url:
http://127.0.0.1/injection/user.php?username=angel' or '1=1
那么就可以成功登陆系统,但是很显然这并不是我们预期的,同样我们也可以利用sql的注释语句实现sql注入,如下面的例子:
http://127.0.0.1/injection/user.php?username=angel'/*
http://127.0.0.1/injection/user.php?username=angel'%23
这样就把后面的语句给注释掉了!说说这两种提交的不同之处,我们提交的第一句是利用逻辑运算,第二、三句是根据mysql的特性,mysql支持/*和#两种注释格式,所以我们提交的时候是把后面的代码注释掉,值得注意的是由于编码问题,在IE地址栏里提交#会变成空的,所以我们在地址栏提交的时候,应该提交%23,才会变成#,就成功注释了, 这个比逻辑运算简单得多了。
开发中可以采取的措施
1) prepareStatement + Bind-variable对Java和Jsp 开发的应用,可以使用 prepareStatement + Bind-variable 来防止sql注入,另外从PHP 5开始,也在扩展的mysqli中支持prepared statements,所以在使用这类语言作数据库开发时,强烈建议使用prepareStatement + Bind-variable 来实现,而尽量不要使用拼接的sql。
2) 使用应用程序提供的转换函数
很多应用程序接口都提供了对特殊的字符进行转换的函数,恰当的使用这些函数,可以防止应用程序用户输入使应用程序生成不期望的效果的语句的数值。
MySQL C API:使用mysql_real_escape_string() API调用。
MySQL++:使用escape和quote 修饰符。
PHP:使用mysql_real_escape_string()函数(适用于PHP 4.3.0,之前的版本请使用mysql_escape_string(), PHP 4.0.3之前的版本请使用addslashes())。从PHP 5开始,可以使用扩展的mysqli,这是对MYSQL新特性的一个扩展支持,其中的一个优点就是支持prepared statements。
Perl DBI :使用placeholders或者quote()方法。
Ruby DBI :使用placeholders或者quote()方法。
Java JDBC :使用PreparedStatement和 placeholders。
3) 自己定义函数进行校验
如果现有的转换函数仍然不能满足要求,则需要自己编写函数进行输入校验。输入验证是一个很复杂的问题。输入验证的途径可以分为以下几种:
整理数据使之变得有效;
拒绝已知的非法输入;
只接受已知的合法的输入。
所以如果想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证。
发表评论
-
基于Hash算法的Mysql分表处理
2015-10-29 00:58 560下面为您介绍的Mysql ... -
数据库中表散列
2015-10-29 00:52 561数据库中的散列法 ... -
mysql大数据高并发处理
2015-10-26 22:00 402一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 419优化SQL查询:如何写出高性能SQL语句 这个问题 ... -
MySqL性能优化
2015-09-06 21:26 0I 硬件配置优化 Ø CPU选择:多核 ... -
Mysq日志管理(错误日志、查询日志、慢查询日志)
2015-09-06 21:01 0错误日志 记录内容:包含了当mysqld启动和停止时,以及服 ... -
MySql均衡负载
2015-09-06 21:01 01) 利用mysql 复制分流查询操作 利用mysql的主从复 ... -
如何减少对Mysql的访问以优化SQL语句
2015-09-06 21:00 0避免对同一数据做重复 ... -
使用mysql连接池提高性能
2015-09-06 20:59 0对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建 ... -
Mysql锁的优化
2015-09-06 20:59 0获取锁等待情况 可以 ... -
Mysql数据表的优化
2015-09-26 22:26 412优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 586MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 315Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 379在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 362默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3261) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4431) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 396索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 325通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql SQL Mode详解
2015-09-07 11:50 443Mysql SQL Mode简介 MySQL服务器能够工作在 ...
相关推荐
PHP+Mysql 带SQL注入源码、下载解压部署到环境中去就行了。
mybatis如何防止SQL注入
基于MySQL的SQL注入攻击,值得一看的sql注入教程
Python连接Mysql库文件, 1、防止SQL注入, 2、用数组编写SQL, 3、防止误删数据和误更新数据 4、支持千万级QPS
MySQL的SQL注入攻击(SEC-W05-003.1) 注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,可能 B/S模式应用开发的发展
使用mysql odbc后就比较好办,可以使用sql server的管理工具,也可以使用mysql的管理工具,更可以使用其它方的管理工具。这里介绍一个使用sql的mmc的方法 ,将sql server的数据转化为mysql的数据库,将源和目的反之...
解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...
宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞...MySQL数据库)、SQL注入漏洞测试(delete注入)、SQL过滤字符后手工注入漏洞测试、延时注入(时间注入)等...
Web 安全性测试——SQL 注入 实例讲解 MYSQL 注入中导出可执行文件至启动项原理μ一ν 实例讲解 MYSQL 注入中导出可执行文件至启动项原理μ二ν 实例讲解 MYSQL 注入中导出可执行文件至启动项原理μ...
mysql sqlapi代码示例,sqlapi链接各类数据库mysql、db2、oracle、sqlserver、sqllite等等
MySqlFrm.exe是c#版本的frm转sql工具,需要.net 4.0与mysql环境,CMD命令行如下: mysqlfrm <username> <password> <port> 例如: mysqlfrm root pass 3306 c:\dbcopy 会将c:\dbcopy目录下所有的frm转换为...
《安全技术经典译丛:SQL注入攻击与防御(第2版)》由一批SQL注入专家编写,他们对Oracle、SQLServer、MySQL和PostgreSQL数据库平台的SQL注入问题具有独到的见解。 主要内容: ·发现、确认和自动发现SQL注入...
如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符。 所谓SQL注入,就是通过把SQL命令插入到...
本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL...
数据库数据之间的转化,软件方便快捷 sql转化成mysql工具 mysql转化成sql server