Java核心技术面试精讲
杨晓峰
前Oracle首席工程师
立即订阅
43250 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 以面试题为切入点,有效提升你的Java内功
免费
模块一 Java基础 (14讲)
第1讲 | 谈谈你对Java平台的理解?
第2讲 | Exception和Error有什么区别?
第3讲 | 谈谈final、finally、 finalize有什么不同?
第4讲 | 强引用、软引用、弱引用、幻象引用有什么区别?
第5讲 | String、StringBuffer、StringBuilder有什么区别?
第6讲 | 动态代理是基于什么原理?
第7讲 | int和Integer有什么区别?
第8讲 | 对比Vector、ArrayList、LinkedList有何区别?
第9讲 | 对比Hashtable、HashMap、TreeMap有什么不同?
第10讲 | 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?
第11讲 | Java提供了哪些IO方式? NIO如何实现多路复用?
第12讲 | Java有几种文件拷贝方式?哪一种最高效?
第13讲 | 谈谈接口和抽象类有什么区别?
第14讲 | 谈谈你知道的设计模式?
模块二 Java进阶 (16讲)
第15讲 | synchronized和ReentrantLock有什么区别呢?
第16讲 | synchronized底层如何实现?什么是锁的升级、降级?
第17讲 | 一个线程两次调用start()方法会出现什么情况?
第18讲 | 什么情况下Java程序会产生死锁?如何定位、修复?
第19讲 | Java并发包提供了哪些并发工具类?
第20讲 | 并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?
第21讲 | Java并发类库提供的线程池有哪几种? 分别有什么特点?
第22讲 | AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?
第23讲 | 请介绍类加载过程,什么是双亲委派模型?
第24讲 | 有哪些方法可以在运行时动态生成一个Java类?
第25讲 | 谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?
第26讲 | 如何监控和诊断JVM堆内和堆外内存使用?
第27讲 | Java常见的垃圾收集器有哪些?
第28讲 | 谈谈你的GC调优思路?
第29讲 | Java内存模型中的happen-before是什么?
第30讲 | Java程序运行在Docker等容器环境有哪些新问题?
模块三 Java安全基础 (2讲)
第31讲 | 你了解Java应用开发中的注入攻击吗?
第32讲 | 如何写出安全的Java代码?
模块四 Java性能基础 (3讲)
第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?
第34讲 | 有人说“Lambda能让Java程序慢30倍”,你怎么看?
第35讲 | JVM优化Java代码时都做了什么?
模块5 Java应用开发扩展 (4讲)
第36讲 | 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
第37讲 | 谈谈Spring Bean的生命周期和作用域?
第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?
第39讲 | 谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
周末福利 (2讲)
周末福利 | 谈谈我对Java学习和面试的看法
周末福利 | 一份Java工程师必读书单
结束语 (1讲)
结束语 | 技术没有终点
Java核心技术面试精讲
登录|注册

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

杨晓峰 2018-07-17
安全是软件开发领域永远的主题之一,随着新技术浪潮的兴起,安全的重要性愈发凸显出来,对于金融等行业,甚至可以说安全是企业的生命线。不论是移动设备、普通 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 的存在导致输入什么名字都是复合条件的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java核心技术面试精讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • 爪哇夜未眠
    期待杨晓峰老师直播!
    2018-07-17
    7
  • 王建
    中间人攻击最容易理解的可能就是fiddler吧,他可以截获request重新组织request的数据,有个专业的攻击工具叫burp。
    2018-07-18
    5
  • 苦行僧
    每次使用开源组件,经常关注使用版本修复的问题列表,其中的安全修复值得重点关注

    作者回复: 安全是永远不能忽视的主题

    2019-02-08
    4
  • 羊羊羊
    也不是很懂,根据自己的理解讲一下,部分可能是错误的。中间人攻击原理大概是用户在正常上网的时候,同网段的恶意用户对其进行欺骗。恶意用户向局域网广播:我是路由器,然后正常用户(电脑无防御)收到以后认为恶意用户就是路由器,然后向恶意用户发送数据包,恶意用户可以截获数据包,再向路由器发送正常用户的数据包,路由器将返回的数据包在给恶意用户,恶意用户在给正常用户,恶意用户就形成了中间人的效果,可以向返回的数据包注入html代码,达到劫持用户网站的效果,不过现在大部分的网站都是https且双向认证,比较难获取到用户发送数据包中的账号密码。

    作者回复: 不错,如果从Java API的角度看,也存在很多可能,即使是https,在连接没完整建立前,最初的通信并不是安全的,例如,过程中发生proxy authentication之类,其实还是http

    2018-07-17
    4
  • 咖啡猫口里的咖啡猫🐱
    我来回答,,鸡肉饭饭的,,,数据存在immutable,mutable,两种,java没有原生immutable支持,string如果是new就是相对意义的immutable,java基本类型和string是有高效缓存池范围,OK?
    2018-07-17
    2
  • 鸡肉饭饭
    杨老师,您好,被一个安全问题困扰许久。就是开发者是否能够通过一定的手段修改jdk中的String类,并将修改后的String类进行替换,对于这个问题,应当从哪里开始寻找答案?谢谢

    作者回复: 你是说,类似自己build一个jdk吗?但即使改写里面的方法也未必生效,因为有的方法是用的intrinsic的内部实现

    2018-07-17
    1
    2
  • wei
    String你懂双亲委派就知道,自己定义String是用不了的。
    2019-05-08
    1
  • 会网络的老鼠
    或者通过明文传输、存储,这些都存在暴露安全隐患的可能。
    朗读者将 明文 读成 文明
    难道只有我注意到么?
    2018-11-06
    1
  • William
    类加载器本身也可以对代码之间进行隔离,例如,应用无法获取启动类加载器(Bootstrap Class-Loader)对象实例,不同的类加载器也可以起到容器的作用,隔离模块之间不必要的可见性等。

    所以上面这段话没理解, 启动器加载器不是顶级父类加载器么? 按照“双亲委派机制”不是从父加载器看是否能够加载对象么? 怎么还无法回去对象实例了呢?
    2019-12-02
  • Victory
    这一讲看的完了,昨天面试的时候有问道注入攻击
    2019-08-24
  • 我奋斗去了
    终于可以见到杨老师真人了 😄
    2018-07-18
  • 王宁
    纠结String的同学可以试一下,String应该是加载不了的。
    2018-07-17
收起评论
12
返回
顶部