当我们输入了以上URL后,结果服务器返回我们错误信息,这证明了我们的假设是错误的,那我们该感觉到挫败吗?不,其实这里返回了很多信息,首先它证明了该表名不是job,而且它还告诉我们后台数据库是SQL Server,不是MySQL或Oracle,这也设计一个漏洞把错误信息直接返回给了用户。
接下假定表名是jobs,然后输入以下URL:
http://localhost:3452/ExcelUsingXSLT/Default.aspx?jobid=1"or1=(select count(*) from jobs)
等效SQL语句如下:
SELECT job_id, job_desc, min_lvl, max_lvl
FROM jobs
WHERE job_id="1"or 1=(select count(*) from jobs) "
现在证明了该表名是jobs,这可以迈向成功的一大步,由于我们知道了表名就可以对该表进行增删改操作了,而且我们还可以猜测出更多的表对它们作出修改,一旦修改成功那么这将是一场灾难。
现在大家已经对SQL Injection的攻击有了初步的了解了,接下让我们学习如何防止SQL Injection。
总的来说有以下几点:
1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
(责任编辑:闫小琪)
深层防御方法代表了一套全方位安全哲学,帮助保护计算环境免受许多攻击手法的攻击。 ...[详细]
针对一般中小企业型来说,如果希望对企业网络进行安全管理,不一定非得花高价钱购买专...[详细]
要在Windows Vista加密文件或文件夹,可按下面的操作步骤进行:。 ...[详细]
Visa组织在2001年推出一个他们称为3DS的安全协议,也就是3 Domain Secure的缩写。试图...[详细]
曾令中国杀毒业难堪的AV-Comparatives国际权威评测传来喜讯:在最新公布的AVC回溯测试...[详细]