 1 n9 g" M* f/ |0 j" j' V0 \; \2 P T
一、Python 使用 Mysql1、Python 代码: - z8 _- y+ k u! a) M9 q, w( E
2、Python 输出结果: # G0 J m( D! K4 k
3、分析① 当用户名和密码正确时,发现可以正常打印字段数据
% Q5 Z" U7 f* _" k2 S) d' `4 D: N3 u ② 当用户名或密码错误时,输出“账号或密码错误”
3 @5 |, P1 _8 L6 T; M5 p; s" W5 J; x ③ 当用户名输入"python -- Python大星到此一游",密码为空,仍然可以正常打印数据 * g0 U1 X7 N& ?0 o% w% C, t
④ 当用户名输入"**** or 1 = 1 -- Python大星到此一游",密码为空,打印了所有用户信息
" }; q8 G6 z! f$ ?- Y, }" i, p# Y7 N 其中第 ③ 和 ④ 条就是由于 加上 -- 注释 ,sql 注入导致的4、优化execute可以自动识别sql语句中的 %s ,它可以帮助你过滤特殊的字符,避免sql注入的问题  ! g2 m- R5 Q8 I+ o7 L0 n2 K5 C
输出结果二、如何防止 sql 注入1、永远不要信任用户的输入对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双 - 进行转换等2、 永远不要使用动态拼装 sql可以使用参数化的 sql 或者直接使用存储过程进行数据查询存取。 + z" M5 L* m) q7 d9 @' {, ~) y' X
3、永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接4、不要把机密信息直接存放加密或者 hash 掉密码和敏感的信息5、应用的异常信息应该给出尽可能少的提示最好使用自定义的错误信息对原始错误信息进行包装
/ @: h" ?, W6 S# {# V >>> ython 之 MySql“未解之谜”15--DDL、DML、DCL和TCL都是啥?
8 E% z. [# N$ }* j0 H0 B
+ v8 T: V, I0 t' ], f0 m! Y/ E/ h$ _1 A9 p
( y0 y) V0 V6 A' q5 m# h; X
8 Q! O; z* C: L" g$ c
|