Skip to content

Latest commit

 

History

History
47 lines (32 loc) · 941 Bytes

8_接入层注入问题.md

File metadata and controls

47 lines (32 loc) · 941 Bytes

SQL 注入

概念

服务器上的数据库运行非法的 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(对象关系映射)