SQL 注入是一种代码渗透技术,是最常用的网络黑客技术之一。SQL 注入非常危险,可能会导致数据库中的数据被暴露,甚至被损坏。
通过网页输入框(<input> 标签、<textarea> 标签等)将恶意 SQL 代码提交给服务器是最常见的 SQL 注入方式之一。
当网站要求输入诸如用户名(用户ID)之类的内容时,通常会发生 SQL 注入。黑客会输入一条 SQL 语句,而不是用户名/用户ID,当页面被提交以后,我们将不知不觉地在数据库上运行这条恶意的 SQL 语句。例如,下面的代码会将 userID 参数拼接到 SQL 语句中,从而构建 SELECT 查询,从数据库中获取当前用户的所有信息。
SQL 注入的危害
SQL 注入会带来很多危害,包括但不限于:
骗过登录校验,查看用户登录后的详细信息(例如发布的评论、购买的商品、邮寄地址等),这是 SQL 注入的最简单形式;
更新、删除和插入记录,破坏数据库中的数据;
在服务器上执行命令,该命令可以下载和安装木马等恶意程序;
将有价值的用户数据(例如邮箱、密码、信用卡等)导出到攻击者的远程计算机。
防止 SQL 注入
SQL 注入不能杜绝,只能尽力防止,因为即使最优秀的程序员也会犯错。Web 防火墙可以检测和阻止最基本的 SQL 注入攻击,但是它仅仅是一种预防手段,我们还要从自己的代码入手,检测用户输入的内容。永远不要信任用户提供的数据,仅在校验通过后才能将数据提交给数据库。
通常使用模式匹配(Pattern Matching),借助正则表达式来校验用户输入的数据,几乎每种编程语言都提供了模式匹配函数。