Java业务开发常见错误100例
朱晔
贝壳金服资深架构师
立即订阅
6997 人已学习
课程目录
已完结 42 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 业务代码真的会有这么多坑?
免费
代码篇 (20讲)
01 | 使用了并发工具类库,线程安全就高枕无忧了吗?
02 | 代码加锁:不要让“锁”事成为烦心事
03 | 线程池:业务代码最常用也最容易犯错的组件
04 | 连接池:别让连接池帮了倒忙
05 | HTTP调用:你考虑到超时、重试、并发了吗?
06 | 20%的业务代码的Spring声明式事务,可能都没处理正确
07 | 数据库索引:索引并不是万能药
08 | 判等问题:程序里如何确定你就是你?
09 | 数值计算:注意精度、舍入和溢出问题
10 | 集合类:坑满地的List列表操作
11 | 空值处理:分不清楚的null和恼人的空指针
12 | 异常处理:别让自己在出问题的时候变为瞎子
13 | 日志:日志记录真没你想象的那么简单
14 | 文件IO:实现高效正确的文件读写并非易事
15 | 序列化:一来一回你还是原来的你吗?
16 | 用好Java 8的日期时间类,少踩一些“老三样”的坑
17 | 别以为“自动挡”就不可能出现OOM
18 | 当反射、注解和泛型遇到OOP时,会有哪些坑?
19 | Spring框架:IoC和AOP是扩展的核心
20 | Spring框架:框架帮我们做了很多工作也带来了复杂度
设计篇 (6讲)
21 | 代码重复:搞定代码重复的三个绝招
22 | 接口设计:系统间对话的语言,一定要统一
23 | 缓存设计:缓存可以锦上添花也可以落井下石
24 | 业务代码写完,就意味着生产就绪了?
25 | 异步处理好用,但非常容易用错
26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?
安全篇 (4讲)
27 | 数据源头:任何客户端的东西都不可信任
28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重
29 | 数据和代码:数据就是数据,代码就是代码
30 | 如何正确保存和传输敏感数据?
不定期加餐 (6讲)
加餐1 | 带你吃透课程中Java 8的那些重要知识点(一)
加餐2 | 带你吃透课程中Java 8的那些重要知识点(二)
加餐3 | 定位应用问题,排错套路很重要
加餐4 | 分析定位Java问题,一定要用好这些工具(一)
加餐5 | 分析定位Java问题,一定要用好这些工具(二)
加餐6 | 这15年来,我是如何在工作中学习技术和英语的?
结束语 (3讲)
结束语 | 写代码时,如何才能尽量避免踩坑?
结课测试 | 关于Java业务开发的100个常见错误,你都明白其中缘由了吗?
结课问卷获奖用户名单
答疑篇 (2讲)
答疑篇:代码篇思考题集锦(一)
答疑篇:代码篇思考题集锦(二)
Java业务开发常见错误100例
15
15
1.0x
00:00/00:00
登录|注册

29 | 数据和代码:数据就是数据,代码就是代码

朱晔 2020-05-23
你好,我是朱晔。今天,我来和你聊聊数据和代码的问题。
正如这一讲标题“数据就是数据,代码就是代码”所说,Web 安全方面的很多漏洞,都是源自把数据当成了代码来执行,也就是注入类问题,比如:
客户端提供给服务端的查询值,是一个数据,会成为 SQL 查询的一部分。黑客通过修改这个值注入一些 SQL,来达到在服务端运行 SQL 的目的,相当于把查询条件的数据变为了查询代码。这种攻击方式,叫做 SQL 注入。
对于规则引擎,我们可能会用动态语言做一些计算,和 SQL 注入一样外部传入的数据只能当做数据使用,如果被黑客利用传入了代码,那么代码可能就会被动态执行。这种攻击方式,叫做代码注入。
对于用户注册、留言评论等功能,服务端会从客户端收集一些信息,本来用户名、邮箱这类信息是纯文本信息,但是黑客把信息替换为了 JavaScript 代码。那么,这些信息在页面呈现时,可能就相当于执行了 JavaScript 代码。甚至是,服务端可能把这样的代码,当作普通信息保存到了数据库。黑客通过构建 JavaScript 代码来实现修改页面呈现、盗取信息,甚至蠕虫攻击的方式,叫做 XSS(跨站脚本)攻击。
今天,我们就通过案例来看一下这三个问题,并了解下应对方式。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java业务开发常见错误100例》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(2)

  • Summer 空城
    老师,您好,请教一个问题,微服务中一个模块跟多个模块rpc交互的时候,参数比较多的情况下是把其他模块的pojo复制过来,还是提供一个jar存放多个模块交互的pojo,供多个模块引用么?这两种方式感觉都不太好,老师您遇到这种问题是怎样处理的呢,麻烦老师指点下,谢谢老师o(^o^)o

    作者回复: 一般而言,不会使用你提到的两种方式

    把其他模块的pojo复制过来,复制粘贴显然不是推荐的方式;提供一个jar存放多个模块交互的pojo,不建议把多个模块交互的pojo混在一个jar中。

    一般有2种做法:

    1、如果技术栈统一,那么可以把微服务拆为API + 实现两个jar(模块),前者包含接口 + POJO,后者的服务类实现前者中的接口,服务的开发者把前者打包为API包提供给使用者即可,比如Spring Cloud的Feign可以接口可以共享出去为微服务API包加入私服

    2、如果技术栈不统一,比如不是所有的使用者都使用Spring Cloud,那么或许提供API包不是最好的方式,这个时候可以升级为提供SDK,SDK内部既包含API定义也包含Client调用Server的实现(比如通过HttpClient来),这样微服务使用者不用局限于使用微服务服务端相同的协议

    2020-05-23
    2
  • 13963865700
    对于xss攻击防范,ESAPI的建议是在前端根据变量所处的位置(html、js)采用不同的编码方式进行转义,前端的开发成本较高;文中提到的方式是在后端采用过滤器统一转义存储,可以一劳永逸。老师在实际生产项目中采用的是哪种方式,转义存储对输入内容进行了修改,会不会产生什么副作用?

    作者回复: 要从业务角度看输入的内容是不是没有可能有脚本或特殊符号,如果是这样的话转义没有什么问题的,实际项目中就是采用文中说的所有方式组合起来

    2020-05-23
收起评论
2
返回
顶部