• 2023-10学习笔记


    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后都会有空格 。

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    Python中的shape[0]、shape[1]和shape[-1]分别是什么意思(附代码)
    C语言描述数据结构 —— 二叉树(2)Top-K问题
    uni-app:设置图片一直旋转
    vcs与verdi学习记录
    NISP-SO网络安全运维是什么?安全运维工程师
    C++基础——前后置++--,流插入提取运算符重载函数
    -带你看懂11种API类型及应用-
    石油开采消防安全VR仿真培训加强学员的切身感受
    CPP 核心编程6-多态
    自学(黑客)技术——网络安全篇
  • 原文地址:https://blog.csdn.net/qq_35653822/article/details/134041823