十年开发经验总结的 Java 程序员架构学习路线

java技术文章

2018-09-15

62

0

一、分布式架构

架构分布式的英文( Distributed computing 分布式计算技术)的应用和工具,成熟目前的技术包括 J2EE,CORBA 和 .NET(DCOM),这些技术牵扯的内容非常广,相关的书籍也非常多。

本文不介绍这些技术的内容,也没有涉及这些技术的细节,只是从各种分布式系统平台产生的背景和在软件开发中应用的情况来探讨它们的主要异同。

分布式系统是一个古老而宽泛的话题,而近几年因为“大数据”概念的兴起,又焕发出了新的青春与活力。

除此之外,分布式系统也是一门理论模型与工程技法。并重的学科内容相比于机器学习这样的研究方向,学习分布式系统的同学往往会感觉:“入门容易,深入难”的确,学习分布式系统几乎不需要太多数学知识。

分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能完全覆盖其所有内容的。

总的来说,分布式系统要做的任务就是把多台机器有机的组合,连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。

如果一定要给近些年的分布式系统研究做一个分类的话,我个人认为大概可以包括三大部分:

  1. 分布式存储系统

  2. 分布式计算系统

  3. 分布式管理系统 

二、微服务

当前微服务很热,大家都号称在使用微服务架构,但究竟什么是微服务架构?微服务架构是不是发展趋势?对于这些问题,我们都缺乏清楚的认识。

为解决单体架构下的各种问题,微服务架构应运而生。与其构建一个臃肿庞大,难以驯服的怪兽,还不如及早将服务拆分。微服务的核心思想便是服务拆分与解耦,降低复杂性。

微服务强调将功能合理拆解,尽可能保证每个服务的功能单一,按照单一责任原则(Single Responsibility Principle)明确角色。将各个服务做轻,从而做到灵活,可复用,亦可根据各个服务自身资源需求,单独布署,单独作横向扩展。

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的

类上应用很多 SOLID 原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发,管理和迭代在分散的组件中使用云架构和平台式部署,管理和服务功能,使产品交付变得更加简单。

本质:用一些功能比较明确,业务比较精练的服务去解决更大,更实际的问题。

三、源码分析

从字面意义上来讲,源文件的英文指一个文件,指源代码的集合。源代码则是一组具有特定意义的可以实现特定功能的字符(程序开发代码)。

源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂。

源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。

我认为是阅读源码的最核心驱动力我见到绝大多数程序员,对学习的态度,基本上就是这几个层次(很偏激哦):

  1. 只关注项目本身,不懂就百度一下。

  2. 除了做好项目,还会阅读和项目有关的技术书籍,看维基百科。

  3. 除了阅读和项目相关的书外,还会阅读IT行业的书,比如学的Java的时,还会去了解函数语言,如LISP。

  4. 找一些开源项目看看,大量试用第三方框架,还会写写演示。

  5. 阅读基础框架,J2EE 规范,调试服务器内核。

大多数程序都是第1种,到第5种不光需要浓厚的兴趣,还需要勇气:?我能读懂吗其实,你能够读懂的。

耐心,真的很重要。因为你极少看到阅读源码的指导性文章或书籍,也没有人要求或建议你读。

你读的过程中经常会卡住,而一卡主可能就陷进了迷宫这时,你需要做的,可能是暂时中断一下,再从外围看看它:如API结构,框架的设计图。 

四、工具使用

工欲善其事必先利其器,工具对 Java 的的程序员的重要性不言而喻现在有很多库,实用工具和程序任的 Java 的开发人员选择。下图列出的工具都是程序员必不可少的工具 

五、性能优化

不管是应付前端面试还是改进产品体验,性能优化都是躲不开的话题。

优化的目的是让用户有“快”的感受,那如何让用户感受到快呢?

  • 加载速度真的很快,用户打开输入网址按下回车立即看到了页面

  • 加载速度并没有变快,但用户感觉你的网站很快

性能优化取决于多个因素,包括垃圾收集,虚拟机和底层操作系统(OS)设置。有多个工具可供开发人员进行分析和优化时使用,你可以通过阅读爪哇工具的源代码优化和分析来学习和使用它们。

