sql注入-尊龙凯时平台在线地址
很多 web 开发者没有注意到 sql 查询是可以被篡改的,因而把 sql 查询当作可信任的命令。殊不知道,sql 查询可以绕开访问控制,从而绕过身份验证和权限检查。更有甚者,有可能通过 sql 查询去运行主机操作系统级的命令。
直接 sql 命令注入就是攻击者常用的一种创建或修改已有 sql 语句的技术,从而达到取得隐藏数据,或覆盖关键的值,甚至执行数据库主机操作系统命令的目的。这是通过应用程序取得用户输入并与静态参数组合成 sql 查询来实现的。下面将会给出一些真实的例子。
由于在缺乏对输入的数据进行验证,并且使用了超级用户或其它有权创建新用户的数据库帐号来连接,攻击者可以在数据库中新建一个超级用户。
example #1 一段实现数据分页显示的代码...... 也可以被用作创建一个超级用户(postgresql 数据库)。
$offset = $argv[0]; // 注意,没有输入验证!
$query = "select id, name from products order by name limit 20 offset $offset;";
$result = pg_query($conn, $query);
一般的用户会点击$offset已被斌值的"上一页"、"下一页"的链接。原本代码只会认为$offset是一个数值。然而,如果有人尝试把以下语句先经过 处理,然后加入url中的话:
0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; --
那么他就可以创建一个超级用户了。注意那个 0;
只不过是为了提供一个正确的偏移量以便补充完整原来的查询,使它不要出错而已。