`
guohui_fz
  • 浏览: 56272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL注入攻击及其防范浅谈

阅读更多

SQL注入攻击
SQL注入攻击的基本原理,是从客户端合法接口提交特殊的非法代码,让其注入到服务器端执行业务的SQL中去,进而改变SQL语句的原有逻辑和影响服务器端正常业务的处理。
SQL注入攻击是Web应用中一个重要的安全问题,虽然Java具备较高的安全性,但如果开发人员不注意,也有可能留下安全隐患,请看示例:

执行验证的SQL语句
现有一个Login页面用来控制WebApp的入口,用户想要进入只有输入“用户名”和“密码”,负责用户登录处理的Servlet接受到请求后,将看数据表usertable中是否存在这个用户名和密码,如果存在则让其进入,否则拒绝,进行验证的SQL语句如下:

select   count ( * from  usertable  where  name = ' 用户名 '   and  pswd = ' 密码‘

执行完这条SQL语句后,如果记录数等于零说明在usertable表找不到用户名和密码对应的记录,应该拒绝;如果记录数大于零则说明能在usertable表中找到对应的记录,应予放行。

如果用户进行SQL注入则可使验证无效

如果用户通过某种途径知道或是猜测出了验证SQL语句的逻辑,他就有可能在表单中输入特殊字符改变SQL原有的逻辑,比如在名称文本框中输入“ ‘ or ’1‘=’1‘ or ’1‘=’1 ”或是在密码文本框中输入“ 1‘ or ’1‘=’1 ”,SQL语句将会变成:

1 select   count ( * from  usertable  where  name = ''   or   ' 1 ' = ' 1 '   or   ' 1 ' = ' '   and  pswd = ''  
2 select   count ( * from  usertable  where  name = ''   and  pswd = ' 1 '   or   ' 1 ' = ' 1 '  

明显,or和单引号的加入使得where后的条件始终是true原有的验证完全无效了。

使用正则表达式屏蔽特殊字符

使用SQL注入攻击多在特殊字符上下手脚,如“’”,“*”,“/” ,”--”等,如果用正则表达式限制特殊字符输入,这些手段将没有效果。下面的代码将阻止含有特殊字符的请求。

if (Pattern.matches( " \\w+ " , name) == false   ||  Pattern.matches( " \\w+ " , pswd) == false  ) {
  
//  返回login界面
  request.setAttribute( " feedbackMsg " " 用户名和密码不允许包括特殊字符 " );
  RequestDispatcher dispatcher 
=  request.getRequestDispatcher( " /web/page/login1.jsp?curr=0 " );
  dispatcher.forward(request, response);
  
return ;
}

使用PreparedStatement代替Statement

SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement执行SQL语句,其后只是输入参数, SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 。示例代码如下:

Connection conn = null ;
PreparedStatement ps
= null
ResultSet rs
= null ;

String sql
= "  select count(*) from usertable where name=? and pswd=?  " ;
ps
= conn.prepareStatement(sql);
ps.setString(
1 , name);
ps.setString(
2 , pswd);

PreparedStatement的错误使用

用PreparedStatement来防范SQL注入攻击是因为“因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构”,如果如下使用则起不到这个效果,因为SQL语句和参数没有分开,它们被组合在一起被一次性提交了。

Connection conn = null ;
PreparedStatement ps
= null
ResultSet rs
= null ;

。。。。
conn
= DBUtil.getConnection(); 
sql
= "  select count(*) from usertable where name=' " + name + " ' and pswd=' " + pswd + " " ;
ps
= conn.prepareStatement(sql);   
rs
= ps.executeQuery();

这种情况下要防范SQL注入攻击还是要借助于正则表达式

小结

1.Web系统通常采用数据库作为数据源,而大多数业务处理都离不开SQL语句,因此系统潜在就有被SQL注入攻击的隐患,攻击可能会从任何一次URL提交或是FORM提交中发起。
2.使用PreparedStatement执行Sql语句比Statement安全得多,如果能使用PreparedStatement就不该用Statement,当然SQL主体和参数应该分开。
3.如果因为要执行动态多变的SQL语句而不得已采用Statement,则应该在服务器端用正则表达式进行输入验证。
4.客户端验证可能被取消,因此服务器端验证必不可少。

分享到:
评论

相关推荐

    浅谈SQL注入攻击与防范.pdf

    需要注意的是,防范SQL注入攻击不仅需要在技术层面采取措施,还需要在管理和教育层面有所作为。对于开发者来说,需要加强安全知识的学习和实践,提高安全意识;对于网站管理员来说,需要定期检查系统日志,及时发现...

    浅谈网站SQL注入攻击防护.pdf

    为了防范SQL注入攻击,需要从多个方面进行考虑。首先,应改变数据库查询的方式,将动态查询改为参数化查询。参数化查询通过使用参数代替直接在查询中嵌入值,使得即使参数中包含非法SQL语句,数据库服务器也不会将其...

    浅谈SQL注入漏洞的检测与防范.pdf

    在探讨SQL注入漏洞的检测与防范方面,本文深入地分析了SQL注入的成因、检测方法以及有效的防范措施。首先,SQL注入是随着Web应用的普及而日益成为一个严重的安全问题。SQL注入漏洞之所以成为企业业务系统中的高危...

    浅谈SQL注入(...)

    防范SQL注入的策略包括: 1. 使用参数化查询(预编译语句)或存储过程,避免直接拼接SQL字符串。 2. 对用户输入进行严格的过滤和验证,拒绝非法字符。 3. 限制数据库权限,确保应用程序只能访问必要的数据。 4. 使用...

    浅谈开启magic_quote_gpc后的sql注入攻击与防范

    通过启用php.ini配置文件中... 开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能。... 虽然如此,攻击者仍然有机会进行SQL注入攻击。。。。。。前提是,当参数为数字型的时候,且未经过Int

    浅谈网站注入式攻击以及应对措施.pdf

    SQL注入攻击的基本原理是在数据库查询语句中嵌入恶意的SQL片段,这些恶意代码在数据库执行时会按照攻击者的意图进行操作。攻击者通常通过在网站的输入字段中输入特殊的SQL代码片段,利用应用程序对用户输入处理不当...

    浅谈Web应用的网络安全.pdf

    浅谈Web应用的网络安全.pdf 本文对Web应用的网络安全进行了详细的讨论,从Web技术的发展、管理到安全方面都进行了阐述。文章首先介绍了Web技术在商业活动上的使用和普及,然后提到了Web应用系统的漏洞问题,接着...

    浅谈常见应用安全漏洞原理及防范

    注入是一种常见的安全漏洞,其中SQL注入最为人所熟知。攻击者通过在应用程序的输入字段中插入恶意SQL代码来操纵数据库,以此来读取、修改或删除敏感信息。例如,在登录表单中,如果应用程序没有对用户的输入进行足够...

    Web的安全防御浅谈

    ### Web的安全防御浅谈 随着互联网的飞速发展,Web应用已经成为企业和个人不可或缺的一部分,但同时也面临着各种安全威胁。为了确保Web应用的安全性,开发者必须从设计之初就将安全因素考虑进去。本文将从几个关键...

    浅谈web漏洞挖掘—特殊变量fuzz1

    ### 浅谈Web漏洞挖掘——特殊变量Fuzz1 #### 一、背景介绍与方法论 随着互联网技术的发展,Web应用程序已经成为黑客攻击的重点目标之一。Web应用的安全问题日益凸显,尤其是那些潜在的安全漏洞,如果不加以重视,...

    浅谈在WEBSHELL下如何运行命令.pdf

    其中提到的主要安全威胁包括SQL注入、XSS跨站脚本攻击、上传漏洞、弱口令和目录遍历等。由于这些漏洞的存在,黑客通常通过WEB应用作为突破口,获取WEBSHELL以进行进一步的攻击或权限提升。 0×01 ASP环境下运行命令...

    #浅谈云计算的网络安全威胁与应对策略.pdf

    网络安全威胁在云计算环境中尤为突出,如拒绝服务攻击、中间人攻击、网络嗅探、端口扫描、SQL注入和跨站脚本攻击等。这些攻击可能导致服务中断、数据泄露或系统瘫痪。此外,云计算还面临XML签名包装、浏览器安全、云...

    浅谈油气生产企业网络安全体系研究与建设.pdf

    同时,油气生产企业的网络技术体系架构需要针对攻击手段的变化,采取相应的技术手段,例如DDOS攻击防御、勒索病毒防御、木马防护、SQL注入防护、钓鱼邮件防护等。 最后,安全管理责任制的建设对于整个网络安全体系...

    「安全开发」浅谈企业安全防护体系中的渗透预警与追溯分析 - 数据治理.zip

    在Web安全领域,企业需关注应用程序层面的漏洞,如SQL注入、跨站脚本等。Rust作为一种系统级编程语言,以其内存安全特性,正在逐渐被应用于构建更安全的Web服务。使用Rust可以减少因内存错误导致的安全问题,提升...

    移动安全 - 安全技术资料汇总(共2份).zip

    1. **WEB应用防火墙(WAF)**:在服务器端部署,用于过滤HTTP/HTTPS流量,防止Web应用遭受SQL注入、跨站脚本等攻击。 2. **数据分析**:在安全领域中,数据分析可以用来识别异常行为,及时发现潜在的威胁或入侵,...

    第一届网络安全峰会(2019 哈尔滨) - 安全技术资料汇总(共10份).zip

    - **Web安全**:指的是通过一系列技术和策略来保护Web应用程序免受恶意攻击,如SQL注入、跨站脚本攻击等。 - **信息安全**:是指保护信息不被未经授权的访问、使用、泄露、破坏或修改,涵盖物理安全、逻辑安全和人员...

    CodeIgniter删除和设置Cookie的方法

    - **CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析**:分析了URL中特殊字符可能导致的问题,以及如何防范SQL注入攻击。 了解并掌握这些Cookie管理技巧以及相关安全策略,将有助于提升CodeIgniter应用...

Global site tag (gtag.js) - Google Analytics