如果你是做Java web应用开发的,那么必须熟悉那声名狼藉的SQL注入式攻击。去年Sony就遭受了SQL注入攻击,被盗用了一些Sony play station(PS机)用户的数据。在SQL注入攻击里,恶意用户通过SQL元数据绑定输入,比如:某个网站的登录验证SQL查询代码为:
strSQL = "SELECT * FROM users WHERE name = '" + userName + "' and pw = '"+ passWord +"';"
恶意填入:
userName = "1' OR '1'='1";
passWord = "1' OR '1'='1";
那么最终SQL语句变成了:
strSQL = "SELECT * FROM users WHERE name = '1' OR '1'='1' and pw = '1' OR '1'='1';"
因为WHERE条件恒为真,这就相当于执行:
strSQL = "SELECT * FROM users;"
因此可以达到无账号密码亦可登录网站。如果恶意用户要是更坏一点,用户填入:
strSQL = "SELECT * FROM users;"
SQL语句变成了:
strSQL = "SELECT * FROM users WHERE name = 'any_value' and pw = ''; DROP TABLE users"
这样一来,虽然没有登录,但是数据表都被删除了。
然而使用PreparedStatement的参数化的查询可以阻止大部分的SQL注入。在使用参数化查询的情况下,数据库系统(eg:MySQL)不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。
补充:避免SQL注入的第二种方式:
在组合SQL字符串的时候,先对所传入的参数做字符取代(将单引号字符取代为连续2个单引号字符,因为连续2个单引号字符在SQL数据库中会视为字符中的一个单引号字符,譬如:
strSQL = "SELECT * FROM users WHERE name = '" + userName + "';"
传入字符串:
userName = " 1' OR 1=1 "
把userName做字符替换后变成:
userName = " 1'' OR 1=1"
最后生成的SQL查询语句为:
strSQL = "SELECT * FROM users WHERE name = '1'' OR 1=1'
这样数据库就会去系统查找name为“1′ ‘ OR 1=1”的记录,而避免了SQL注入。
比起凌乱的字符串追加似的查询,PreparedStatement查询可读性更好、更安全。
- 浏览: 51172 次
- 性别:
- 来自: 北京
最新评论
-
xxyztwz:
如果你勇于挑起别人不愿承担的责任如果你勇于在黑暗中孤立无援的探 ...
软件工程师的成长之路 -
tanzhen-1988:
list本身就是store数据的一个引用,list的操作就是对 ...
ThreadLocal的疑问 -
smallbee:
list不是从store拿出来的么 搞笑
ThreadLocal的疑问 -
朝风一旭:
你直接操作的就是list对象啊
list放在store里面当然 ...
ThreadLocal的疑问 -
lvwenwen:
tanzhen-1988 写道我和我女朋友的感情很好,大学谈了 ...
一个刚工作的程序员的苦逼生活
相关推荐
sql注入式攻击与防范秘籍
SQL注入式攻击的主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。二是一种...
ASP.NET下如何防范SQL注入式攻击
C#防止SQL注入式攻击C#防止SQL注入式攻击
ASP.NET中如何防范SQL注入式攻击 一、什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的...
防止SQL注入式攻击例程序,可以参考学习使用。。。。。。。。。。。
SQL注入式攻击下的数据库安全——SQL Server下SQL注入攻击的有效防范.pdf
SQL注入式攻击的分析与防范 学术论文 有深度
PHP中全面阻止SQL注入式攻击 出于无赖,我也是办法了,要搞点分用啦!
学会检查SQL注入式攻击漏洞 .php
SQLInner防止SQL注入式攻击源代码。
防sql注入式攻击SQLInjection
SQL注入式攻击 SQL 攻击 网络安全 安全防护等sql的知识
一、什么是SQL注入式攻击? SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,...
SQL 注入式攻击是指利用软件设计上的漏洞,在目标服务器上运行 SQL 命令以进行其他方式的攻击,动态生成 SQL 命令时没有对用户输入的数据进行验证,本实例为了使程序更加安全,使用 C#实现防止 SQL 注入式攻击功能。...
C#写的防止SQL注入式攻击的软件 可以作为课程设计
C#联合数据库编写的防止SQL注入式攻击视频教程。
歼灭SQL注入式攻击.pdf
SQL注入式攻击分析.pdf