[安全相关]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导致系统报错,并显示服务的物理地址目录,通过配置项目的错误提示可避免。