2023-10学习笔记

news/2024/7/5 3:09:15

1.sql注入

不管是上一篇博客,通过java代码执行sql

还是我们常用的Mybatis的#{}和${}

都会提到sql注入的问题

1.1啥是sql注入

应该知道是说传入无关的参数,比如本来是想要一个where条件查询参数 但是你拼了一个drop

比如 原来的sql 

select * from table_a where a.name = ${}

然后你传入

s;drop table table_a;

那此时整个sql就变成了

select * from table_a where a.name = s;drop table table_a;

你查完把表删了

1.2为什么#{}就可以防止sql注入

还是用1.1的例子,把${}改成#{}

你原来

select * from table_a where a.name = #{}

你传入

 s;drop table table_a;

sql最后变成了

select * from table_a where a.name = 's;drop table table_a;'

看到没, 你只是传进来了一个字符串而已,对数据安全啥影响没有

1.3 java代码直接执行sql怎么防止sql注入

PreparedStatement

通过?占位符 和 参数绑定的方式

【运维】PreparedStatement防止SQL注入_37543485的博客-CSDN博客

参数化查询:

        PreparedStatement允许您将SQL查询字符串与查询参数分开。查询参数是在执行查询之前预编译的,因此不会受到用户输入的直接影响。
        查询参数以占位符的形式(通常是问号?)出现在SQL查询字符串中,而不是将用户输入嵌入到查询中。
预编译:

        在执行之前,PreparedStatement会将SQL查询字符串和参数一起发送到数据库进行预编译。在这个阶段,数据库会验证参数的数据类型,并确保不会对它们进行解释为SQL代码的尝试。
参数绑定:

        一旦查询预编译完成,您可以将参数值绑定到查询参数上。这些参数值将替代占位符,并且由数据库安全地处理。
参数绑定通常使用setXXX()方法,其中XXX是参数的数据类型(例如,setString()、setInt()等)。
安全性:

        由于参数是在查询执行之前绑定的,数据库可以确保它们不会被解释为SQL代码。这样,即使用户恶意输入带有SQL注入攻击的数据,也不会影响查询的执行。
        参数化查询还能够防止常见的SQL注入攻击,例如将单引号 ' 插入到查询中,因为这些字符会被视为参数的一部分而不是SQL代码的一部分。

 2.Mybatis中if标签中的and后要有空格

本来不写空格也没事,但是为了代码规范,好看些 and后都会有空格 。

但是我这次没加空格,在<where>和<if> 标签共同使用的情况下,居然没给我自动去掉第一个and 导致sql执行报错了

至今不知道为啥,但是为了代码好看,还是加上吧

 3.时间格式的前后端转换

3.1后端用date接收前端字符串日期

前台传字符串日期参数,后台用Date接收;后台Date类型,前台自动转日期字符串「建议收藏」 - 思创斯聊编程

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date dateEnd;

3.2 后端date返回给前端日期字符串

 @JsonFormat(pattern = ""yyyy-MM-dd HH:mm:ss"", timezone = "GMT+8")
    Date taskLatestStartTime;

4.boolean类型的属性定义不要用is开头


http://lihuaxi.xjx100.cn/news/1717102.html

相关文章

统计学习方法 支持向量机(下)

文章目录 统计学习方法 支持向量机&#xff08;下&#xff09;非线性支持向量机与和核函数核技巧正定核常用核函数非线性 SVM 序列最小最优化算法两个变量二次规划的求解方法变量的选择方法SMO 算法 统计学习方法 支持向量机&#xff08;下&#xff09; 学习李航的《统计学习方…

如何将Python程序打包并保护源代码

导言: 在某些情况下,我们可能希望将Python程序打包成可执行文件,以便用户无法查看程序的源代码。这种需求通常出现在商业软件、数据分析工具或其他需要保护知识产权的场景中。本文将介绍如何使用PyInstaller工具来打包Python程序,并确保它可以执行和读取配置信息。 第一步…

纺织辅料经营小程序商城的作用是什么

数字化时代&#xff0c;各个行业都在通过线上转型实现新增长&#xff0c;纺织辅料厂商也一样&#xff0c;需要通过线上化实现与客户的面对面交流有利于打造品牌及构建私有化流量池&#xff0c;但无论入驻哪家电商平台及垂直行业平台&#xff0c;都有不少的佣金及入驻费。 可通过…

【人工智能Ⅰ】实验1:谓词表示法与产生式知识表示

实验1 谓词表示法与产生式知识表示 一、实验目的 1、熟悉谓词逻辑表示法&#xff1b; 2、理解和掌握产生式知识表示方法&#xff0c;实现产生式系统的规则库。 二、实验内容 要求通过C/C/python语言编程实现&#xff1a; 1、猴子摘香蕉问题 2、动物识别系统 &#xff08…

长城首款MPV上市,能否迎来「高山」时刻?

作者 | Amy 编辑 | 德新 去年下半年起&#xff0c;自主品牌接二连三抢占高端MPV市场&#xff0c;腾势D9、岚图梦想家、极氪009以及传祺E9等车型接连亮相。 国泰君安证券研究报告显示&#xff0c;新能源MPV 2021年、2022年年销量分别为4.4万和9.2万辆&#xff0c;今年上半年销…

命令行输入sns.countplot(data[‘marital‘])报错

代码sns.countplot(data[marital])是用于绘制柱状图来显示分类变量的频数分布。但是&#xff0c;根据警告信息&#xff0c;从Seaborn 0.12版本开始&#xff0c;只有一个有效的位置参数data&#xff0c;其他参数必须作为关键字参数传递。因此&#xff0c;你需要将参数data[marit…

IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘t_user‘ 中的标识列插入显式值

出现这个问题的原因 出现这个问题一般都是SQL server数据库&#xff0c;在创建表主键的时候双击修改标识规范默认自增&#xff0c;如果再插入显示的值就会出现这样的问题。这样的问题是非常常见的&#xff0c;通常会出现在大量数据插入表中&#xff0c;列如 解决的办法 在…

双非本两年经验,靠这套Java面试题拿下拿下阿里、百度、美团、滴滴、快手、拼多多等大厂offer

背景 博主是双非大学毕业&#xff0c;有两年的互联网经验 社招面试也是一样的流程&#xff1a;项目 八股 算法 项目&#xff1a; 公司项目&#xff0c;涉及的技术包括但不限&#xff1a; 管理域&#xff1a;DDD、CQRS、事件总线、命令总线 运行域&#xff1a;微内核、规则…