在过去的工作中,我为我们的服务维护了一个允许临时查询的工具.它允许管理员在不必等待数周的代码部署的情况下请求报告(在部署需要数周的古怪时期).

我们不支持临时报表查询,方法是让服务接受任意字符串作为输入,并将它们作为SQL执行.这是非常不安全的,因为我相信你知道.

它的工作方式是报告查询存储在数据库中,以及所需的查询参数数量.

CREATE TABLE ManagerQueries (

id INT PRIMARY KEY,

query TEXT NOT NULL,

description TEXT NOT NULL,

num_params TINYINT UNSIGNED NOT NULL DEFAULT 0

);

INSERT INTO ManagerQueries

SET query = 'SELECT COUNT(*) FROM logins WHERE user_id = {0} AND created_at > {1}',

description = 'Count a given user logins since a date',

num_params = 2;

管理器前端可以通过其主键请求查询,而不是通过在Web请求中指定任意SQL字符串.

只有DBA以及可能知道如何编写安全查询的其他开发人员或经理才允许向此存储库添加新查询,因此可以确保查询经过测试和审查.

通过UI请求报表查询时,它强制用户提供查询参数的值.在我们的例子中,它从数据库中读取SQL,执行prepare()然后绑定execute()的值.所以SQL注入防御很满意.

在您的情况下,您的代码可能无法直接访问旧服务的数据库,因此您无法执行准备/执行并使用绑定参数.您必须提交具有集成值的静态查询.

在其他语言中,您可以通过转义使任何字符串值安全插入到SQL查询中.请参阅MySQL C API函数mysql_real_escape_string().

数字值更容易.你不必逃避任何事情,你只需要确保数值是真正的数字.将动态值转换为数字后,可以安全地插入到任何SQL字符串中.

不幸的是,我不认为golang SQL包支持任何转义函数.这已被要求作为一项功能,但据我所知,目前还没有支持的实现.见这里的讨论:https://github.com/golang/go/issues/18478

请注意,它比使用正则表达式替换有点棘手,因为您需要考虑多字节字符集.

golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...相关推荐

  1. MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决

    阅读目录 一.Navicat Premium 12简介与使用: 二.pymysql模块的使用: 查: 增删改 三.sql注入问题产生与解决方法: 本文内容提要: Navicat Premium 12 ...

  2. sql注入程序_Java应用程序中SQL注入

    sql注入程序 在本文中,我们将讨论什么是SQL注入攻击. 以及它如何影响任何Web应用程序使用后端数据库. 在这里,我专注于Java Web应用程序. 开放Web应用程序安全性项目(OWAP)列出了 ...

  3. java 防止sql注入_Java中SQL注入以及如何轻松防止它

    java 防止sql注入 什么是SQL注入? (What is SQL Injection?) SQL Injection is one of the top 10 web application v ...

  4. Pikachu(皮卡丘)靶场中SQL注入

    Pikachu靶场中SQL注入 1.Pikachu(皮卡丘)靶场中SQL注入 1.1.数字型注入 1.2.字符型注入 1.3.搜索型注入 1.4.xx型注入 1.5.insert/update注入 1 ...

  5. bWAPP中SQL注入思路

    bWAPP中SQL注入思路 SQL Injection (GET/Search) 等级:low 首先看看正常搜索的情况,这里我输入了一个字母b,可以看出来他把标题带有b的电影信息全都给搜出来了 在这里 ...

  6. 关于ECSHOP中sql注入漏洞修复

    标签:ecshop sql注入漏洞修复 公司部署了一个ecshop网站用于做网上商城使用,部署在阿里云服务器上,第二天收到阿里云控制台发来的告警信息,发现ecshop网站目录下文件sql注入漏洞以及程 ...

  7. 实战中SQL注入最容易出现的地方

    开局三张图 无奖答题:下面三张图哪张图会存在SQL注入(不考虑waf) 1:删除按钮 2:注册是检测用户是否存在 3:分页 事实上 这三处都会存在sql注入 分别是delete注入.一个查询基于whe ...

  8. mysql存储过程不常用_Python--day46--mysql存储过程(不常用)(包含防sql注入)

    一.存储过程: 优点:只要传很少的数据到数据库就可以了  缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句. 二.创建存储过程: 1.简单 创建存储过程: Python中使用结果 ...

  9. Mybatis中SQL注入攻击的3种方式,真是防不胜防!

    作者 | sunnyf 来源 | https://www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种O ...

最新文章

  1. Oracle的ha模式启停,数据库oracle 11g 的启停操作
  2. linux系统下deepin eclipse不能显示源码报class File Editor Source not found
  3. 神经网络如何学习的?
  4. TomcatNginx源码笔记分析
  5. Gartner:2022年全球IT支出将超4万亿美元,软件增速最高
  6. 卷积神经网络(CNN)介绍与实践
  7. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
  8. 构建一个ASP.NET Wiki来解释TDD
  9. pod install pod update
  10. 安装系统出现Winload.exe错误0xc000000e解决方法
  11. LPDDR4协议规范之 (一)地址映射和容量计算
  12. 数据地图搜索功能模块项目总结【springBoot+Elasticsearch】
  13. 坐标系的旋转与欧拉角
  14. 微信小程序 图表chart
  15. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。 请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。如下实例。示例 :输入: 1->2->3->4-
  16. Django-- (三) Django数据库操作
  17. Kafka+Storm+HBase项目Demo(5)--topology,spout,bolt使用
  18. HTML5高度还原复古24层魔塔网页版小游戏源码
  19. 28.多表查询——跨关联关系的多表查询
  20. Windows8程序开发小技巧---在代码中使用Segoe UI Symbol图标字体及常用图标列表

热门文章

  1. 微软的.NET Core开始支持Raspberry Pi 3
  2. ASP.NET Core WebListener 服务器
  3. ASP.NET Core MVC 配置全局路由前缀
  4. .Net Core 系列:1、环境搭建
  5. 2019-nCoV 全国新型肺炎疫情每日动态趋势可视图
  6. ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法
  7. 【计算机图形学】实验:C#.net环境下采用GDI+图形特技处理案例教程
  8. ENVI修复图像坏点扩展补丁
  9. linux之hexdump命令
  10. Android之java.lang.UnsatisfiedLinkError(Failed to register native method ***callMethod1())解决办法