面试官:网络安全了解多少,简单说说?(三)

3,038 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

写在前面

在前两篇文章 # 面试官:网络安全了解多少,简单说说?(一)# 面试官:网络安全了解多少,简单说说?(二) 中详细分析了 XSS 与 CSRF 的漏洞原理与攻击设施过程,相信大家对于网络攻击已经有了一点了解,也能够感受到网络安全之于开发者是多么的重要,前两篇主要讲解的是偏前端的安全漏洞,那么今天我们讲解一个偏后端的一个漏洞,SQL 注入攻击。

SQL 注入

顾名思义,sql,即数据库sql查询语句,我们都知道,任何涉及到存储的东西,例如身份验证、信息查询、信息提交等等,涉及到数据持久性的,都离不开数据库的支持,而数据库上层的操作语言是 SQL,那么如果不加强防范的话,通过 SQL 的相关漏洞,也就能够对数据库进行一些非法的攻击,进而达到窃取数据库相关敏感信息以及越权访问等高危攻击行为。

攻击过程

20220612160738.png

1、构造恶意语句

在存在漏洞的页面上的某个输入框中,猜测输入框背后对应的 SQL 查询语句的构成方式,也就是说,需要在这一步猜测通过前端提交到服务器上的参数是如何嵌入到 SQL 查询语句中的,然后通过 SQL 语句的语法分析,运用条件符 or、and 等改变语句的判断方式,或者加入“;”对语句进行闭合等方式,构造特殊的恶意攻击语句

2、服务器构造SQL语句

服务器将接收到的请求参数代入到 SQL 语句中,形成最终的 SQL 执行语句,最后提交到数据库中执行

3、数据库执行恶意语句

当服务器将拼接产生的恶意 SQL 语句提交到数据库后,数据库默认按照 SQL 要求执行对应的操作,最终产生了恶意攻击的效果

典型案例

假设某网站是一个个人相关信息查询网站,登录需要验证,当验证通过则能够查询到所有相关的个人信息。

黑客攻击:首先黑客按照以往的渗透测试经验,猜测到登录验证的 SQL 语句大致为 select * from user where user=user and psd=psd; ,其中 user 与 psd 为前端输入框传到服务器的参数,那么这个时候黑客便可以通过构造特殊的 user 和 psd 来改变原来执行的 SQL 语句,当 user = yimwu';-- 时,构造出来的语句是这样子的 select * from user where user='yimwu';--' and psd=psd; ,这个语句中 -- 表示注释,直接忽略了后面的其他内容,因此可以实现的效果是直接绕过了密码,无需验证密码即可完成个人信息查询。

防范措施

从上面典型案例的分析后,我们可以看出,对于 SQL 注入的防范其实并不复杂,主要还是对输入进行细致的过滤,对于相关的关键词进行屏蔽和转义,也就能够在前端有效得规避一些风险,而对于后端来说,如果需要做到更加安全地执行语句,应该采用非拼接的方式执行 SQL,像目前使用较为广泛的 java、python、Go 等,都有 SQL 相关的安全执行框架,采用这些框架执行,而不是人工拼接语句,也就能够有效避开执行安全问题。

总结

就像前面安全系列相关文章提到的一样,永远不要相信用户的任何输入,永远不要,永远不要,对于用户输入的东西,在前端就做好过滤,然后再提交到后端,这才是一个合格的前端需要养成的良好习惯,永远不要将安全责任都推到后端身上,因为我们需要相信,前端+后端,永远是更加安全和稳固的安全开发范式!

往期好文推荐

面试官:说说从输入 URL 到页面显示到底经历了什么,体现一下你的知识广度

面试官:作为前端,服务器相关了解多少?

面试官:HTTPS 采用的是对称加密还是非对称加密?具体说说其加密过程

面试官:说说 Cookie 和 Token 的区别?

面试官:网络安全了解多少,简单说说?(一)

面试官:网络安全了解多少,简单说说?(二)

面试官:网络安全了解多少,简单说说?(三)

面试官:网络安全了解多少,简单说说?(四)

面试官:网络安全了解多少,简单说说?(五)

面试官:网络安全了解多少,简单说说?(六)

面试官:网络安全了解多少,简单说说?(七)

面试官:网络安全了解多少,简单说说?(八)

浅尝 | 从 0 到 1 Vue 组件库封装

面试官:这么简单的正则表达式都不会?

Webpack 打包类库踩坑

面试官:你就只会 npm run build 吗?(Webpack 配置 Vue+Ts)

面试官:连VuePress都没搭过还说开发过组件库?(VuePress 搭建)

面试官: 连 Vue 视图更新都不会写?(Vue视图更新原理【一】)

面试官: 能不能手写 Vue 响应式?(Vue2 响应式原理【完整版】)

面试官:能不能手写 Vue3 响应式(Vue3 原理解析之响应系统的实现)

JS 优雅之道(JS 代码优化小 Tip)

面试官:你真的会用 SVG 吗? (SVG 应用实战)

面试官:说一下这个Loading动画实现思路 (CSS3 实现 Loading 动画)

JS 扫盲题 ( 面试题梳理系列 (一))

面试官:你确定你说的防抖不是节流吗?( 面试题梳理系列 (二))

面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用)

面试官:你真的理解 Event Loop 吗?( JS 事件循环 )

面试官:v-for 中 key 为什么不能用 index,从原理层面聊聊?

面试官:vue-router 的 hash 与 history 哪个模式会刷新页面?

面试官:说说你平时用过的自适应方案(数字孪生可视化自适应方案)

面试官:说一下如何优化过渡动画(数字孪生可视化过渡动画)

写在最后

博主接下来将持续更新好文,欢迎关注博主哟!!
如果文章对您有帮助麻烦亲点赞、收藏 + 关注和博主一起成长哟!!❤️❤️❤️