JAVA程序员如何彻底解决SQL注入漏洞

幸运草
幸运草
幸运草
896
文章
3
评论
2020年3月30日21:13:35 评论 307
JAVA程序员如何彻底解决SQL注入漏洞

SQL注入是什么

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

SQL注入危害

1.数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

2.数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

3.服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

4.破坏硬盘数据,瘫痪全系统。

SQL注入示例

如代码采用如下写法

``select * from users where name = '" + userName + "'";

当 userName 被恶意传入:

  • zz' or '1'='1
  • 'or 1=1 --
  • zz';drop table users;

将发生SQL注入,注入后果大家自己体会下。

"select * from users where employee_id = "  + userID;

当userID被恶意传入

123 or 1=1

将发生SQL注入。

如何防护

“别和我讲原理,别和我说漏洞,告诉我代码要怎么写就行”   ——资深程序员

说完废话,我们以 JAVA  MyBatis框架为例 说下各种场景下代码怎么写可以避免SQL注入漏洞。场景已覆盖全面,如果按下面的格式写代码可避免99%的SQL注入问题。

原则

MyBatis在进行参数操作时支持#{参数}和${参数}两种形式,其中#{参数}为预编译方式,${参数}为拼接方式。

数据库操作安全原则

1. 通常情况下SQL语句都应使用预编译操作,禁止拼接SQL语句。

2. 特殊情况下(一般指order by、group by、表名)需要进行SQL拼接时,需在Services层对变量进行预定义转换,禁止将变量直接拼入SQL语句。

场景

  • 构建普通条件语句
  • 构建like条件语句
  • 构建in条件语句
  • 构建order by语句
普通条件语句

JAVA程序员如何彻底解决SQL注入漏洞

结果对比

JAVA程序员如何彻底解决SQL注入漏洞

构建like条件语句

JAVA程序员如何彻底解决SQL注入漏洞

结果对比

JAVA程序员如何彻底解决SQL注入漏洞

构建in条件语句

JAVA程序员如何彻底解决SQL注入漏洞

结果对比

JAVA程序员如何彻底解决SQL注入漏洞

构建order by语句

order by 语句比较特殊 直接使用 #{} 会与程序员预期结果有出入。

对这种场景的处理 在Services层对变量进行预定义转换。

//先定义order by可能的字段

map.put("k1","epoch")

map.put("k2","date")

//获取用户提交的排序数据

String sortField = request.getParameter("sort");

// 判断用户提交数据是否在之前预定义的map里面

boolean result = fieldMap.containsKey(req_sortField);

if(result){

sortField = fieldMap.get(req_sortField).toString(); }

// Mybatis 配置文件

<select id="sortSQL">

SELECT * FROM Users

<if test="sortField" != null >

ORDER BY ${sortField}

</if>

</select>

总结

普通条件语句  使用#{}

like 条件语句 使用#{}+CONCAT

in 条件语句 使用 #{} +foreach

order by条件语句 使用 ${} + 在Services层对变量进行预定义转换。

按以上示例写代码可屏蔽99%的SQL注入问题。

本文来源于:JAVA程序员如何彻底解决SQL注入漏洞-变化吧
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

转载请注明:{{title}}-变化吧
  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 赞助本站
  • 支付宝扫一扫
  • weinxin
幸运草
学会与网络威胁共存 安全防范

学会与网络威胁共存

网络威胁就像感冒或者其他什么感染性病毒,谁也无法避免。但这是生活的一部分,它们就在那里,伺机给你来上一下,让你的生活变得有那么点点艰难。 同时,你又不能以牺牲业务发展的方式全情投入到防范潜在风险上。你...
2020年7种最大的网络安全威胁 安全防范

2020年7种最大的网络安全威胁

计算机盲打的技巧与方法【听看打练习】盲打不是几天就能练出来的。 首先你要把键盘上字母和数字的位置背下来。 再有严格遵照正规指法练习(就是哪个指头负责哪片键盘区)。 每个字都要按照上面的要求打出来,一个...
Web | 渗透神器nmap:端口扫描工具 漏洞扫描

Web | 渗透神器nmap:端口扫描工具

Watcher - 被动Web应用程序漏洞扫描程序Watcher是基于HTTP的Web应用程序的运行时被动分析工具。被动意味着它不会损害生产系统,在云计算,共享托管和专用托管环境中使用它是完全安全的。...