SQL注入与预防

定义:
把SQL命令插入到Web表单提交或者输入域名或者构造页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令来盗取信息或者攻击数据库服务器。
检查SQL注入漏洞
检查所有的输入;包括域名输入(GET)表单提交(POST)以及PUT请求,如果在这些地方注入SQL命令能够成功进入系统或者抛出SQL异常则可能存在SQL注入漏洞。
页面请求域数字注入
如原域名为:
localhost:8080/Test/article?id=1
注入为localhost:8080/Test/article?id=-1 OR 1=1(如果后端没有类型校验输入SQL命令也非预编译那么将查询出所有的数据因为1=1永远为真)
字符串注入
如表单提交后的查询信息为
SELECT * FROM t_user WHERE username='username' AND password ='password'
注入攻击为:
在username输入处加入SQL的注释“#”或者“--”
效果为SELECT * FROM t_user username='username' # ' AND password ='password'
那么红色字体部分将会被SQL服务器认为是注释语句而不执行。“--”效果等同于“#”
预防SQL注入
1.永远不要信任用户的输入。对用户的输入进行 类型 格式 校验,可以确定类型校验type、通过 正则表达式 校验格式 ,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql(JDBC提供的PreparedStatement的参数化查询)或者直接使用 存储过程 进行数据查询存取。
3.永远不要使用 管理员 (root) 权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的 错误信息 对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助 软件 或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思 网站安全 平台检测工具。MDCSOFT SCAN等。采用 MDCSOFT-IPS 可以有效的防御SQL注入,XSS攻击等。
预编译机制预防SQL注入
首先看一下非执行预编译的效果
1、构造永远为真的查询
2、构造注释字符串攻击

可以看到在“#"后面所有的条件都被注释掉了,如果此处前面的条件是用户名那么则可以通过此注入拿到用户密码等信息。
再看预编译后的结果
1、构造永远为真的查询
可以看到对于永远为真的查询虽然不会返回所有记录但是仍然会返回第一条记录,所以在对于预编译的参数检验的时候仍然需要做格式和类型校验。
2、构造注释字符的查询
可以看到对于使用注释符的参数将抛出异常。
MYSQL服务器的预编译命令
  • 预编译:PREPARE statementName FROM 'SQL 语句'
  • 注入参数:SET @a=a,@b=b;
  • 执行:EXECUTE statementName USING @a,@b
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值