[安全相关]SQL注入

SQL注入常用方式

(1) or 1=1

利用or使where的条件无效,从而绕过where验证:

http://localhost:3452/ExcelUsingXSLT/Default.aspx?jobid=1'or'1'='1

等效SQL语句如下:

SELECT     job_id, job_desc, min_lvl, max_lvl
FROM         jobs
WHERE     job_id = '1' OR '1' = 1'

 

(2) --

利用--注释原SQL语句,并插入新语句

http://localhost:3452/ExcelUsingXSLT/Default.aspx?jobid=1'or 1=(select count(*) from job)--

使用--注释掉后面的SQL,并利用常量1=()执行自定义SQL

SELECT       job_id, job_desc, min_lvl, max_lvl 
FROM         jobs 
WHERE      job_id='1'or 1=(select count(*) from job) --

 

(3)

 

如何防止SQL入住?

(1)使用正则表达式过滤 单引号,减号等敏感字符

(2)不能拼接SQL语句,使用参数化SQL或者使用存储过程

  在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。存储过程同理。

(3)不要使用管理员权限运行SQL,每种操作规定有限的权限

(4)敏感信息不能明文存储

(5)不要给出原生SQL错误提示,会泄露数据库信息,自定义错误提示

  否则用户可以通过恶意输入错误SQL导致系统报错,并显示服务的物理地址目录,通过配置项目的错误提示可避免。

 

posted @ 2014-11-06 22:36  iyjhabc  阅读(233)  评论(0编辑  收藏  举报