SQL注入

前言

SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句

注入示例

  • 数字型。 这种注入发生在数字型参数上,它会把参数当做语句继续执行,从而改变SQL语句的结果。
SELECT * FROM table WHERE id = %s
SELECT * FROM table WHERE id = 1 OR 1=1
  • 字符型。 这种注入发生在字符型参数上,它使用特殊字符对SQL语句进行改变,从而改变SQL语句的结果。
SELECT * FROM table WHERE name = %s
SELECT * FROM table WHERE name = 'admin' OR '1'='1'

危害

SQL注入漏洞对于数据安全的影响:

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  • 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  • 服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  • 破坏硬盘数据,瘫痪全系统。

防范

关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。

  • 代码层
    • 对用户输入进行严格转义和过滤(XSS)
    • 使用预编译。将SQL语句的构建和参数分离
    • 使用存储过程
  • 网络层
    • 使用 WAF 设备启动 防Sql Inject 注入策略
    • 云端防护(阿里云盾)