快捷搜索:  汽车  科技

sql注入防御的五种方法(产品经理必备IT技术知识之)

sql注入防御的五种方法(产品经理必备IT技术知识之)当然,只允许使用字母和数字这个规则过于粗暴,会误伤一些真正有效的输入。我们在实践中使用的是更复杂、也更精细的过滤规则。只需要记住一个原则:永远不要相信外界输入的数据,对任何外界输入的数据都要做合法性的校验。SELECT * FROM user_table WHERE username='guoguo'它的含义是“找出用户名是guoguo的用户”。这样黑客完全不需要知道密码,就能拿到guoguo的用户信息,继而登录账户。这也是互联网发展早期大家口口相传的“万能密码”。这种通过在提交的数据里加入SQL代码巧妙地改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。如何防范SQL注入攻击呢?其实也很简单,在这个例子中,我们将用户输入的用户名和密码进行校验,只允许字母和数字出现,那么“guoguo'--”中的“'--”会被视为非法输入而拒绝执行SQL,这个攻击就起不到任何作用了。

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

sql注入防御的五种方法(产品经理必备IT技术知识之)(1)

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

sql注入防御的五种方法(产品经理必备IT技术知识之)(2)

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

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

SELECT * FROM user_table WHERE username='guoguo'

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

sql注入防御的五种方法(产品经理必备IT技术知识之)(3)

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

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

猜您喜欢: