SQL 注入

静态 SQL 语句是使用字符串拼接起来的。如:

1
2
3
String username = "行小观";
String password = "1234";
String sql = "select * from user where username = '" + username + "' and password = '" + password + "'";

我们将变量代入后的效果是:

1
select * from user where username = '行小观' and password = '1234'

这样执行是没问题的。

但是现在情况变了:

1
2
String username = "行小观";
String password = "1' or '1' = '1";

我们将变量代入后的效果是:

1
select * from user where username = '行小观' and password = '1' or '1' = '1'

因为or '1'='1'的原因,导致 SQL 语句的 where 子句为 true,等价于

1
select * from user

所以会将整张表给查询出来。

以上便是SQL注入。