如何规避SQL注入漏洞

news2024/12/23 23:30:38

1 引言

对于很多初学者而言,SQL注入攻击是一种很容易被忽略的安全漏洞,其原理很简单,在日常编码中需要注意规避,养成良好的系统安全意识。

2 原理

SQL注入漏洞产生的根本原因,就是在编码过程中手动拼接sql参数造成的。
看下面的例子:模拟登录场景,账号是admin,密码未知,但是我们可以输入一个恒等式:’ OR 1=1作为密码。如果这时候通过拼接的方式构造sql,这个sql的条件就是一定成立的,如此我们就可以成功登录任意账号,这就是SQL注入攻击。

        String account = "admin";
        String password = "' OR 1=1";
        String sql = "SELECT * FROM t_sys_user WHERE account = '" + account + "' AND password = '" + password;
        System.out.println(sql);
        //SELECT * FROM t_sys_user WHERE account = 'admin' AND password = '' OR 1=1
       

在这里插入图片描述

3 规避

3.1 重要的事说三遍

  • 不要手动拼接sql参数
  • 不要手动拼接sql参数
  • 不要手动拼接sql参数

3.2 Hibernate

  • 对于ORM一类的框架来说,尽量使用JPA自带的方法来传参,如q.setParameter(key, params.get(key));
	@Override
	public <T> List<T> find(String hql, Map<String, Object> params) {
		Query q = entityManager.createQuery(hql);
		if (null != params && !params.isEmpty()) {
			for (String key : params.keySet()) {
				q.setParameter(key, params.get(key));
			}
		}
		return q.getResultList();
	}

3.3 Mybatis

  • 使用QueryWrappe时,尽量使用自带的方法来传参,如 q.eq(“account”, search);
    @Override
    public Object listPage(Param param) {
        String search = param.getString("search");
        QueryWrapper<User> q = new QueryWrapper<>();
        q.eq("delFlag", 0);
        q.eq("account", search);
        q.orderByDesc("id");
        User user= userMapper.selectOne(q);
        
        return user;
    }
  • 使用mapper.xml时,注意使用#{}传参,不要使用${}传参
    1, #{}使用了预处理的方式,因此它可以有效地防止SQL注入攻击
    2, ${}是简单的字符串替换,有SQL注入的风险
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zeroone.mapper.master.UserMapper">

    <select id="selectAllPage" parameterType="java.util.Map" resultType="java.util.Map">
        select * from t_user_a
        <where>
            <if test="param.search!= null and param.search!= ''">
                account = #{param.search}
            </if>
        </where>
    </select>

</mapper>

3.4 字符串过滤

替换参数中的特殊符号,比如下列方法

obj.replaceAll("([';])+|(--)+", "")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

os模块函数

1、常用命令 os.getcwd() 返回当前工作目录 os.listdir() 返回指定文件路径下的文件夹列表或者文件列表 os.mkdir 创建文件夹,不能创建递归文件夹,也就是上一层文件夹必须存在,不存在时会报错,同时在指定目录下有相同的文件夹名称,再创建会报错 os.makedirs 可以创建…

[基于 Vue CLI 5 + Vue 3 + Ant Design Vue 3 搭建项目] 01 安装 nodejs 环境

文章目录 下载安装测试 这里让我们去看看如何安装一下 nodejs 的环境 下载 通过官网进行下载安装包 官网 https://nodejs.org/zh-cn点击 下载 Node.js (LTS) 开始下载 安装 下载完成之后&#xff0c;双击进行安装 开始进行安装了 这样&#xff0c;node.js 就安装好了 测试 …

计算机毕业设计 | springboot旅行旅游网站管理系统(附源码)

1&#xff0c;绪论 1.1 背景分析 随着人们生活水平的提高和对休闲旅游的日益重视&#xff0c;旅游业已成为全球最大的经济产业之一。越来越多的人选择通过在线方式进行旅行预订&#xff0c;这种趋势为旅游网站提供了巨大的商机。用户体验是决定旅游网站成功与否的关键因素。良…

TD综合教程——粒子切换和音轮(附思路和工程文件)

一、粒子切换 整体思路&#xff1a; 给constant中的color实时滑条数值但是没有变化 解决办法&#xff1a;在这里使用的rgb不是0-255的色域&#xff0c;而是0-20&#xff0c;使用Math CHOP改变即可 二、音轮 整体思路&#xff1a; 在math中输入双声道音频后&#xff0c;可以使…

WinCC V7.5与S7-1200 PLC 通信

自WinCC V7.2版本起&#xff0c;软件新增加了 "SIMATIC S7-1200, S7-1500 Channel"通道,用于WinCC与 S7-1200/S7-1500 PLC之间的通信。此驱动只支持以太网通讯&#xff0c;使用 TCP/IP 协议。 工控人加入PLC工业自动化精英社群 文档示例的软/硬件环境硬件&#xff1…

QLORA:高效微调量化大型语言模型

人工智能咨询培训老师叶梓 转载标明出处 传统的16位精度微调需要超过780GB的GPU内存&#xff0c;对于参数量极大的模型&#xff0c;如65B&#xff08;即650亿参数&#xff09;的模型&#xff0c;在资源有限的情况下大模型的微调几乎是不可能的。华盛顿大学的研究者团队提出了一…

