你了解Java应用开发中的注入攻击吗?

你了解Java应用开发中的注入攻击吗?

安全是软件开发领域永远的主题之一,随着新技术浪潮的兴起,安全的重要性愈发凸显出来,对于金融等行业,甚至可以说安全是企业的生命线。不论是移动设备、普通PC、小型机,还是大规模分布式系统,以及各种主流操作系统,Java作为软件开发的基础平台之一,可以说是无处不在,自然也就成为安全攻击的首要目标之一

今天我要问你的问题是,你了解Java应用开发中的注入攻击吗?

典型回答

  • 注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果

  • 下面是几种主要的注入式攻击途径,原则上提供动态执行能力的语言特性,都需要提防发生注入攻击的可能

  • 首先,就是最常见的SQL注入攻击。一个典型的场景就是Web系统的用户登录功能,根据用户输入的用户名和密码,我们需要去后端数据库核实信息

  • 假设应用逻辑是,后端程序利用界面输入动态生成类似下面的SQL,然后让JDBC执行

  • Select * from use_info where username = “input_usr_name” and password = “input_pwd”
    
  • 但是,如果我输入的input_pwd是类似下面的文本,

  • or “”=
  • 那么,拼接出的SQL字符串就变成了下面的条件,OR的存在导致输入什么名字都是复合条件的

  • Select * from use_info where username = “input_usr_name” and password = “” or “” = “”
    
  • 这里只是举个简单的例子,它是利用了期望输入和可能输入之间的偏差。上面例子中,期望用户输入一个数值,但实际输入的则是SQL语句片段。类似场景可以利用注入的不同SQL语句,进行各种不同目的的攻击,甚至还可以加上“;delete xxx”之类语句,如果数据库权限控制不合理,攻击效果就可能是灾难性的

  • 第二,操作系统命令注入。Java语言提供了类似Runtime.exec(…)的API,可以用来执行特定命令,假设我们构建了一个应用,以输入文本作为参数,执行下面的命令:

  • ls –la input_fle_name
    
  • 但是如果用户输入是 “input_fle_name;rm –rf /*”,这就有可能出现问题了。当然,这只是个举例,Java标准类库本身进行了非常多的改进,所以类似这种编程错误,未必可以真的完成攻击,但其反映的一类场景是真实存在的

  • 第三,XML注入攻击。Java核心类库提供了全面的XML处理、转换等各种API,而XML自身是可以包含动态内容的,例如XPATH,如果使用不当,可能导致访问恶意内容。还有类似LDAP等允许动态内容的协议,都是可能利用特定命令,构造注入式攻击的,包括XSS(Cross-site Scripting)攻击,虽然并不和Java直接相关,但也可能在JSP等动态页面中发生

考点分析

  • 今天的问题是安全领域的入门题目,我简单介绍了最常见的几种注入场景作为示例。安全本身是个非常大的主题,在面试中,面试官可能会考察安全问题,但如果不是特定安全专家岗位,了解基础的安全实践就可以满足要求了
  • Java工程师未必都要成为安全专家,但了解基础的安全领域常识,有利于发现和规避日常开发中的风险。今天我会侧重和Java开发相关的安全内容,希望可以起到一个抛砖引玉的作 用,让你对Java开发安全领域有个整体印象
  • 谈到Java应用安全,主要涉及哪些安全机制?
  • 到底什么是安全漏洞?
  • 对于前面提到的SQL注入等典型攻击,我们在开发中怎么避免?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值