济南做网站建设的公司,在线视频2018免费视频,网站做淘宝客需要什么,logo在线设计免费生成器1.sql注入
不管是上一篇博客#xff0c;通过java代码执行sql
还是我们常用的Mybatis的#{}和${}
都会提到sql注入的问题
1.1啥是sql注入
应该知道是说传入无关的参数#xff0c;比如本来是想要一个where条件查询参数 但是你拼了一个drop
比如 原来的sql
select * from…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 GMT8)Date taskLatestStartTime;
4.boolean类型的属性定义不要用is开头