必须要明白的是,没有两个应用程序可以使用相同的优化方式,也没有完美的优化的 Java 应用程序的参考路径。

使用最佳实践并且坚持采用适当的方式处理性能优化。想要达到真正最高的性能优化,你作为一个 Java 的开发人员,需要对 Java 的虚拟机(JVM)和底层操作系统有正确的理解。

性能优化,简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。性能问题永远是永恒的主题之一,而优化则更需要技巧。

六、了解网络攻击方法

攻击目标:

应用HTTP协议的服务器和客户端、以及运行在服务器上的Web应用等。

攻击基础:

HTTP是一种通用的单纯协议机制。在Web应用中,从浏览器那接受到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改,Web应用可能会接收到和服务器完全不相同的、被刻意篡改的内容。

攻击对象:

URL查询字段或表单、HTTP首部、Cookit等。

在HTTP的请求报文内加载攻击代码,就能发起Web应用的攻击,通过URL查询字段或表单、HTTP首部、Cookit等途径把攻击代码传入,若代码存在安全漏洞,则会被攻击者拿到管理权限,然后请求内容被更改或获取。

攻击方式:

主动攻击和被动攻击

 

主动攻击:以服务器为目标的主动攻击

主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击的,因此攻击者需要能够访问到那些资源。

主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击。

 

SQL注入攻击

该攻击主要是针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。

攻击模式:当Web应用对数据库表内的数据进行检索、添加或删除等操作时,会使用SQL语句连接数据库进行相应的操作,所以如果在调用SQL语句的时候存在漏洞的话,将会被恶意注入非法的SQL语句。所以可以在Web的地址栏部分进行相应的攻击处理。如:在URL中,加--,在SQL语句中--表示注释的意思,会将一部分内容注释掉,达到攻击者的攻击目的。

攻击影响:非法查看或篡改数据库内的数据、规避认证、执行和数据库服务器业务关联的程序

 

OS命令注入攻击

该攻击是通过Web应用,执行非法的操作系统命令达到攻击目的,只要在能调用Shell函数的地方就存在被攻击的风险。

攻击模式:从Web应用中通过Shell来调用操作系统命令,如果在Shell调用时存在漏洞,就可以执行攻击者的非法OS命令,也就是说,可以通过OS注入攻击执行OS上安装的各种程序。如发送咨询邮件来注入攻击。

 

被动攻击:以服务器为目标的被动攻击

被动攻击时指利用圈套策略执行攻击代码的攻击模式,在被动攻击的过程中,攻击者不直接对目标Web应用程序发起攻击,一般的攻击手法是设置陷阱让用户去触发,中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。攻击者借助这个攻击代码为基础,可以窃取用户个人信息、篡改滥用用户的信息等。该攻击模式连企业内网都同样会受到攻击。

被动攻击中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造、HTTP首部注入攻击等。

 

跨站脚本攻击

XSS,Cross-Site Scripting,是通过安全漏洞的Web网站注册用户的浏览器内运行非法的HTML代码或者JavaScript进行的一种攻击。

攻击模式:攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

攻击影响:利用虚假输入表单骗取用户个人信息、利用脚本窃取用户的Cookit值,被攻击者在不知情的情况下,帮助攻击者发送恶意请求、显示伪造的文章或图片

XSS是攻击者利用预先设置好的陷阱触发的被动攻击。如:在URL中加入特定的script代码来获取登录者的个人登陆信息、对用户Cookit的窃取攻击(通过Js获取)。

 

跨站点请求伪造

CSRF,是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某种状态更新,属于被动攻击。影响:利用已通过认证的用户权限更新设定信息、利用已通过认证的用户权限购买商品、利用已通过认证的用户权限在留言板上发表言论。等

 

HTTP首部注入攻击

该攻击模式是指攻击者通过响应首部字段被插入换行、添加任意响应首部或主体的一种攻击。属于被动攻击模式。向首部主体添加内容的攻击称为HTTP响应截断攻击。

