大家早上好,今天的英语知识为: 1.one more 再一次 We have one more choice.我们还有一次机会 2. Let's see what it is again. 让我们再次看看发生了什么 3.Let's see what happens when Alejandro makes this choice. 让我们看看Alejandro做出这种选择时发生了什么 4.I'm a little embarrassed to ask,but I can use some advice. 问这个问题有点小尴尬,但是我可以听一些建议。 5.ask for help 寻求帮助 6.The reform and development are necessary for solving the employ problem. 必须用改革的办法和发展的思路来解决就业问题。"reform"意思是“改革”,employ意思是“雇用”。 今天我们学习一下SQL注入的概念,以及如何防范SQL注入。 先得了解一下什么叫做SQL注入。所谓SQL注入,就是SQL的组装和拼接造成的注入,通常是利用用户从前台输入的数据,进行SQL拼装,从而造成的SQL攻击。概念有点抽象,举个例子就全明白了。 数据库中现有一张数据表user,里面存储了用户信息。
如表,现在只有一个用户名为zhangsan,密码为1234的用户。 前台登录页面允许输入用户名和密码(为了方便观察,此处的密码框使用明文形式),如果我以如下的方式输入密码,则无论用户名是什么结果竟然都能登录成功! 这难道不奇怪吗?后台究竟是怎么处理的呢?查看后台查询数据库的SQL才发现了真实原因,后台使用的查询用户的SQL为: 那么,如果前台用户输入的密码是xxx' or '1'='1,则传到后台与这个SQL一拼装,结果为:select id,uname,pwd,age,sex from user where uname='aaa' and pwd='xxx' or '1'='1'; 这里必须要强调一点,在SQL语法中,如果where条件中既有and又有or,则and的优先级高于or,这么一来,再次分析那个拼接成的SQL,则无论用户名是什么,由于'1'='1'返回的结果是true,而且前面是or连接的,则肯定能查询出结果,最终登录成功。这还算好的,因为毕竟只是登录成功,没有对数据造成什么损失,那么再考虑另一种情况:假设当某个VIP会员将要到期,按常理网站后台会根据到期时间将该VIP用户删除,那么SQL语句应该是:delete from viptable where userid='用户ID';如果此时黑客在前台通过SQL注入传入了一个参数,拼接之后的结果可能是delete from viptable where userid='用户ID' or '1'='1';这就悲剧了,因为整个vip用户表中的数据都会被删除! 那么问题来了,如何防范SQL注入所造成的灾难呢? 可以在前台和后台进行验证,例如:在前台通过JavaScript判断用户输入的内容是否包含"or","and"等敏感内容,如果包含则不允许其继续操作,也可在后台中用程序进行判断。也可以通过对后台数据进行加密进行防范。 好了,这就是今天的内容,祝大家周末愉快! 本文转载于微信公众号: 攀言(panyan_666),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|