对jdk,jvm,java应用程序的攻击多种多样?那么从java程序员的角度,如何写出安全的代码呢?

我是李福春,我在准备面试,今天的题目是:如何写出安全的java代码?

答:这个需要从功能设计到实现细节综合考虑,所谓的不安全,是攻击者利用jdk,jvm,java应用程序的瑕疵,或者是架构设计的缺陷进行攻击。

以dos攻击作为例子,分析一下如何写出安全的java代码。

dos攻击是攻击者利用大量的机器发送请求,把目标java应用的的带宽或者其它资源(cpu,内存,磁盘)耗尽,导致正常用户无法正常访问。攻击方式举例如下:

1,早期的jdk版本,利用可以设置线程的优先级,攻击者让大量线程做一些消耗资源的事情,这个可以通过升级jdk版本解决。

2,一些网站的cpu密集型接口没有限制用户的使用,攻击者滥用这些接口,耗尽cpu资源;解决方法:限制用户使用cpu密集型的接口频率或者时间。

3,文件上传没有限制,攻击者会耗尽系统的内存和外存;解决方法:限制用户的文件上传次数和频率

4,其它资源的消耗,比如文件描述符,数据库连接,再入锁没有及时释放,解决办法:显示释放资源,try-finally;

安全代码

在开发阶段指定安全代码的规范,可以参考ali的java规范手册。下面举几个例子说明一下安全问题的出现场景。

防止数值类型溢出

// a, b, c都是int类型的数值
if (a + b < c) {
// …
}

改进

if (a < c – b)

避免暴露敏感信息

try {
// 业务代码
} catch (Exception e) {
throw new RuntimeException(hostname + port + “ doesn’t response”);

改进:不输出敏感信息到异常中;

序列化

序列化一般出现在系统之间信息交换的场景,主要避免敏感数据的泄露。

1,发送出去的时候,对敏感字段增加transiant字段保护起来,防止被序列化;

2,接受信息的时候,在readObject方法中药实现相同的安全和数据检查;

开发完成之后,可以使用相关的插件进行代码扫描,比如findbugs,第一时间发现可能的安全漏洞,修复不安全的代码段。

也可以结合团队安全部门的规范和工具放代码质量扫描系统,比如sonar;

部署java程序之后,要针对使用的jdk版本,及时的更新jdk的版本,升级版本自动的修复了很多针对java的漏洞;

小结

本篇回答了java的攻击产生的主要原因,然后以dos攻击威力,列举了几种攻击的情况。

结合软件研发的生命周期,在不同的阶段给出了一些写出安全java代码保证java应用安全的工具和建议。

原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

面试刷题28:如何写出安全的java代码?的更多相关文章

  1. 【原创】怎样才能写出优雅的 Java 代码?这篇文章告诉你答案!

    本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 本文比较简短,基本就是推荐一些对于写好代码非常有用的文章或者 ...

  2. 请阐述调用Activity有哪几种方法,并写出相关的Java代码

    请阐述调用Activity有哪几种方法,并写出相关的Java代码. 答案:可以采用两种方式调用Activity:显示调用和隐式调用.显示调用直接指定了Activity,代码如下: Intent int ...

  3. JAVA语言之怎样写出高性能的Java代码?

    本文主要向大家介绍了JAVA语言之怎样写出高性能的 Java 代码?通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我 ...

  4. 如何写出健壮的Java代码

    近来在公司写代码,写出的代码发现BUG很多,为了实现一个功能,代码改了又改,影响了工单的效率,也影响个人绩效,因此从网上找了些关于写健壮代码的文章看了看,再加上自己的一些经验总结. 所谓健壮的代码是指 ...

  5. 如何写出好的Java代码?

    1. 优雅需要付出代价.从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时间.但当它终于能够正确执行并可轻易套用于新案例中,不需要花上数以时计,甚至以天计或以月计的辛苦代价时,你会看得 ...

  6. Java入门者:如何写出美观的Java代码?

    前言 在帮助各位同学远程解决代码问题的时候,发现很多同学的代码都有一个共同问题:代码书写格式不规范.虽然代码书写规范对程序性能及运行并不影响,但影响着别人对你编程习惯或能力的第一印象,同时也会给阅读者 ...

  7. 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽

    推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...

  8. (转)Python新手写出漂亮的爬虫代码2——从json获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...

  9. (转)Python新手写出漂亮的爬虫代码1——从html获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78156605 Python新手写出漂亮的爬虫代码1初到大数据学习圈子的同学可能对爬虫都有 ...

随机推荐

  1. Mybatis-Plus代码生成器使用详解

    首先创建springboot的项目(创建步骤省略) 创建好项目后要配置maven依赖,附上pom.xml: <?xml version="1.0" encoding=&quo ...

  2. SPA那点事

    前端猿一天不学习就没饭吃了,后端猿三天不学习仍旧有白米饭摆于桌前.IT行业的快速发展一直在推动着前端技术栈在不断地更新换代,前端的发展成了互联网时代的一个缩影.而单页面应用的发展给前端猿分了一杯羹. ...

  3. Web前端经典面试试题(二)

    上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...

  4. 一篇文章彻底说清JS的深拷贝/浅拷贝

    一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...

  5. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨

    5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...

  6. qt creator源码全方面分析(3-3)

    目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...

  7. nohub 将程序永久运行下去

    今天看了一遍文章,一直以为将程序制成sh脚本,通过crontab来间隔执行以为是真的不断执行,后来才发现是错误的,每隔一段时间都会执行一次,都会占用一个进程,难怪一看进程几十来个同样名字的进程在运行 ...

  8. Flask HTTP请求与响应

    设置请求 POST GET 设置post和get,在route中设置methods参数,除了post,get,还有put ,delete 等 @app.route('/http_test', meth ...

  9. 简述树,Trie,Avl,红黑树

    树的表示方法 在平时工作中通常有2种方式来表示树状结构,分别是孩子链表示法和父节点表示法.光说名词可能无法让人联系到实际场景中,但是写出代码之后大家一定就明白了. 孩子链表示法,即将树中的每个结点的孩 ...

  10. Android 版的多合一Office应用也正式向iOS开放了

    导读 在 Android 版的多合一 Office 应用「偷跑」不久后(官方证实上线时间比计划要早),为 iOS 准备的版本现在终于也结束 beta 测试正式上线了. 和只提供「有限」平板支持的 An ...