以前整理了多篇须要发布的文章草稿,这篇关于后续的文章一直放在掘金文章草稿箱的底部,致使一直没有注意到它,直到如今才发布上来,各位请见谅。git
2019 年 12 月 16 日早上八点半,我在掘金上发布了来到这个平台的第一篇文章《捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?》,文章主要讲述了一下本身在开源项目 newbee-mall 中的一个 bug 被国家信息安全漏洞共享平台 CNVD 和国际安全漏洞库 CVE 收录的事件。多是文章写得很逗吧,你们也以为有意思,因此阅读量还算不错:程序员
8 点半发布,3 小时后再去看已经有 4K 的阅读量了,看到这里我真的是坐卧不安,虽然已经写了几年的文章,可是对于掘金来讲,我仍是一个新人,因此特别感谢你们的支持!github
原本以为那篇文章已经把整个事件讲完了,可是有朋友在文章下面留言,也有朋友在群里给我发消息,让我作一点小小的扩展,所以又动笔写了这篇文章,讲讲后续的事情以及朋友们问到的几个问题,可是草稿箱里的文章太多了,致使忽略了这一篇,原本是应该在去年年末发的,搞到如今 3 月底才发上来,尴尬。数据库
文章发出以后呢,也有朋友留言称 “个人梦想就是有一个本身的 CVE 编号”,下面还有朋友附和:安全
看到这里呢,我是有些蒙了,咱也不知道咋回事儿,咱也不敢问。网络
虽然我经历过 CVE 和 CNVD 此次事件,可是我对于 CVE 仍是有些陌生的,因此看到上面这个对话呢,我也不知道真的假的,总感受他们在逗我玩儿。app
固然,不懂嘛,就去学习,看到上面的这个对话,我有个想法就是:“CVE 编号是有必定价值的”,可是我对于这个东西能够说是一无所知,所以我以为这应该不是开发者圈子里的事情,更像是网络安全圈的术语和事情,以后我又在空闲的时间去查了一些 CVE 的资料。框架
因为并非特别了解,我只是简单的谈一下本身的想法,若有不当之处还望见谅。post
CVE 的全称是 “Common Vulnerabilities and Exposures” ,翻译成中文就是“公共漏洞和披露”,咱们能够把它理解成一个被安全从业者承认的漏洞字典,划重点,安全从业者,这个东西确实不是开发者圈内的事情,因此感受陌生也是正常的,你们能够经过 CVE 编号在 CVE 官网查找不一样应用或系统的漏洞信息,不少安全企业或国家机构也都会引用 CVE 做为其漏洞库,好比前文中提到的 CNVD 即为咱们国内的漏洞数据库。学习
说完了 CVE,我们接着来讲一下 CVE 编号的价值,如下内容主要是经过网上的一些内容整理出来的。
首先,提交了 CVE 漏洞是有可能直接得到奖金的,可是不一样的组织或许会有不一样的漏洞奖励计划,不一样的漏洞确定奖励级别也不同,若是你提交了颇有价值的信息,颇有可能得到一笔奖金。其次,即便没法直接得到奖金,你也能够经过提交 CVE 漏洞来得到一些有价值的 CVE 编号,这些内容能够放到简历里,也能够做为找工做的加分项,好比咱们开发人员运营的 GitHub 仓库或者博客文章,也能够放在咱们求职简历里做为加分项。
以上是我对于 CVE 编号价值粗浅的认识,可能还有其余更大的价值,可是我不太了解,所以再也不继续献丑了。
CVE 编号的获取是须要去主动申请的,就像是申请一个帐号同样,总之,去对应的网站填写表格便可,以后就是漏洞的审核、漏洞的公开等等步骤,若是一切顺利而且漏洞是真实存在的,就能够得到一个 CVE 编号啦。
还有,得到 CVE 编号并不等于这个漏洞是有价值的,甚至说这个漏洞都不必定是真实存在的,好比前文中提到的 newbee-mall 项目的 SQL 注入漏洞,漏洞虽然是真实存在的,可是影响面不会特别大,没有影响到网络安全,我的以为这个 CVE 编号的价值并不大,却是此次乌龙事件把我吓得不轻。
这里也有朋友问到了此次 bug 的解决过程,这里我也来解释一下,这个 bug 实际上是一个比较简单的缘由致使的,就是在 Mapper 文件中传参时我使用了 ${}
方式,这种方式也可以正确的解析参数和执行 SQL 语句,可是会存在 SQL 注入的风险,因此须要处理掉,解决的方式就是改成 #{}
进行参数解析。
#{paramentName}
是预编译处理,MyBatis 框架在处理 #{}
时会将 SQL 语句中的 #{}
解析为一个参数占位符,而后调用 PreparedStatement 的 set 方法来赋值,传入字符串后,会在值两边加上单引号,好比传入的 keyword 参数值为 电脑
,在拼接到 SQL 语句中时会变成 '电脑'
。
${paramentName}
是字符串替换, MyBatis 框架在处在处理 ${}
时会将 SQL 语句中的 ${}
替换为变量的值,传入的参数值不会加两边加上单引号,好比传入的 keyword 参数值为 电脑
,在拼接到 SQL 语句中时依然是 电脑
。
因此使用 ${}
方式会致使 SQL 注入问题,不利于系统的安全性,由于这种方式是直接替换,传进来什么值就会拼接什么值,若是有一些 SQL 关键字被恶意拼接进来可能致使一些不可挽回的损失,而使用 #{}
方式的话,无论传进来什么,都会被解析为一个字符串。
这个知识点也不是特别麻烦,想要了解更多的话,你能够查一下“Mybatis中$与#的区别”。
这个广告,在这篇文章里出现了 N 屡次,心累。
我这真的是捅了猴子窝了。
每次都会找管理员帮忙清理一波,真的是辛苦各位了。
作个小推广,感兴趣的朋友能够看一看,最近我在掘金平台上发布了一本小册《Spring Boot 大型线上商城项目实战教程》(点击该连接或者点击下方图片购买能够优惠 8 折哦):
小册将围绕 Spring Boot 技术栈,使用的其它技术框架也会兼顾最新技术动向,对知识进行拓展,由浅入深,步步为营,在学习基础的同时也可以掌握必定的开发技巧,不只仅只是学习 Spring Boot 的皮毛,也知晓它的源码设计和内部原理,不只仅只是学习 Spring Boot 的相关技术栈整合,也可以使用 Spring Boot 技术栈搭建一个大型的商城系统,从而让你拥有一个高质量的学习进阶体验。远离 Hello World 项目,让你既可以获得一份完整的实操项目,也可以帮你点满目前炽手可热的 Spring Boot 技术栈,为你的技术深度和薪水职位的提高提供充足的保障。
这是一个商城的实战项目,部分页面预览图以下:
感兴趣的朋友能够关注一下。
除注明转载/出处外,皆为做者原创,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文连接,不然保留追究法律责任的权利。
感谢你们的观看,我是十三,文章首发于个人公众号“程序员的小故事”。