Welcome 微信登录

首页 / 网页编程 / PHP / PHP等语言SQL注入的问题

PHP等语言SQL注入的问题2014-10-18很多人在做开发的时候并没有注意到SQL的查询是可以被改掉的,其实SQL却是最不安全的因素之一,通过SQL,更有可能去直接执行系统命令,在服务器上新建用户,修改密码等操作也不是不可能。

直接 SQL 命令注入就是攻击者常用的一种创建或修改已有 SQL 语句的技术,从而达到取得隐藏数据,或覆盖关键的值,甚至执行数据库主机操作系统命令的目的。这是通过应用程序取得用户输入并与静态参数组合成 SQL 查询来实现的。

$offset = $argv[0]; // 注意,没有输入验证!$query= "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";$result = pg_query($conn, $query);
这是最普通的分页例子,但是如果有人把下面的语句通过unlencecode()编码以后,

0;insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)select "crack", usesysid, "t","t","crack"from pg_shadow where usename="postgres";--
再把这语句插入到url以后.就会在数据的表中插入一个用户(通过字段猜测,不过肯定是插入数据了)

注意那个 0; 只不过是为了提供一个正确的偏移量以便补充完整原来的查询,使它不要出错而已。 ,这个是手册上的例子

$query= "SELECT id, name, inserted, size FROM productsWHERE size = "$size"ORDER BY $order LIMIT $limit, $offset;";$result = odbc_exec($conn, $query);
可以在原来的查询的基础上添加另一个 SELECT 查询来获得密码:

"union select "1", concat(uname||"-"||passwd) as name, "1971-01-01", "0" from usertable;--
再比如:

<?php$query= "SELECT * FROM products WHERE id LIKE "%$prod%"";$result = mssql_query($query);?>
如果攻击提交 a%" exec master..xp_cmdshell "net user test testpass /ADD" -- 作为变量 $prod的值,那么 $query 将会变成

<?php$query= "SELECT * FROM productsWHERE id LIKE "%a%"exec master..xp_cmdshell "net user test testpass /ADD"--";$result = mssql_query($query);?>
有人说以上的攻击必须得知道数据表的结构等阿,但是没人能保证他们获取不到这些信息阿,不管通过猜测还是,比如用户表最常用的就是user,admin表,什么节点表access啊,不是没有可能

而且还有通过修改form表单,添加隐藏域的方法来提交表单,asp的更恐怖, 通过sql注入来猜测数据库语句之类的,而mysql中sql语言不对会报错,不过,依然不要相信别人输入的数据。

最好对每个客户端发送的数据进行严格的检查过滤。以保证网站的安全。而且,可以的话,最好建立一个日志系统,方便你查看网站是否没入侵过。

PHP中免费的开源产品,如dede,帝国,dz,ecshop等,使用者不再少数!不过,越是开源的产品越危险!因为别人很容易就很获取到你的数据库结构,网站目录结构!网站所有代码!攻击网站也轻而易举:

举例说明,dedeV5.7的