收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 959|回复: 0

[讨论] SQL注入攻击后如何保证Web安全

[复制链接]
发表于 2016-6-14 16:54:44 | 显示全部楼层 |阅读模式
        不少朋友都会写SQL语句,如果你还不会写,可是你造吗,SQL注入攻击是Web开发中最常见的一种安全问题,恶意攻击者可以利用它来获取数据库中的敏感信息、篡改数据,甚至可以获得系统的控制权限。产生SQL注入漏洞的原因也很简单,就是开发者没有对用户提交的内容进行过滤,导致了恶意SQL语句的执行。
SQL注入攻击后如何保证Web安全
我们来看个简单的例子,假设有一个登录系统,用户在登录时提交用户名和密码,如果通过用户名和密码能从后台数据库中找到某个用户,那么就算登录成功了。可以写出这样的代码:
username = req.POST['username']
password = req.POST['password']
sql = "SELECT * FROM user_table WHERE username='" + username + "' AND password='" + password + "'"

可以看出,这个SQL语句是将查询语句和用户提交的数据拼接起来的,如果我提交的用户名是guoguo,密码是passwd123,那么这个SQL语句就是:
SELECT * FROM user_table WHERE username='guoguo' AND password='passwd123'

这样看上去很正常对吧?可是,如果我是个坏人,提交的数据是这样的,用户名填的是guoguo' -- ,密码是123,那么在后台得到的SQL语句就变成这样的了:
SELECT * FROM user_table WHERE username='guoguo' --' AND password='123'

这里就有点蹊跷了哦,我们先看前面那个SQL语句,必须是账号密码两个条件匹配上了,才会返回guoguo这个用户的信息,否则查询不到任何结果。再看第二个SQL语句,--在SQL语句中是注释符号,它后面的语句都将被无视,那么这个语句翻译成白话就是“把用户名是guoguo的用户给我找出来”,看见没?这样完全不需要知道密码,就能拿到guoguo的用户信息,继而登录guoguo的账户。

这种通过在提交数据里面写入SQL代码,巧妙改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。

如何防范SQL注入攻击呢?其实也很简单,在这个例子中,我们将用户输入的数据进行过滤,只允许使用字母和数字,那么这个攻击就起不到任何作用了。

当然了,你也可以写更复杂的过滤规则,不过我们只需要记住一个原则就行了,永远不要相信外界输入的数据。现在扫描SQL注入的工具也有很多,上线前,多用安全工具扫一扫,防范有疏漏喔~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-12-16 18:27 , Processed in 0.109101 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表