攻击模式:Web应用有时会将从外部接收到的数值,赋给响应首部字段Location和Set-Cookit。HTTP首部注入通过在某些响应首部字段需要处理输出值的时候,插入换行发动攻击。

攻击影响:设置任何Cookit信息、重定向至任意URL、显示任意的主体(HTTP响应截断攻击)

攻击案例:

1、在URL后添加以%0D%0A(HTTP报文中的换行符),后紧接着攻击者自己编写的首部攻击字段进行信息获取,如Set-Cookit来获取相应Cookit的值。

2、HTTP响应截断攻击:将两个%0D%0A并排插入字符串后发送,利用两个连续的换行就可做出HTTP首部和主体分隔所需的空行类,这样就能显示伪造的主体,达到攻击目的。利用这种攻击方式,已触发陷阱的用户将看到伪造的Web页面,再让用户输入个人信息等,达到跨站脚本攻击相同的效果。

3、缓存污染:滥用HTTP/1.1中汇集多响应返回功能,会导致缓存服务器对任何内容进行缓存操作,使用该缓存服务器的用户,在浏览遭到攻击的网站,会不断地浏览被替换掉的Web网页。

 

其他攻击方式:

邮件首部注入攻击

该攻击模式是指Web应用中的邮件发送功能,攻击者通过对邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件。

攻击案例:攻击者将以下数据作为邮件地址发起请求,然后在后面加上%0D%0A在邮件报文中表示换行符,使用了之后,可以对邮件地址进行追加发送,使用连续两个换行符就有可能篡改邮件文本内容并发送。再以相同的方法,就有可能改写To和Subject等任意邮件首部,向文本添加附件等动作。

 

目录遍历攻击

目录遍历攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。

攻击模式:通过Web应用对文件操作处理时,由外部指定文件名的处理存在漏洞的情况下,用户可用../../etc/passed等相对路径定位到绝对路径上面,因此服务器上任意的文件或文件目录皆有可能被访问到。就可以去非法浏览、篡改或删除Web服务器上的文件。

 

远程文件包含漏洞

该攻击模式是指当部分脚本内容需要从其他文件读取时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取后,就可运行任意脚本的一种攻击。这是PHP存在的主要安全漏洞,对PHP的include或require来说,这个功能是一种可通过设定、指定外部服务器的URL作为文件名的功能,但是由于它十分的危险,所以PHP5.2.0后默认此功能无效。

 

怎样会造成安全漏洞?

因设置或设计上的缺陷引发的安全漏洞

错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞。

1、强制浏览

从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。可能会泄露顾客的个人信息、泄露原本需要具有访问权限的用户才能查阅的信息内容、泄露未外连到外界的文件。比较好的做法是:隐蔽其URL。因为直接显示易推测的文件名或文件目录索引时,通过某些方法可能会使URL产生泄露。

2、不正确的错误消息处理

Web应用的错误信息内包含对攻击者有用的信息,主要有:Web应用抛出的错误信息、数据库等系统抛出的错误信息等。

Web应用抛出的错误信息:以认证功能的认证错误信息为例,讲解不正确的错误消息处理方式。类似于当用户登陆失败的时候具体提醒用户为注册等信息,攻击者可利用这些信息确认用户是否注册。建议将提醒消息的内容仅保留在“认证错误”这种程度。

数据库等系统抛出的错误信息:输入未预料的错误消息时,提醒数据库的错误。攻击者从提醒消息可读出数据库选用的是MySQL等数据库信息,可能给SQL注入攻击提供启发。

3、开放重定向

对指定的任意URL做重定向跳转的功能,加入指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导到那个网站。如http://example/?redirect=***.攻击者指定重定向参数就可以改写成已设定好的Web 网站对应的连接。可能用来作为钓鱼攻击的跳板。

 

因会话管理疏忽引发的安全漏洞

如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。如会话劫持(通过一些手段拿到用户的会话ID,伪装用户达到攻击的效果)、会话固定攻击(强制用户使用攻击者指定的会话ID,属于被动攻击)等方式。

欢迎访问:www.hongfu951.com博客,查看更多技术文章

发表评论

全部评论:0条

鸿福951

努力打造一个好用的webui

热评文章

推荐文章