- 浏览: 50285 次
- 性别:
文章分类
- 全部博客 (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 582下面为您介绍的Mysql ... -
数据库中表散列
2015-10-29 00:52 589数据库中的散列法 ... -
mysql大数据高并发处理
2015-10-26 22:00 427一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 446优化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 435优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 620MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 346Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 404在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 387默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3461) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4741) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 417索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 348通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql SQL Mode详解
2015-09-07 11:50 470Mysql SQL Mode简介 MySQL服务器能够工作在 ...
相关推荐
这个"PHP+Mysql 带SQL注入源码 下载"的主题涉及到一个常见的安全问题——SQL注入,以及如何处理和预防这种情况。下面将详细讨论SQL注入、PHP与MySQL的结合使用,以及如何防范SQL注入。 **SQL注入** SQL注入是一种...
这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` 如果`orderParam`的值没有经过恰当的处理,直接使用`ORDER BY ${...
SQL注入攻击仍然是Web应用安全领域的一大威胁,尤其是对于那些使用MySQL等流行数据库的系统。通过深入了解SQL注入的工作原理,采取有效的预防措施,可以显著降低遭受此类攻击的风险。对于开发者而言,始终将安全编码...
文章提到的攻击案例表明,即使是像MySQL这样广泛使用的数据库,如果没有进行恰当的安全配置和防护,也容易受到SQL注入等攻击的影响。 3. Web应用程序的安全性:文章强调了B/S(浏览器/服务器)模式应用开发中的安全...
本篇文章将详细介绍如何使用Python连接MySQL数据库,并重点讲解如何防止SQL注入、利用数组编写SQL以及处理高并发场景,确保数据安全。 首先,Python中最常用的MySQL连接库是`pymysql`和`mysql-connector-python`。...
2. Prepared Statement:使用 Prepared Statement 来防止 SQL 注入攻击。 3. LIMIT 和 OFFSET:使用 LIMIT 和 OFFSET 限制查询结果,防止敏感数据泄露。 4.Least Privilege:使用最小权限原则,限制数据库用户的权限...
这时,可以使用如`mss2sql.rar`这样的工具,它通常能帮助用户自动化地将MySQL的表结构、数据、视图、存储过程等对象转换为SQL Server兼容的脚本,从而实现迁移。 转换过程一般包括以下步骤: 1. 数据库对象分析:...
防止SQL注入的最佳实践是多方面的,包括但不限于使用预编译SQL语句、采用ORM框架以及选择具有强大安全特性的第三方库。此外,开发者还需要时刻关注输入数据的有效性和安全性,定期审查代码以确保不存在潜在的安全...
* 根据不同的数据库管理系统, SQL注入漏洞可以分为Access注入、SQL Server注入、MySQL注入等。 * 不同的数据库管理系统有不同的函数、注入方法,所以在注入之前,我们还要判断一下数据库的类型。 四、 SQL注入漏洞...
总的来说,SQL Server 2008和MySQL的手工注入问题可以通过编程最佳实践、使用预处理语句、限制用户权限以及保持系统更新来有效预防。了解这些概念并能实际应用,对于任何IT专业人士,尤其是负责数据库管理和安全的...
本文将通过实例来描述 PHP 中的 MySQL 数据库的 SQL 注入问题以及怎样去防范。 一、SQL 注入的概念 SQL 注入是一种常见的攻击方式,攻击者通过在 Web 表单中输入恶意的 SQL 语句,来访问或修改数据库中的数据。...
SQL注入是一种常见的安全漏洞,通常发生在Web应用程序中,允许攻击者通过输入恶意SQL代码来操纵数据库。MySQL注入是其中一种,特别针对使用MySQL数据库的应用。本文将深入探讨MySQL注入的原理、常见攻击手段以及防范...
本示例“springboot多数据源切换mysql+sql server”是关于如何在Spring Boot项目中配置和使用多个数据库的数据源切换。下面将详细阐述这个主题的知识点。 首先,**多数据源**是指在一个应用中同时连接并操作多个...
由知名安全专家许云峰开发,这款工具设计给有一定技术基础的用户使用,它可以帮助网络安全专业人员或者开发者定位并修复潜在的SQL注入问题。 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入字段中插入恶意...
SQL注入是一种常见的网络安全漏洞,它发生在应用程序不恰当地将用户输入的数据与SQL命令混合在一起时。这个主题的压缩包文件包含了一系列与SQL注入攻击相关的源代码,主要针对Microsoft SQL Server (MSSQL) 和 MySQL...