`

Mysql使用SQL的安全问题,Mysql防止SQL注入

 
阅读更多
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) 自己定义函数进行校验
如果现有的转换函数仍然不能满足要求,则需要自己编写函数进行输入校验。输入验证是一个很复杂的问题。输入验证的途径可以分为以下几种:
整理数据使之变得有效;
拒绝已知的非法输入;
只接受已知的合法的输入。

所以如果想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证。
分享到:
评论

相关推荐

    PHP+Mysql 带SQL注入源码 下载

    这个"PHP+Mysql 带SQL注入源码 下载"的主题涉及到一个常见的安全问题——SQL注入,以及如何处理和预防这种情况。下面将详细讨论SQL注入、PHP与MySQL的结合使用,以及如何防范SQL注入。 **SQL注入** SQL注入是一种...

    mybatis如何防止SQL注入

    这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` 如果`orderParam`的值没有经过恰当的处理,直接使用`ORDER BY ${...

    基于MySQL的SQL注入攻击

    SQL注入攻击仍然是Web应用安全领域的一大威胁,尤其是对于那些使用MySQL等流行数据库的系统。通过深入了解SQL注入的工作原理,采取有效的预防措施,可以显著降低遭受此类攻击的风险。对于开发者而言,始终将安全编码...

    基于MySQL的SQL注入攻击(20191202232232).pdf

    文章提到的攻击案例表明,即使是像MySQL这样广泛使用的数据库,如果没有进行恰当的安全配置和防护,也容易受到SQL注入等攻击的影响。 3. Web应用程序的安全性:文章强调了B/S(浏览器/服务器)模式应用开发中的安全...

    最好用的Python连接Mysql库文件,防止SQL注入,可用数组编写SQL

    本篇文章将详细介绍如何使用Python连接MySQL数据库,并重点讲解如何防止SQL注入、利用数组编写SQL以及处理高并发场景,确保数据安全。 首先,Python中最常用的MySQL连接库是`pymysql`和`mysql-connector-python`。...

    sql注入讲解ppt.pptx

    2. Prepared Statement:使用 Prepared Statement 来防止 SQL 注入攻击。 3. LIMIT 和 OFFSET:使用 LIMIT 和 OFFSET 限制查询结果,防止敏感数据泄露。 4.Least Privilege:使用最小权限原则,限制数据库用户的权限...

    mysql转化成sql server sql转化成mysql工具

    这时,可以使用如`mss2sql.rar`这样的工具,它通常能帮助用户自动化地将MySQL的表结构、数据、视图、存储过程等对象转换为SQL Server兼容的脚本,从而实现迁移。 转换过程一般包括以下步骤: 1. 数据库对象分析:...

    Python中防止sql注入的方法详解

    防止SQL注入的最佳实践是多方面的,包括但不限于使用预编译SQL语句、采用ORM框架以及选择具有强大安全特性的第三方库。此外,开发者还需要时刻关注输入数据的有效性和安全性,定期审查代码以确保不存在潜在的安全...

    SQL注入漏洞全接触.ppt

    * 根据不同的数据库管理系统, SQL注入漏洞可以分为Access注入、SQL Server注入、MySQL注入等。 * 不同的数据库管理系统有不同的函数、注入方法,所以在注入之前,我们还要判断一下数据库的类型。 四、 SQL注入漏洞...

    sql server 2008 mysql 手工注入

    总的来说,SQL Server 2008和MySQL的手工注入问题可以通过编程最佳实践、使用预处理语句、限制用户权限以及保持系统更新来有效预防。了解这些概念并能实际应用,对于任何IT专业人士,尤其是负责数据库管理和安全的...

    php中mysql数据库的sql注入与全面防范

    本文将通过实例来描述 PHP 中的 MySQL 数据库的 SQL 注入问题以及怎样去防范。 一、SQL 注入的概念 SQL 注入是一种常见的攻击方式,攻击者通过在 Web 表单中输入恶意的 SQL 语句,来访问或修改数据库中的数据。...

    springboot多数据源切换mysql+sql server事例

    本示例“springboot多数据源切换mysql+sql server”是关于如何在Spring Boot项目中配置和使用多个数据库的数据源切换。下面将详细阐述这个主题的知识点。 首先,**多数据源**是指在一个应用中同时连接并操作多个...

    10-sql注入-mysql注入1

    SQL注入是一种常见的安全漏洞,通常发生在Web应用程序中,允许攻击者通过输入恶意SQL代码来操纵数据库。MySQL注入是其中一种,特别针对使用MySQL数据库的应用。本文将深入探讨MySQL注入的原理、常见攻击手段以及防范...

    mysql注入辅助程序

    由知名安全专家许云峰开发,这款工具设计给有一定技术基础的用户使用,它可以帮助网络安全专业人员或者开发者定位并修复潜在的SQL注入问题。 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入字段中插入恶意...

    sql注入源码(mssql,mysql)

    SQL注入是一种常见的网络安全漏洞,它发生在应用程序不恰当地将用户输入的数据与SQL命令混合在一起时。这个主题的压缩包文件包含了一系列与SQL注入攻击相关的源代码,主要针对Microsoft SQL Server (MSSQL) 和 MySQL...

Global site tag (gtag.js) - Google Analytics