首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

产品经理必备IT技术知识之“什么是SQL注入攻击?”

不少优秀的产品经理都会写一些简单的SQL语句进行数据查询的操作,但是会写SQL语句不代表能写好SQL语句。SQL语句写得不好,就会引发SQL注入攻击。SQL注入攻击是Web开发中最常见的一种安全问题,恶意攻击者可以利用它获取数据库中的敏感信息、篡改数据,甚至可以获得系统的控制权限。产生SQL注入漏洞的原因也很简单:开发者没有对用户提交的内容进行审核,导致恶意 SQL 语句被执行。

我们来看一个简单的例子。假设有一个登录系统,用户在登录时提交了用户名和密码,如果通过用户名和密码能从后台数据库中找到某个用户,就算登录成功。根据这个例子可以写出这样的伪代码:

可以看出,这个SQL语句会将查询语句和用户提交的数据拼接起来。如果提交的用户名是guoguo,密码是passwd123,这个SQL语句就是:

这里就有点蹊跷了。我们先看前面那个SQL语句:账号和密码两个条件必须匹配上,才会返回用户guoguo的信息,否则查询不到任何结果。再来看第二个SQL语句。要知道,“--”在SQL语句中是注释符号,它后面的语句都将被视为无效,那么这个SQL真正有效的部分是:

SELECT * FROM user_table WHERE username='guoguo'

它的含义是“找出用户名是guoguo的用户”。这样黑客完全不需要知道密码,就能拿到guoguo的用户信息,继而登录账户。这也是互联网发展早期大家口口相传的“万能密码”。

这种通过在提交的数据里加入SQL代码巧妙地改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。如何防范SQL注入攻击呢?其实也很简单,在这个例子中,我们将用户输入的用户名和密码进行校验,只允许字母和数字出现,那么“guoguo'--”中的“'--”会被视为非法输入而拒绝执行SQL,这个攻击就起不到任何作用了。

当然,只允许使用字母和数字这个规则过于粗暴,会误伤一些真正有效的输入。我们在实践中使用的是更复杂、也更精细的过滤规则。只需要记住一个原则:永远不要相信外界输入的数据,对任何外界输入的数据都要做合法性的校验。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200414A0RY0D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券