【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第八节:网关-注入攻击与预防

【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路------第八节:网关-注入攻击与预防

这篇文章我们来看SQL注入。

SQL注入攻击的原理

SQL注入攻击的原理呢?我们来简单说一下,它就是通过攻击者在http的请求当中注入恶意的SQL命令,比如说把某个表进行删除,那么服务器在用请求参数构造数据库的命令的时候,恶意的SQL语句也被一起构造了,我们来写一个例子。

也就是说,比如说我们要请求一个URL,这URL后面比如说要查询一个user,然后查询user呢,后面需要跟上一个username。然后这个username,攻击者就写一个"'name'; drop table user;"这个命令,然后就提交到提交到数据库的。然后服务器在构造这个查询SQL语句的时候,可能就"select * from user where username = 'name'; drop table user;"这么写了。那么不仅执行了正常的业务逻辑,还执行了后面的这个删除表结构的代码,这个就是SQL注入。

攻击者获取数据库表结构

SQL注入攻击者需要对被攻击的数据库有所了解才能进行。攻击者获取数据库表结构的表结构信息,有以下几种。

第一种是开源代码,就是说我们公司的一些系统。是根据开源代码进行搭建的,比如说好多免费的论坛呀,博客呀。那么这个时候网站的数据库结构就是公开的,攻击者可以随便获取到。

还有一个很重要的就是和我们对用户的提示有关,比如说有的网站的一些报错信息会直接将错误信息展示在页面上。比如说一个500错误,后面跟着一大堆堆栈的信息,还有一个表名,那么这样的话呢,也会让攻击者了解到表结构。

所以错误信息的提示,一定要规划一下。我们内部系统的错误提示可以随意一些,不用那么注意,但是从网关进行出口的一些错误的提示,一定要封装好,最好是用状态码,加上我们自定义的错误提示。

预防SQL注入的方法

然后预防SQL注入的方法呢,我们前面也讲过,主要思路就是让攻击者猜不到我们数据库的信息。

我们可以通过两种方式,一种是消毒。也就是攻击者在给我们提交请求参数的时候,我们把这些敏感字给它进行一个提示。他写了一个drop或者delete,我们就提示"输入的参数非法",要么就是把他的drop直接替换掉,替换成安全字符,比如说替换成空格,替换成星号等等都是可以的。

还有一种就是参数绑定,现在的这种数据访问层框架,基本上都支持参数绑定。参数绑定是什么?就是说攻击者,比如说他写了这么一个参数"'name'; drop table user;",那么会在我们的SQL里面呢,把后面的这个当成是一整个参数,并不会去执行它单独的一个一个SQL。这样的话,这个攻击者的这个攻击呢就无效。

相关推荐
星核0penstarry39 分钟前
企业 API 向后兼容实战:版本控制、废弃字段通知与灰度发布策略
人工智能·后端·api·接口隔离原则·版本控制·架构设计·后端架构
Dawson Zhu43 分钟前
【AI编译器入门⑥】端到端编译流程实战:ONNX → TVM → TensorRT全链路
人工智能·语言模型·架构·aigc·agi
学网安的肆伍1 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
深圳市益普科技有限公司1 小时前
半导体SPC工具怎么选?从控制图算法到落地架构的对比
大数据·人工智能·架构
阿狸猿1 小时前
系统架构评估方法及其应用
系统架构
Eyfcom1 小时前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统
每天一道题1 小时前
微服务为什么会变慢?从 QPS、P99 到 Trace 与性能瓶颈
微服务·云原生·架构
xunberg1 小时前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
你看我名字1 小时前
系统架构的演变:从单机应用到双十一级高并发系统
系统架构
网络小江1 小时前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out