SQL注入理解及防范

这篇具有很好参考价值的文章主要介绍了SQL注入理解及防范。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

避免SQL注入的一般原则是:不信任用户提交的数据。

一、什么是“SQL注入”?

所谓SQL注入(sql inject),具体来说,是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

典型例子

假如 user 表中有用户名为 123456 ,密码为 123456 的记录,而在前台页面提交表单的时候用户输入的用户名和密码是随便输入的,这样当然是不能登录成功的。

但是如果后台处理的 SQL 语句是如上所写,前台页面用户名也是随便输入,而用户输入的密码是这样的 aaa’ or ‘1’='1 ,处理登录的 SQL 语句就相当于是这样的:

SELECT USERNAME,PASSWORD FROM USER WHERE USERNAME='123456' AND PASSWORD='aaa' or '1'='1';

我们知道,1=1 是 true,所以上面这个 SQL 语句是可以执行成功的,这是一个 SQL 注入问题。


二、如何防止“SQL注入”

1、SQL预编译技术

解决 SQL注入 问题的这个方案的关键要点实际上是将SQL语句和用户输入的查询数据分别进行处理,而不是一视同仁的作为SQL语句的不同部分进行拼接处理。

以 MySQL 为例,在 MySQL 中,所谓预编译其实是指先提交带占位符的 SQL 模板,然后为其指定一个 key,MySQL 先将其编译好,然后用户再拿着 key 和占位符对应的参数让 MySQL 去执行。

使用这样的SQL预编译技术,除了可以防止SQL注入外,还可以对预编译的SQL语句进行缓存,之后的运行就省去了解析优化SQL语句的过程,可以加速SQL的查询效率。

一个标准的预编译SQL的用法如下:

prepare prepare_query from 'select * from s_user where username = ?' # 提交带有占位符的参数化 SQL,也可以理解为 SQL 模板
set @name = '%王五'; # 指定一个参数
execute prepare_query using @name; # 指定参数化 SQL 的 key 和参数,让 MySQL 自己去拼接执行

先通过 prepare 设置一个 SQL 模板,然后通过 execute 提交参数,MySQL 会自行根据参数替换占位符,到最后执行的 SQL 就是:

select * from s_user where username = '%王五'

工程实践举例:
在 Gorm 中,就为我们封装了SQL预编译技术,可以供我们使用:

db = db.Where("merchant_id = ?", merchantId)

预编译的原理大白话

按网上的说法,prepare 执行的时候实际上 SQL 已经编译完了,所以可以防止注入,因为后续不管塞什么参数都不可能在调整语法树了。

对于预编译SQL来说,我们作为模板的参数化SQL已经完成的编译过程,这段SQL包含几条有效语句?查哪张表?查哪些字段?作为条件的字段有哪些?…这些在 prepare 语句执行完后就固定下来了,此后我们再通过 execute 语句塞进去的任何参数,都会进行转义,不会再作为SQL的一部分。这就是为什么说预编译SQL可以防止注入的原因。

2、对用户提交的数据进行校验

2.1 利用正则表达式校验
2.2 利用字符串特殊字符校验

更贴合实际的业务场景,可针对性处理。


参考:
        https://www.cnblogs.com/Createsequence/p/16963891.html
        https://blog.csdn.net/qq_39384184/article/details/108144309文章来源地址https://www.toymoban.com/news/detail-495185.html


到了这里,关于SQL注入理解及防范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解 SQL 注入攻击原理与防御措施

    SQL 注入是一种常见的网络攻击方式,攻击者通过在输入框等用户交互界面中插入恶意 SQL 语句,从而获取、篡改或删除数据库中的数据。本文将详细解释 SQL 注入的原理,并介绍如何通过编码规范和防御措施来预防这种攻击。 SQL 注入攻击的核心原理是将恶意构造的 SQL 语句注

    2024年02月11日
    浏览(40)
  • 理解什么是sql注入攻击 + xss攻击 + cors 攻击

    SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串, 最终达到欺骗服务器执行恶意的SQL命令 。 SQL注入攻击的总体思路: 寻找到SQL注入的位置 判断服务器类型和后台数据库类型 针对不同的服务器和数据库特点进行SQL注入攻击 SQL注入攻击实例: 比如

    2023年04月18日
    浏览(67)
  • 从理论上理解SQL注入、XSS、中间件解析漏洞、挖矿马

    目录 1、SQL注入 (1)原理 (2)分类 (3)防御 2、XSS (1)原理 (2)分类 3、中间件(解析漏洞) (1)IIS6.X (2)Apache (3)Nginx和IIS7.5 4、挖矿木马 web应用对用户输入数据过滤不严谨,并把数据当做SQL语句带入数据库中执行。 XSS又叫跨站脚本攻击,是HTML代码注入,通过对

    2024年02月08日
    浏览(41)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗

    找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的 TRUSTEDPATHS 项目;在后面添加新的目录即可,多个目录使用分号分隔;

    2024年02月07日
    浏览(36)
  • Mybatis注入漏洞及防范方法

    本文介绍了Mybatis注入漏洞的四种方式,并详细说明了每种方式的原理和示例。同时提供了针对这些漏洞的安全防范方法,主要包括使用预编译方式来避免注入问题。

    2024年02月04日
    浏览(32)
  • sql优化一般步骤

    1、通过慢查日志等定位那些执行效率较低的SQL语句 2、explain 分析SQL的执行计划 需要重点关注type、rows、filtered、extra。 type由上至下,效率越来越高 ALL 全表扫描 index 索引全扫描 range 索引范围扫描,常用语,=,=,between,in等操作 ref 使用非唯一索引扫描或唯一索引前缀扫描,返回

    2024年02月10日
    浏览(43)
  • 机器学习模型的可解释性:增加对人工智能系统的信任和理解

            为了以道德和值得信赖的方式使用人工智能,研究人员必须继续创建平衡模型复杂性和易于解释的方法。         机器学习模型在各个领域的使用都取得了重大进展,包括自然语言处理、生成式人工智能和自主系统等。另一方面,随着模型复杂性和规模的增加

    2024年02月13日
    浏览(35)
  • SQL Server连接错误:证书链是由不受信任的颁发机构颁发的.NET

    在使用SQL Server与服务器建立连接的过程中,有时会遇到以下错误: “SQL Server已成功与服务器建立连接,但是在登录过程中发生错误。Provider:SSL Provider,Error:证书链是由不受信任的颁发机构颁发的.NET”。这个错误表示在建立安全连接时,SSL证书的颁发机构未被信任。在本

    2024年02月04日
    浏览(41)
  • Java一般用于postgis空间数据库通用的增删查改sql命令

    目录 1 增加 2 删除 3 查询 4 更新 \\\"public\\\".\\\"JGSQGW_Geo\\\"为某模式下得表  一般postgrel有这样的设计模式

    2024年02月13日
    浏览(40)
  • SQL注入(1)--判断是否存在SQL注入漏洞

    不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起 到底什么是SQL? 维基百科的定义: (1)什么是SQL? SQL是用来操控数据库的语言 (2)举一个例子,现在我们要查询电影“长津湖”的票房数据: 先想象一下开发人员是如何书写代码从数据库中拿到数据的:

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包