iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >防御SQL注入的方法是怎样的
  • 207
分享到

防御SQL注入的方法是怎样的

2024-04-02 19:04:59 207人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关防御sql注入的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL 注入是一类危害极大的攻击形式。虽然

本篇文章给大家分享的是有关防御sql注入的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

SQL 注入是一类危害极大的攻击形式。虽然危害很大,但是防御却远远没有XSS那么困难。

SQL 注入可以参见:https://en.wikipedia.org/wiki/SQL_injection

SQL 注入漏洞存在的原因,就是拼接 SQL 参数。也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞。

1. 演示下经典的SQL注入

我们看到:select id,no from user where id=2;

如果该语句是通过sql字符串拼接得到的,比如: String sql = "select id,no from user where id=" + id;

其中的 id 是一个用户输入的参数,那么,如果用户输入的是 2, 那么上面看到查到了一条数据,如果用户输入的是 2 or 1=1 进行sql注入攻击,

那么看到,上面的语句(select id,no from user where id=2 or 1=1;)将user表中的所有记录都查出来了。

这就是典型的sql注入。

再看一列:

我们看到通过 sql 注入能够直接将表 sqlinject 删除掉!可见其危害!

2. sql 注入的原因

sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量。

但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。

比如上面的 String sql = "select id,no from user where id=" + id;

我们希望用户输入的 id 的值,仅仅作为一个字符串字面值,传入数据库执行,但是当输入了: 2 or 1=1 时,其中的 or 1=1 并没有作为 where id= 的字面值,而是作为了 sql语句 来执行的。所以其本质是将用户的输入的数据,作为了命令来执行。

3. sql注入的防御

1> 基本上大家都知道 采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。但是其中的深层次原因就不见得都理解了。

 String sql = "select id, no from user where id=?";    PreparedStatement ps = conn.prepareStatement(sql);    ps.setInt(1, id);    ps.executeQuery();

如上所示,就是典型的采用 sql语句预编译和绑定变量 。为什么这样就可以防止sql 注入呢?

其原因就是:采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。

2> 但是不是所有场景都能够采用 sql语句预编译,有一些场景必须的采用 字符串拼接的方式,此时,我们严格检查参数的数据类型,还有可以使用一些安全函数,来方式sql注入。

比如 String sql = "select id,no from user where id=" + id;

在接收到用户输入的参数时,我们就严格检查 id,只能是int型。复杂情况可以使用正则表达式来判断。这样也是可以防止sql注入的。

安全函数的使用,比如:

 MysqlCodec codec = new mysqlCodec(Mode.STANDARD);    name = ESapi.encoder().encodeForSQL(codec, name);    String sql = "select id,no from user where name=" + name;

ESAPI.encoder().encodeForSQL(codec, name)该函数会将 name 中包含的一些特殊字符进行编码,这样 sql 引擎就不会将name中的字符串当成sql命令来进行语法分析了。

注:

实际项目中,一般我们都是采用各种的框架,比如ibatis, hibernate,mybatis等等。他们一般也默认就是sql预编译的。对于ibatis/mybatis,如果使用的是 #{name}形式的,那么就是sql预编译,使用 ${name} 就不是sql预编译的。

以上就是防御SQL注入的方法是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 防御SQL注入的方法是怎样的

