bug后端

SQL注入

单引号问题

输入内容含单引号导致sql错误。此单引号可能是用户特意输入,也可能是微软输入法拼汉字过程产物。如下图:

原因

在sql语句中,单引号是特殊字符,字符串参数会被单引号包裹。

如果采用字符串拼接sql语句,那么在拼接过程中,内容中的单引号也会被特殊解析。

解决

  1. replace转义。因为sql中,用两个单引号,表示一个不是字符边界的单引号,因此传入字符串的时候,将单引号用replace方法替换成两个单引号,结果不变,报错取消。

  2. 占位符代替变量。如java中的,c#中的@,mybatis中#{ } 被解析为一个参数占位符 ?${ } 仅仅为一个纯碎的 string 替换。

参考

  1. mybatis的#{}和${}

MySql默认查询不区分大小

  1. BINARY 表示敏感
1
2
3
CREATE TABLE NAME(
name VARCHAR(10) BINARY
);
1
SELECT * FROM TABLE NAME WHERE BINARY name='Clip';
  1. 设置字符集

utf8_general_ci –不区分大小写

utf8_bin–区分大小写

-------------Keep It Simple Stupid-------------
0%