WEB安全(十四)如何防止SQL注入

本文介绍了SQL注入攻击的概念,通过登录页面的示例解释了攻击方式。同时,讨论了防止SQL注入的策略,包括限制数据库权限、定制错误信息、使用参数化SQL以及数据转义等。特别强调了Mybatis中使用#{}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是SQL注入

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

例如在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,这类表单特别容易受到SQL注入式攻击。

还有mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候需要防止sql注入。

二、SQL注入的例子

登录页面,输入账号密码验证登录,后台SQL简化(为演示方便,去掉密码的加密过程):

SELECT * FROM Login WHERE UserName='admin' AND Password='123456'

SQL注入,用户名栏输入“admin’–”,后台运行SQL为:

SELECT COUNT(*) FROM Login WHERE UserName='admin'-- Password='123'

因为UserName值中输入了“–”注释符,后面语句被省略而登录成功。(常常的手法:前面加上’; ’ (分号,用于结束前一条语句),后边加上’–’ (用于注释后边的语句))

三、防止SQL注入

1、数据库权限控制,只给访问数据库的web应用功能所需的最低权限帐户。

2、自定义错误信息,首先我们要屏蔽服务器的详细错误信息传到客户端。

3、尽可能使用参数化SQL,避免使用非参数化SQL,即动态拼接SQL。

4、mybatis中使用#{},避免使用${}

  • #{}使用预编译的语句,即底层使用JDBC的PreparedStatement占位符?,预编译,可以防止sql注入。

  • ${}底层使用Statement ,字符串拼接,存在SQL注入风险。

5、输入数据转义

在模糊查询LIKE中,对于输入数据中的通配符必须转义,可使用ESCAPE关键字定义转义符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值