本文链接: https://www.lsjlt.com/news/61689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 防御SQL注入的方法是怎样的
    本篇文章给大家分享的是有关防御SQL注入的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL 注入是一类危害极大的攻击形式。虽然...
    99+
    2024-04-02
  • SQL注入的防御方法有哪些
    这篇文章主要介绍了SQL注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL注入的防御方法有哪些文章都会有所收获,下面我们一起来看看吧。限制数据类型在传入参数的地方限制参数的类型,比如整型 ...
    99+
    2023-07-02
  • 浅谈SQL注入的四种防御方法
    最近了解到安全公司的面试中都问到了很多关于SQL注入的一些原理和注入类型的问题,甚至是SQL注入的防御方法。SQL注入真的算是web漏洞中的元老了,著名且危害性极大。下面这里就简单的分享一下我总结的四...
    99+
    2023-09-05
    php web安全
  • 怎么防御SQL注入
    这篇文章主要介绍怎么防御SQL注入,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段...
    99+
    2024-04-02
  • Mybatis是这样防止sql注入的
    目录1、首先看一下下面两个sql语句的区别:2、什么是sql注入3、mybatis是如何做到防止sql注入的4、参考文章1、首先看一下下面两个sql语句的区别: <sele...
    99+
    2024-04-02
  • mysql防止sql注入的方法
    这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SQL Injection攻击具有很大的危害,攻击者可...
    99+
    2024-04-02
  • 防止SQL注入攻击的方法
    小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! SQL注入是一种注入攻击,可...
    99+
    2024-04-02
  • PHP常见的SQL防注入方法
    利用Mysqli和PDO 产生原因主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询。导致产生漏洞,比如: $id = $_GET['id'];$sql = "SELECT na...
    99+
    2023-09-26
    php sql
  • 防范sql注入的方法有哪些
    这篇文章主要介绍防范sql注入的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!防止SQL注入的方式有:执行sql语句时使用addslashes进行sql语句转换,过滤掉sq...
    99+
    2024-04-02
  • 防止SQL注入的方法有哪些
    防止SQL注入的方法有:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users where...
    99+
    2024-04-02
  • preparestatement是怎么防止sql注入的
    preparestatement防止sql注入的方法:当使用PreprareStatement时,即使参数里有敏感字符如or '1=1',数据库也会作为一个参数一个字段的属性值来处理,而不会作为一个SQL指令来执行,用法示例:String ...
    99+
    2024-04-02
  • web安全之防止SQL注入的方法
    小编给大家分享一下web安全之防止SQL注入的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SQL注入,就是通过把SQL命令...
    99+
    2024-04-02
  • java防止sql注入的方法有哪些
    java防止sql注入的方法有:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users wher&#...
    99+
    2024-04-02
  • 如何有效防止sql注入的方法
    SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在...
    99+
    2024-04-02
  • jdbc防止sql注入的方法有哪些
    使用PreparedStatement来执行SQL语句,而不是Statement。PreparedStatement使用占位符来...
    99+
    2024-04-09
    jdbc
  • 防止sql注入的方法有哪几种
    防止SQL注入的方法有哪几种,需要具体代码示例 SQL注入是一种常见的网络安全威胁,它可以让攻击者通过构造恶意的输入来修改、删除或者泄露数据库中的数据。为了有效防止SQL注入攻击,开发...
    99+
    2024-02-22
    参数化查询 输入验证和过滤 使用orm框架 防止sql注入
  • php防止sql注入的方法有哪些
    1. 使用预处理语句和绑定参数:使用PDO或mysqli扩展来执行SQL查询,使用预处理语句和绑定参数的方式来防止SQL注入。预处理...
    99+
    2023-08-23
    php sql
  • 高防服务器防御DDOS攻击和CC攻击的方法是怎样的
    高防服务器防御DDOS攻击:1.确保服务器系统的安全,关闭不必要的服务,正确设置防火墙,仔细查看网络设备和主机的日志/服务器system。2.隐藏服务器的真实IP地址。高防服务器防御CC攻击:通过禁止网站代理访问、尽可能使网站成为静态页面、...
    99+
    2024-04-02
  • SQL注入详解及防范方法
    目录一:什么是sql注入二:SQL注入攻击的总体思路 三:SQL注入攻击实例四:如何防御SQL注入1、检查变量数据类型和格式2、过滤特殊符号3、绑定变量,使用预编译语句  五:什么是...
    99+
    2024-04-02
  • php防止sql注入的方法有哪几种
    使用预处理语句:使用PDO或者MySQLi等数据库扩展,可以通过绑定参数的方式来执行SQL语句,从而避免SQL注入攻击。 进...
    99+
    2024-04-29
    php sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作