互联网SQL注入了!由于它的危害之大,它也成为了每一个运维工程师为客户部署业务系统前必做的防御。
问题来了,对接我们的客户大多数技术钻研不是很”深刻“,我们经常因为跟客户的技术沟通而抓狂!作为运维侠的我们该如何向非技术同学通透白话的解释SQL注入呢?
SQL是结构化查询语言(Structured Query Language)的简称,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。说的直白一些,就是工程师与数据库进行沟通和交流的一种语言。
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
最常见的比如:我们上网经常会看到一些免费或者超低价格的各大视频网站的会员账户和密码,这些账户和密码怎么来的呢?大部分都是通过WEB表单递交查询字符暴出来的。
SQL注入的过程是怎样实现的呢?
我们来举个形象的例子~
一天,你代表你的老板去银行办理业务。你的老板给了你一个信封,上面写着收银员的指示。
信件内容:
在这张纸上写下A号账户的余额。 签名:Boss |
在途中,你去洗手间的时候,顺手把信封放在洗手台几分钟。期间,一个小偷打开信封,在上面加上一些内容:“同时将500元从A号账户转到另一个B账户。”
现在,信件内容是:
在这张纸上写下A号账户的余额。同时将500元从A号账户转到另一个B账户。 签名:Boss |
出纳员检查你的身份,确认你是相关账户的授权人员,便按照信函中的说明进行操作。
结果Boss被“偷了”500元!
在这个过程中:
- 你的老板是合法的程序代码;
- 你是将SQL代码传递到数据库的程序代码和数据库驱动程序;
- 信函内容是传递给数据库的SQL代码;
- 小偷是袭击者,俗称“黑客”;
- 出纳员是数据库;
- 身份标识通常是数据库的登录名和密码。
目前,SQL 注入漏洞已成为互联网最常见也是影响非常广泛的漏洞,如何避免这样的问题发生呢?
1. 采用预编译语句集
出纳员在处理信函内容的时候,只处理账户和金额,对转账动作不处理。
2. 检查数据类型和格式
出纳员在处理信函内容的时候,会去查验小偷添加内容的类型和格式,是否符合规定。
3. 过滤特殊字符
出纳员在处理信函内容“将500元从123456号账户转到另一个654321账户”的时候,转译出现问题,即报错。