我们来举个形象的例子~
一天,你代表你的老板去银行办理业务。你的老板给了你一个信封,上面写着收银员的指示。
信件内容:
在这张纸上写下A号账户的余额。
签名:Boss
在途中,你去洗手间的时候,顺手把信封放在洗手台几分钟。期间,一个小偷打开信封,在上面加上一些内容:“同时将500元从A号账户转到另一个B账户。”
现在,信件内容是:
在这张纸上写下A号账户的余额。同时将500元从A号账户转到另一个B账户。
签名:Boss
出纳员检查你的身份,确认你是相关账户的授权人员,便按照信函中的说明进行操作。
结果Boss被“偷了”500元!
在这个过程中:
你的老板是合法的程序代码;
你是将SQL代码传递到数据库的程序代码和数据库驱动程序;
信函内容是传递给数据库的SQL代码;
小偷是袭击者,俗称“黑客”;
出纳员是数据库;
身份标识通常是数据库的登录名和密码。
目前,SQL 注入漏洞已成为互联网最常见也是影响非常广泛的漏洞,如何避免这样的问题发生呢?
1 . 采用预编译语句集
出纳员在处理信函内容的时候,只处理账户和金额,对转账动作不处理。
2 . 检查数据类型和格式
出纳员在处理信函内容的时候,会去查验小偷添加内容的类型和格式,是否符合规定。
3 . 过滤特殊字符
出纳员在处理信函内容“将500元从123456号账户转到另一个654321账户”的时候,转译出现问题,即报错。
SQL防火墙是数据库层面的防火墙功能,可以防止恶意SQL注入。SQL防火墙的使用步骤可以参考这篇文档帮助。