SQL注入笔记记录+MySQL的事务隔离级别
(一)SQL注入。
1.如何理解SQL注入? SQL注入是一种将SQL代码添加到输入参数中,传递到SQL服务器解析并执行的一种攻击手法。
2.SQL注入是如何产生的? web开发人员无法保证所有的输入都已经过滤。 攻击者利用发送给SQL服务器的输入数据构造可执行的SQL代码 数据库未做相应的安全配置。
3.如何寻找SQL注入漏洞? 借助逻辑推理: 识别web应用中所有输入点。 了解哪些类型的请求会触发异常。(get特殊字符‘ “) 检测服务器响应中的异常。
4.如何进行SQL注入攻击? 数字注入。 (1)select * from name where id=-1 OR 1=1; 这样就会查询全表。 字符串注入。 (1)SQL,#后面会被注释掉的 select * from name= 'llsydn'#' and password = "123456"; (2)SQL,--后面会被注释掉的 select * from name= 'llsydn'--' and password = "123456";
5.如何预防SQL注入? 严格检查输入变量的类型和格式。 过滤和转义特殊字符。 利用mysql的预编译机制。
(二)MySQL隔离级别
1.MySQL事务隔离级别。 SERIALIZABLE; REPEATABLE READ; READ COMITTED; READ UNCOMMITTED 序列化; 可重复读; 提交读; 未提交读
(1)serializable,最高级别,当别操作未提交时,不能操作数据库。
(2)repeatable read,可重复读。(默认的隔离级别) 出现幻读的情况,A事务插入数据insert,并提交commit。B事务查询select,并更新update数据的时候,并提交commit,B查询会出现幻读,即会显示A事务插入的数据。
(3)read committed,提交读。A事务更新update数据,并提交commit。B事务中都可以读取到被更新的数据。(即出现了不可重复读)
(4)read uncommitted,未提交读。A事务更新update数据,未提交。B事务中都可以读取到被更新的数据。(A事务,回滚rollback了,则会出现脏读)
2.MySQL性能与非事务表的表锁定。 支持事务的数据库在保持不同用户彼此隔离方面要比非事务数据库复杂,因此自然 反映在系统的性能上面。 在使用事务表时,提高性能的一些方法: (1)使用小事务。 (2)选择合适的隔离级别。 (3)保证开始事务前一切都是可行的。 (4)避免死锁。
转载自:https://juejin.cn/post/6991275240626061348