在前两篇文章 # 面试官:网络安全了解多少,简单说说?(一) 与 # 面试官:网络安全了解多少,简单说说?(二) 中详细分析了 XSS 与 CSRF 的漏洞原理与攻击设施过程,相信大家对于网络攻击已经有了一点了解,也能够感受到网络安全之于开发者是多么的重要,前两篇主要讲解的是偏前端的安全漏洞,那么今天我们讲解一个偏后端的一个漏洞,SQL 注入攻击。
顾名思义,sql,即数据库sql查询语句,我们都知道,任何涉及到存储的东西,例如身份验证、信息查询、信息提交等等,涉及到数据持久性的,都离不开数据库的支持,而数据库上层的操作语言是 SQL,那么如果不加强防范的话,通过 SQL 的相关漏洞,也就能够对数据库进行一些非法的攻击,进而达到窃取数据库相关敏感信息以及越权访问等高危攻击行为。
在存在漏洞的页面上的某个输入框中,猜测输入框背后对应的 SQL 查询语句的构成方式,也就是说,需要在这一步猜测通过前端提交到服务器上的参数是如何嵌入到 SQL 查询语句中的,然后通过 SQL 语句的语法分析,运用条件符 or、and 等改变语句的判断方式,或者加入“;”对语句进行闭合等方式,构造特殊的恶意攻击语句
服务器将接收到的请求参数代入到 SQL 语句中,形成最终的 SQL 执行语句,最后提交到数据库中执行
当服务器将拼接产生的恶意 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 相关的安全执行框架,采用这些框架执行,而不是人工拼接语句,也就能够有效避开执行安全问题。
就像前面安全系列相关文章提到的一样,永远不要相信用户的任何输入,永远不要,永远不要,对于用户输入的东西,在前端就做好过滤,然后再提交到后端,这才是一个合格的前端需要养成的良好习惯,永远不要将安全责任都推到后端身上,因为我们需要相信,前端+后端,永远是更加安全和稳固的安全开发范式!
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
朋友们如果有需要的话,可以点击下方链接领取或者V扫描下方二维码联系领取~
CSDN大礼包,二维码失效时,点击这里领取 《黑客&网络安全入门&进阶学习资源包》获取入口
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
CSDN大礼包,二维码失效时,点击这里领取 《黑客&网络安全入门&进阶学习资源包》获取入口