第31讲 | 你了解Java应用开发中的注入攻击吗?
杨晓峰
该思维导图由 AI 生成,仅供参考
安全是软件开发领域永远的主题之一,随着新技术浪潮的兴起,安全的重要性愈发凸显出来,对于金融等行业,甚至可以说安全是企业的生命线。不论是移动设备、普通 PC、小型机,还是大规模分布式系统,以及各种主流操作系统,Java 作为软件开发的基础平台之一,可以说是无处不在,自然也就成为安全攻击的首要目标之一。
今天我要问你的问题是,你了解 Java 应用开发中的注入攻击吗?
典型回答
注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。
下面是几种主要的注入式攻击途径,原则上提供动态执行能力的语言特性,都需要提防发生注入攻击的可能。
首先,就是最常见的 SQL 注入攻击。一个典型的场景就是 Web 系统的用户登录功能,根据用户输入的用户名和密码,我们需要去后端数据库核实信息。
假设应用逻辑是,后端程序利用界面输入动态生成类似下面的 SQL,然后让 JDBC 执行。
但是,如果我输入的 input_pwd 是类似下面的文本,
那么,拼接出的 SQL 字符串就变成了下面的条件,OR 的存在导致输入什么名字都是复合条件的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Java应用开发中的安全威胁及防范措施 Java应用开发中的安全威胁是一项重要的议题。本文介绍了Java应用开发中常见的注入攻击,包括SQL注入、操作系统命令注入和XML注入等典型攻击方式,并强调了安全意识的重要性。文章还探讨了Java的安全基础,包括运行时安全机制、安全框架API和JDK集成的安全工具。此外,还提到了安全漏洞的表现形式和防范措施,例如针对SQL注入的防范方法。总的来说,本文通过具体案例和问题引导,为读者提供了Java应用开发中的安全基础知识,帮助他们建立对安全领域的整体印象。 文章还提到了一些思考题,如Man-In-The-Middle(MITM)攻击及其常见表现形式和防范方法,为读者提供了进一步思考和学习的机会。此外,还介绍了作者将进行的直播分享活动,为读者提供了参与交流的机会。 总的来说,本文内容丰富,涵盖了Java应用开发中的安全威胁及防范措施,对读者快速了解文章概览具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》,新⼈⾸单¥59
《Java 核心技术面试精讲》,新⼈⾸单¥59
立即购买
登录 后留言
全部留言(21)
- 最新
- 精选
- 羊羊羊也不是很懂,根据自己的理解讲一下,部分可能是错误的。中间人攻击原理大概是用户在正常上网的时候,同网段的恶意用户对其进行欺骗。恶意用户向局域网广播:我是路由器,然后正常用户(电脑无防御)收到以后认为恶意用户就是路由器,然后向恶意用户发送数据包,恶意用户可以截获数据包,再向路由器发送正常用户的数据包,路由器将返回的数据包在给恶意用户,恶意用户在给正常用户,恶意用户就形成了中间人的效果,可以向返回的数据包注入html代码,达到劫持用户网站的效果,不过现在大部分的网站都是https且双向认证,比较难获取到用户发送数据包中的账号密码。
作者回复: 不错,如果从Java API的角度看,也存在很多可能,即使是https,在连接没完整建立前,最初的通信并不是安全的,例如,过程中发生proxy authentication之类,其实还是http
2018-07-1719 - 苦行僧每次使用开源组件,经常关注使用版本修复的问题列表,其中的安全修复值得重点关注
作者回复: 安全是永远不能忽视的主题
2019-02-0812 - 鸡肉饭饭杨老师,您好,被一个安全问题困扰许久。就是开发者是否能够通过一定的手段修改jdk中的String类,并将修改后的String类进行替换,对于这个问题,应当从哪里开始寻找答案?谢谢
作者回复: 你是说,类似自己build一个jdk吗?但即使改写里面的方法也未必生效,因为有的方法是用的intrinsic的内部实现
2018-07-1738 - 王建中间人攻击最容易理解的可能就是fiddler吧,他可以截获request重新组织request的数据,有个专业的攻击工具叫burp。2018-07-1811
- 随心而至PreparedStatement又是如何防范sql注入的呢? preparedStatement = "SELECT * FROM users WHERE name = ?"; preparedStatement.setString(1, userName); 查询“ SELECT * FROM users where where name =?” 将被发送到数据库,数据库会对其进行编译,然后将替换setString中的userName。 如果数据库看到非法值,它将引发错误。 因此,'or'1'='1将被视为一个完整的字符串,而不是包含运算符or和=的语句, 也就是数据库将其视为值为 "' or '1'='1"的字符(虽然是个奇怪的字符串)。 总结就一句话,占位符只能存储给定类型的值,而不能存储任意SQL片段(你写片段,我也把你看成是整体,即该类型的特别输入,比如上面的"' or '1'='1"就被看成是一个特别的String) https://stackoverflow.com/questions/4333015/does-the-preparedstatement-avoid-sql-injection https://en.wikipedia.org/wiki/SQL_injection2021-01-0610
- 爪哇夜未眠期待杨晓峰老师直播!2018-07-1710
- 会网络的老鼠或者通过明文传输、存储,这些都存在暴露安全隐患的可能。 朗读者将 明文 读成 文明 难道只有我注意到么?2018-11-064
- weiString你懂双亲委派就知道,自己定义String是用不了的。2019-05-083
- 咖啡猫口里的咖啡猫🐱我来回答,,鸡肉饭饭的,,,数据存在immutable,mutable,两种,java没有原生immutable支持,string如果是new就是相对意义的immutable,java基本类型和string是有高效缓存池范围,OK?2018-07-172
- 亚林中间人攻击,现在https如果被中间人代理了,一般程序要检查https证书是否合法,Android就是在本地保存一份合法https证书去检查线上https是否合法,缺点就是每次https证书到期之前要升级一次客户端,还有就是抓包调试的时候需要去掉https证书检查,才能正常运行抓包。2020-06-081
收起评论