您的计算机已被.rmallox、.hmallox勒索病毒感染?恢复您的数据的方法在这里!

导言 近年来&#xff0c;勒索病毒攻击手段不断升级&#xff0c;其中双重勒索策略更是成为了攻击者们的“新宠”。这种策略不仅通过加密受害者的文件来要求赎金&#xff0c;还进一步威胁要泄露或公开其敏感数据&#xff0c;实现了对受害者的双重打击。面对如此严峻的网络安全形…

[ubuntu]opencv4.9.0源码编译报错undefined reference to ‘TIFFReadRGBxxxxx‘及解决方法

今天在编译Opencv4.89.0的时候报了上面这个错误&#xff0c;原因是和anaconda环境冲突&#xff0c;因为此时是在激活的conda环境下编译的。 解决方法&#xff1a;conda deactivate 关闭conda环境&#xff0c;再进行编译&#xff0c;就OK了。记得要删除build缓存重新cmake然后ma…

【OpenCV-直方图与傅里叶变换】图像的基本变换、傅里叶变换、直方图

import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()1 直方图 1.1 cv2.calcHist(images,channels,mask,histSize,ra…

浪潮信息:构建高效、安全数据存储底座的领航者

浪潮信息在最新IDC发布的《中国企业级外部存储市场跟踪报告&#xff0c;2024Q1》中表现抢眼&#xff0c;以11.4%的市场销售额占比稳居中国存储市场第二&#xff0c;同比增长率高达13.6%&#xff0c;领跑头部厂商。这标志着浪潮信息在推动中国存储市场持续增长中扮演了关键角色&…

智能语音技术在人机交互中的应用与发展

摘要&#xff1a;本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信&#xff0c;建立起能听能说的智能口语系统。同时&#xff0c;引入开源 AI 智能名片小程序&#xff0c;分析其在智能语音技术应用场景下的意义与发…

电商平台的仅退款,如何“卷”出一个千亿IPO?

“快递柜第一股”&#xff0c;丰巢登陆港交所 当英国走进工业革命时代&#xff0c;狄更斯曾经这样形容那个充满着激情、创造和无限可能的世界&#xff0c;“这是最好的时代&#xff0c;也是最坏的时代。” 如今&#xff0c;随着运费险、仅退款、直播带货的出现&#xff0c;中…

【最新华为OD机试E卷-支持在线评测】字母组合(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

【Power Compiler手册】9.时钟门控(6)

使用安全寄存器插入时钟门控 你可以使用同一个时钟门控来门控三模冗余(TMR)寄存器,对所有安全寄存器进行操作,而不需要触碰或修改投票逻辑。 Design Compiler NXT 工具会自动检测是否使用了安全寄存器,并相应地插入时钟门控。该工具始终确保同一安全组内的安全寄存器共享…

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创 作者 | 海野 AI圈子的红人&#xff0c;AI大神Andrej Karpathy&#xff0c;曾是OpenAI联合创始人之一&#xff0c;特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能教育公司 &#xff0c;宣布将长期致力于AI原生教育。 近日&#xff…

Transformer(Attention is all you need)网络结构

Transformer(Attention is all you need) Transformer结构 Transformer是一个从Encode到Decode的一个框架。Transformer的编码器和解码器是基于自注意力的模块叠加而成的&#xff0c;源&#xff08;输入&#xff09;序列和目标&#xff08;输出&#xff09;序列的嵌入&#x…

牛客周赛 Round 59 F范德蒙卷积

思路&#xff1a;对于计数问题&#xff0c;考虑两个数对于答案的贡献&#xff0c;考虑 a i a_i ai​ 和 a j a_j aj​ 作为子序列中的两个对称位置&#xff0c;其在多少个字符串中出现过&#xff0c;显然&#xff0c;若 a i a_i ai​ 距离子序列字符串s的首位距离为 x, 那么 …

儿童孤独症康复学校:打破孤岛,关爱与成长

在世界的某个角落&#xff0c;有一群孩子&#xff0c;他们如同夜空中最亮的星&#xff0c;却往往因孤独症的屏障&#xff0c;而难以与周围的世界建立连接。这些孩子&#xff0c;如同被无形的岛屿环绕&#xff0c;渴望着被理解、被接纳。而正是在这样的背景下&#xff0c;星贝育…

CSS媒体查询

媒体查询介绍 例如&#xff0c;同一个网页&#xff0c;在电脑上显示和在手机上显示有可能不一样的&#xff0c;因为电脑的屏幕更大&#xff0c;显示的东西可能更多。 为了适应不同设备的屏幕大小&#xff0c;就要写多种样式&#xff0c;例如在电脑上&#xff0c;ipad上&#x…

攻防世界 ics-05

ics-05 隐藏的变量传参&#xff0c;php弱类型比较 只有设备维护中心可以点击进去 查看源码&#xff0c;发现有个隐藏的超链接变量传参 看到变量传参&#xff0c;有可能存在文件包含漏洞读取源码&#xff0c;这个站是php的站&#xff0c;所以可以使用php伪协议读取源码 index.p…