很多人在做开发的时候并没有注意到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 products WHERE 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 products WHERE 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的
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, sql插入数据的问题
, 查询
, 命令
, query
, 语句
name
易语言sql注入源码、易语言sql注入、php防止sql注入、php sql 防注入、php过滤sql注入函数,以便于您获取更多的相关知识。