sql注入

作者: chrisghb | 来源:发表于2019-06-15 16:55 被阅读0次

可以这样输入实现免帐号登录:

用户名: ‘or 1 = 1 --

密 码:

从理论上说,后台认证程序中会有如下的SQL语句:

String sql = "select * from user_table where username=

' "+userName+" ' and password=' "+password+" '";

当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=

'’or 1 = 1 -- and password='’

解决数据库阻塞问题

Lock_TIMEOUT 选项

(1)设置会话等待锁释放的超时期限

(2)默认情况下会话不会设置等待锁释放的超时期限

(3)设置会话超时期限为5秒, SET Lock_TIMEOUT 5000

(4)锁定如果超时,不会引发事务回滚

(5)取消会话超时锁定的设置,SET LOCK_TIMEOUT -1

如果超时,将显示以下错误:

image

KILL命令

(1)杀掉会话52,KILL 52

(2)杀掉会话,会引起事务回滚,同时释放排他锁
https://blog.csdn.net/bjddd192/article/details/2039186

spring 如何保证数据库事务在同一个连接下执行的?

调用getConnection()的时候从数据库连接池中获取一个connection, 然后将其与ThreadLocal绑定, 事务完成后解除绑定。这样就保证了事务在同一连接下完成。

MySQL 日志主要包括「错误日志」、「查询日志」、「慢查询日志」、「二进制日志(binlog)」 和 事务日志(redo log、undo log)几大类

  • Binlog 是逻辑日记,用于记录数据库执行的写入操作(查询不记录)信息。可以简单理解为记录的是sql语句。
  • 在实际应用中,Binlog 主要用在两个场景:主从复制和数据恢复
    1.主从复制场景:在 Master 主端开启 Binlog,将 Binlog 发生到各个 Slave 从端,Slave 从端重放 Binlog 从而达到主从数据一致
    2.数据恢复场景:通过使用 mysqlbinlog 工具来恢复数据
  • Undo log是 逻辑日记 、回滚日记。比如一条修改 +3 的逻辑语句,Undo log 会记录对应一条 -3 的逻辑日记,一条插入语句则会记录一条删除语句,这样发生错误时,根据执行 Undo log 就可以回滚到事务之前的数据状态。
  • Redo log 是重做日记,属于InnoDB引擎的日记。是物理日记,日记记录的内容的是数据页的更改,这个页 “做了什么改动”。如:add xx记录 to Page1,向数据页Page1增加一个记录。
  • Redo log 容灾恢复过程
    1.判断 redo log 是否完整,如果判断是完整(commit)的,直接用 Redo log 恢复
    2.如果 redo log 只是预提交 prepare 但不是 commit 状态,这个时候就会去判断 binlog 是否完整,如果完整就提交 Redo log,用 Redo log 恢复,不完整就回滚事务,丢弃数据。

相关文章

网友评论

      本文标题:sql注入

      本文链接:https://www.haomeiwen.com/subject/bngbfctx.html