[SAFE-ID: JIWO-2024-3322] 作者: ShYLie 发表于: [2023-08-25]
本文共 [271] 位读者顶过
-
SQL注入漏洞
攻击者利用web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。[出自:jiwo.org]
-
SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当中SQL语句执行,攻击者从而获得数据库中的数据,影响数据库安全和平台安全。
实现SQL注入的两个条件:
用户能够控制输入
原本程序要执行的SQL语句,拼接了用户输入的恶意数据
-
SQL注入过程
-
SQL注入带来的危害
绕过登录验证:使用万能密码登录网站后台等;
获取敏感数据:获取网站管理员账号/密码等;
文件系统操作:列目录、读取、写入文件等;
注册表操作:读取、写入、删除注册表;
执行系统命令:远程执行命令。
-
防御措施
(1)sql 语句预编译和绑定变量。
(2)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注入攻击。
(3)对进入数据库的特殊字符( ’ <>&*; 等)进行转义处理,或编码转换。
(4)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为 int 型。
(5)数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。
(6)网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。
(7)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害.
(8)避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
|