服务器上的数据库运行非法的 SQL 语句,主要通过拼接来完成。
例如一个网站登录验证的 SQL 查询代码为:
SELECT * FROM users WHERE (name = '${userName}') and (pw = '${passWord}');
如果填入以下内容:
userName = 1' OR '1'='1
passWord = 1' OR '1'='1
那么 SQL 查询字符串为:
SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');
此时无需验证通过就能执行以下查询:
SELECT * FROM users;
- 猜解密码
- 获取数据
- 删库删表
- 拖库
- 关闭错误输出(只能在一定程度上增加 SQL 注入的难度,并不能解决 SQL 注入问题)
- 检查数据类型
- 对数据进行转义
- 使用参数化查询(推荐使用)
- 使用 ORM(对象关系映射)