标签 随笔 下的文章 - 第 5 页 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
29 阅读
技术
登录
/
注册
找到
26
篇与
随笔
相关的结果
- 第 5 页
2025-01-22
2018年排名Top 100的Java类库——在分析了277,975份源码之后得出的结论
最近,OveOps公布了The Top 100 Java Libraries in 2018 – Based on 277,975 Source Files,Hollis查看了这份榜单,做了翻译和补充,向你展示2018年的风云Java类库,希望可以给正在使用Java的你一些帮助和启示。不能说榜单中的类库都是最好的,但是至少是目前比较受欢迎的。 时间如流水,转眼间2018年已经要接近尾声了,过去的一年,可以说是疯狂的一年。SpaceX成功发射了重型猎鹰火箭,苹果成为首个突破一万亿美元市值的上市公司。 2018年,在IT圈也发生了许多大事和喜事,SpringBoot 2发布、Java发布了10 和 11两个版本、GitHub下嫁MicroSoft、IBM迎娶RedHat等,和往年一样,我们分析了2018年排名Top 100的Java类库。 2017年排名Top 100的Java类库——在分析了259,885份源码之后得出的结论 2016年排名Top 100的Java类库——在分析了47,251个依赖之后得出的结论 最受欢迎的前20个Java类库 今年,Top 100 Java类库的排名发生了一个戏剧性的改变,榜首换人了,在此之前,JUnit已经蝉联了三届冠军。而今年,冠军宝座被fasterXML/Jackson 占据。 而这个类库,2016年排名第14名、2017年排名第18名。  Jackson是一个JSON库,可以方便的将JSON转化成Java的对象模型,以及把Java的对象模型转换成一串JSON。在往年的榜单中,Jackson就是所有JSON类库中排名最靠前的。 Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。具有以下特点: 容易使用 – jackson API提供了一个高层次外观,以简化常用的用例。 无需创建映射 – API提供了默认的映射大部分对象序列化。 性能高 – 快速,低内存占用,适合大型对象图表或系统。 干净的JSON – jackson创建一个干净和紧凑的JSON结果,这是让人很容易阅读。 不依赖 – 库不需要任何其他的库,除了JDK。 开源代码 – jackson是开源的,可以免费使用。 去年包揽前三甲的JUnit家族三大成员JUnit、JUnit Runner和junit.framework今年分别位列第三、第四和第五名。 今年排名第二名的是Apache Hadoop,是一款支持数据密集型分布式应用程序并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。 在我们排名前20的库中,我们可以找到Eclipse基金会的Jetty、Apache基金会的 Shiro 、Netty以及谷歌的Guice库等。 Jetty Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。 Shiro Apache Shiro是一个开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 Netty Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。 Guice Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。 除此以外,前20名的榜单中,值得关注的还有开源日志组件——ch.qos.logback、专门用于代码微基准测试的工具套件——org.openjdk.jmh、 除此之外,我们比较熟悉的apache旗下的很多常用类库,如apache.commons.lang、org.apache.ibatis、org.apache.maven、org.apache.http.client、apache.commons.lang3等也都在前20的榜单中。 被挤出前20的Java类库 为了分析榜单的变化情况,我们对比了2017年top20的类库和今年的类库榜单。我们发现,除了JUnit的使用减少以外,还有些类库排名在下降,有些甚至从前二十名被挤出。 首当其冲的是去年位列第四和第五名的Mockito和slf4j,今年被无情的甩出了前20,分别位列第23名和25名。 去年我们重点表扬的,排名第6的,帮助编写用Java语言进行软件测试的框架——Hamcrest 今年惨跌至第37名。 那些值得关注的后来者 我们在今年的结果中看到的最主要的事情是,一切都可以改变。位于榜单底部的库可能会在接下来的一年中名列前茅。这就是为什么我们在2018年的图表中查看了一些不太受欢迎的类库,并在2019年对它们进行跟踪,如: #85 org.objectweb.asm – A simple API for decomposing, modifying, and recomposing binary Java classes #86 com.google.common.primitives – Google Guava Primitive Types #87 com.datastax.driver – DataStax Java Driver for Apache Cassandra #88 org.json – The data interchange format #89 org.apache.commons.math3 – The Apache Commons Mathematics Library #90 com.netflix.hystrix – A latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries. 那些贡献较大的组织 每年我们都会从GitHub中提取顶级的Java库,然后开始处理这些数据。由于需要区分一个所有者之下的不同文件夹,所以这种处理的大部分工作都是手工完成的。这就是为什么在我们的列表中有许多com.google.common库以及org.springframework 和org.apache等等。 今年,我们决定对顶级Java库进行更广泛的研究,看看谁是顶级“所有者”。我们合并了org.eclipse.XX,org.codehaus.YY,io.nedy.ZZ和类似的位于同一个组织下的类库,然后我们整理出了下面这份榜单:  位居榜首的,就是我们都熟知的,也是在前20的榜单频繁出现的apche基金会。 第二名:springframework 第三名:google 第四名:junit 第五名:eclipse 今年的这份榜单中,值得注意的是有一家来自中国的组织贡献的类库总数进入了前20,那就是上图中排名第15的Alibaba。(作为一个阿里人,作者感到无比骄傲!!!) 在Top 100 Java类库中,com.alibaba.otter排名第85。otter是一个基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 Alibaba作为一家互联网公司,过去得几年在开源领域做出了很多卓越的贡献。最近几年,Alibaba向Apache基金会捐献了多个重量级开源项目。如JStorm、RocketMQ、Dubbo、Weex等,相信这些项目必将在开源社区的滋养下成长的更加茁壮!!! 分析方法 我们提取数据和数字的方法与去年的方法相似。在OverOps R&D团队的帮助下,我们主要是用了谷歌的BigQuery和GitHub的API。我们提取了前1000个存储库,从中提取了这些存储库使用的Java库。 BigQuery 是 Google 专门面向数据分析需求设计的一种全面托管的 PB 级低成本企业数据仓库。该服务让开发者可以使用Google的架构来运行SQL语句对超级大的数据库进行操作。BigQuery 可在几秒内扫描 1 TB 的数据,在几分钟内扫描 1 PB 的数据。 在从GitHub中提取的277,975个Java源文件中,我们过滤掉了Android、Arduino、重复和废弃的repos。至此,我们只剩下28,021个Java源文件。经过切片和分析,我们得到了最后的前100名。 Talk Is Cheap ,Show You The Code 首先,我们创建一个仓库表,用来存储star数排名靠前的哪些类库,命名为java_top_repos_filtered: SELECT full_name FROM java_top_repos_1000 WHERE NOT ((LOWER(full_name) CONTAINS 'android') OR (LOWER(full_name) CONTAINS 'arduino')) AND ((description IS null) OR (NOT ((LOWER(description) CONTAINS 'android') OR (LOWER(description) CONTAINS 'arduino') OR (LOWER(description) CONTAINS 'deprecated')))); 现在,我们有了排名靠前的类库的名字,然后我们把他们都拉取下来: SELECT repo_name, content FROM [bigquery-public-data:github_repos.contents] AS contents INNER JOIN ( SELECT id, repo_name FROM [bigquery-public-data:github_repos.files] AS files INNER JOIN java_top_repos_filtered AS top_repos ON files.repo_name = top_repos.full_name WHERE path LIKE '%.java' ) AS files_filtered ON contents.id = files_filtered.id; 至此,我们有了每个项目的源代码,我们就要把去重后的import的语句过滤出来,然后在提取包名称。 SELECT package, COUNT(*) count FROM ( //extract package name (exclude last point of data) and group with repo name (to count each package once per repo) SELECT REGEXP_EXTRACT(import_line, r' ([a-z0-9\._]*)\.') package, repo_name FROM ( //extract only 'import' code lines from *.java files SELECT SPLIT(content, '\n') import_line, repo_name FROM java_relevant_data HAVING LEFT(import_line, 6) = 'import' ) GROUP BY package, repo_name ) GROUP BY package ORDER BY count DESC; 最后,我们再进行一次过滤,确保没有Android, Arduino、过时的或者Java提供的原生的类库。 SELECT * FROM java_top_package_count WHERE NOT ((LEFT(package, 5) = 'java.') OR (LOWER(package) CONTAINS 'android')) ORDER BY count DESC; 至此,你就得到了一份2017年排名Top 100的Java类库的列表了。 最后的一点想法 Java在过去的几个月里经历了一些变化。它从6个月的发布周期开始,最近我们听说只有OpenJDK构建版本可以自由访问,而Java SE 8公开更新将需要生产使用的商业许可证。 Java的变化影响了开发人员,我们可以通过GitHub顶级Java库流行程度的变化看出这一点。最近关于对Java SE更新收费的新闻可能会导致openjdk相关库的使用增加,甚至可能会将数据转移到企业相关库。 最后,如果你想获取整份榜单,请关注Hollis公众号(ID:hollischuang),后台回复:榜单,即可获得完整版PDF。
技术
# 随笔
酷游
1月22日
0
2
0
2025-01-22
官宣版2019互联网百强榜出炉,BAT还是那个BAT吗?
8月14日,中国互联网协会、工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在2019年中国互联网企业100强发布会暨百强企业高峰论坛上联合发布了2019年中国互联网企业100强榜单、互联网成长型企业20强榜单和《2019年中国互联网企业100强发展报告》。 前三名依然被老牌大厂BAT占据,京东稳居第四名。 近些年来,小编看到过很多榜单,排名的依据各种各样,在以前的榜单中,百度经常被字节跳动、蚂蚁金服甚至拼多多超越。这一次的官宣版中国互联网百强企业,百度第三的地位依旧,只是不知道还能坚持多久。  前十名分别是:阿里巴巴(中国)有限公司、深圳市腾讯计算机系统有限责任公司、百度公司、京东集团、浙江蚂蚁小微金融服务集团股份有限公司、网易集团、美团点评、北京字节跳动科技有限公司、三六零安全科技股份有限公司、新浪公司。 拼多多超过搜狐、58、苏宁小米等公司,位列第十一名! 今年的前10名榜单中,有两个独角兽公司很值得注意,那就是字节跳动和蚂蚁金服。这两家公司都是第一次进入前10名。2018年的字节跳动排名第11,2018年蚂蚁金服归属于阿里巴巴集团并未单独评选。 蚂蚁金服和字节跳动也是近些年来受关注比较高的独角兽公司,在很多榜单中,他们甚至在某些方面超越了百度、京东等公司。 2019年互联网百强企业中,互联网公共服务的企业有41家,其次是设计音频及视频业务的企业有21家,另外,从事电子商务的企业共有18家。这些行业值得我们关注。 同时,2019年中国互联网成长型企业20强名单中,也有很多值得关注的企业。 如做出了企查查、鲁大师、毒APP以及脉脉等产品的公司,都是被行业比较看好的。 另外,在这份榜单上,小编没有看到滴滴出行、快手等公司的身影… 
技术
# 随笔
酷游
1月22日
0
18
0
2025-01-22
加州立法禁止使用admin等弱密码,看程序员如何设置密码
加州立法禁止使用admin等弱密码,看程序员如何设置密码 拒国外媒体techcrunch 10月6日报道,美国加利福尼亚州刚刚通过了一项法律,2020 年之后禁止在所有新的消费电子产品中使用“admin”、“123456”和经典的“password”这样的默认密码。 该法案要求联网硬件产品的制造商必须使用独一无二的预编程密码,或者在用户第一次使用时要求更改密码。 弱密码问题一直是黑客进行攻击利用的有效且低成本手段,多年来,僵尸网络利用了安全性较差的连接设备的强大功能,在网站上拥有大量的互联网流量,也就是所谓的分布式拒绝服务(DDoS)攻击。僵尸网络通常依赖于默认密码,这些密码在构建时被硬编码到设备中,用户以后不会对其进行更改。 腾讯工程师使用默认密码入侵酒店WIFI 2018年9月25日上午,在新加坡参加网络安全会议期间,一位腾讯安全工程师入侵了其所住酒店的WiFi。 23岁的郑杜涛(Zheng Dutao,音译)为腾讯的安全工程师。在入住新加坡飞龙酒店时,该工程师对酒店的WiFi服务器是否存在漏洞心生好奇。 郑杜涛成功黑入酒店WiFi服务器,并在一篇名为“Exploit Singapore Hotels”(利用新加坡酒店漏洞)的博文中公布了酒店管理员的服务器密码。该文引起新加坡网络安全局(CSA)的注意,CSA随后对其进行了抓捕。 9月24日,郑杜涛因其黑客行为被新加坡国家法院罚款5000新加坡币。 在入住酒店期间,他成功地通过谷歌搜索到酒店WiFi系统的默认用户名和密码。接入酒店WiFi网关后,郑杜涛在接下来的三天内开始执行脚本,破解文件和密码,最后成功登入酒店WiFi服务器的数据库。 最弱密码都有哪些 美国密码管理应用公司 Splashdata 每年都会公布一份“年度最弱密码”榜单。 在2017年的榜单上,“123456”依旧稳坐榜单第一位,它在 2013 年-2016 年间都是第一位。连续四年卫冕亚军的,是“password”。 除了以上两个密码的变体,能进入排行榜前十的还有基于键盘键位的“qwerty”、情景感十足的“letmein(让我进去)”、以及“football”和“iloveyou”。 值得一提的是,“starwars”首次上榜,排位第 16 ,也许是出于《星战:最后的绝地武士》效应。而《权力的游戏》启发的“dragon”位置也上升了一位,处于第 18 位。 上图是Splashdata公布的最弱密码排行榜的前25名。 据悉,这份榜单采样了超过 500 万个密码泄露案例,主要来自北美和西欧用户。但研究内容并不包含影响广泛的雅虎邮箱以及成人网站的泄露信息。由此,统计数据可更好地体现日常网络生活。 程序员应该如何设置密码 平常人的密码就是自己的生日,英文名,拼音,还有特定的数字等的组合,便于我们记忆,而程序员在这些字母、符号,数字组合上有什么不同呢? 平时都听说程序员枯燥、乏味、不浪漫,但是看了下面这些程序员专属密码后,觉得简直碉堡了!!! 密码:ppnn13%dkstFeb.1st,解释:娉娉袅袅十三余,豆蔻梢头二月初 密码:Tree_0f0=sprintf("2_Bird_ff0/a")解释:两个黄鹂鸣翠柳 密码:csbt34.ydhl12s解释:池上碧苔三四点,叶底黄鹂一两声 密码:for_$n(@RenSheng)_$n+="die"解释:人生自古谁无死 密码:while(1)Ape1Cry&&Ape2Cry解释:两岸猿声啼不住 密码:doWhile(1){LeavesFly();YangtzeRiverFlows();}解释:无边落木萧萧下,不尽长江滚滚来 密码:tcmlflw,syred>febhua]解释:停车坐爱枫林晚,霜叶红于二月花 密码:dig?F*ckDang5解释:锄禾日当午 密码:1dcypsz1/2jss1/2j#f00解释:一道残阳铺水中,半江瑟瑟半江红 密码:hanshansi.location()!∈[gusucity]解释:姑苏城外寒山寺 密码:hold?fish:palm解释:鱼和熊掌不可兼得 最后,给大家出一道题,看看你能不能猜到这个密码的解释: ps!see(5tl)shit!say(man)
技术
# 随笔
酷游
1月22日
0
5
0
2025-01-22
遇到一个懂业务的面试官太可怕了
前两天,在公众号上发了一个招聘贴,为我们自己团队招人,我的原帖中有一条岗位要求:有互联网金融经验优先。 其实,关于这种规则,很多岗位的JD种都会或多或少有一些,尤其是一些相对专业的领域,如电商、支付、金融、社交、营销、游戏等行业领域。 包括在一些招聘网站上,也会有一条筛选项是行业领域:  也就是说,其实很多公司,很多行业领域,喜欢招有相关背景的开发。而且很多开发人员在换工作的时候也更加倾向于自己所熟悉的领域。 所以,在很多面试中,技术面试官也会问一些和业务有关的话题,或者是和业务有关的技术问题。 比如支付领域的面试官会比较关注数据一致性相关的问题,电商领域的面试官可能比较喜欢问如何设计高并发系统。 之所以会这样,我觉得有两个原因: 1、技术为业务服务。就像前几天我在公众号转发过的一篇文章《世界上没有技术驱动的公司》,虽然里面的观点我不全都认同,但是我认可作者说的:技术是服务于业务的,尤其是一个业务开发,如果自己做的业务都不了解,只是机械的完成自己负责的小功能的话,那么我不认为他是一个好的开发人员。 2、面试官熟悉这个领域。如果一个面试官在一短时间内都专注于某个业务领域的话,那么他会对这个领域更加熟悉,更加了解这个领域的难点是什么,坑有哪些,通过问一些问题,就可以大体掌握一个技术人员到底处于什么样的水平。 因为作者最近一段时间一直在做和互联网金融有关的项目,所以对这部分内容会熟悉一些, 所以如果遇到有相关经验的面试者,我会愿意多和他探讨一些和金融领域有关的问题。 打个比方,如果我遇到一个做过贷款业务中还款功能模块的开发人员,我可能会围绕着这个业务模块问很多问题,如: 1、你们有多少种还款类型?(主动还款、到期系统扣款) 2、还款扣款的渠道是什么?(网银、支付宝、平台账户余额) 3、如何解决网银大额通道关闭的情况,扣款失败怎么办? 4、你们是不是有逾期,逾期是不是要算罚息。那如果因为银行大额通道关闭了,导致用户逾期,这种情况怎么办? 5、向银行发起了扣款指令,但是银行一致没有明确的返回,比如返回系统繁忙,这种情况如何处理? 6、多个渠道之间的扣款顺序是如何处理的?怎么避免多扣钱? 7、网银大额转账,钱先从A账户转到人行,人行受理成功后返回A发卡行成功,然后系统就认为成功了。但是人行再给B账户转账的时候,有可能由于B账户受限,如司法冻结等原因导致转账失败,人行会把钱退还给A银行,那么作为外部系统,如何解决这种问题? 8、如何解决用户的主动还款和系统扣款之间的并发问题? 9、和银行之间的对账是怎么做的?如果对不齐,以谁的账单为准? 我问了很多异常情况的处理方式,一方面是因为这些坑我们都踩过,想知道外部遇到这类问题是怎么做的,这其实也是一个学习的过程。 另外一方面,通过抛出一些实际问题,也可以更加全面考察一个工程师的能力。我们在做技术方案的时候,如果不能考虑到各种异常情况,边界情况。或者说遇到各种特殊情况的时候,不知道如何去解决的话,肯定会给项目带来很严重的后果。 还有的时候,如果面试者只负责了贷款业务中的还款部分功能,那么我也会尝试着问一些比如: 1、你们的授信是怎么做的?风控模型是怎样的? 2、你们贷款支用的时候,如果有多加担保机构的话,你们怎么做路由的,算法是怎么样的? 之所以会问这些问题,也是想知道这位候选人有没有全局意识,是不是对自己的上下游,合作方以及整个产品有了解。因为这些也是业务的一部分。 可能有人会觉得我问的这些问题很难,人家工作中如果没遇到怎么办? 其实,我并不是一定要听到一个完美的答案。如果没遇到过,那么大可以把这个问题当做一个实际场景,让候选人可以想办法试着去解决。 我更想知道的是我对面的这位是不是有一个很好的问题分析、定位和解决的思路。 话又说回来了:不难,要你干啥!?
技术
# 随笔
酷游
1月22日
0
3
0
2025-01-22
GitHub遭受的DDoS攻击到底是个什么鬼?
据外媒消息,美国东部时间2018年2月28日下午12点15分左右,GitHub 遭遇了可能是迄今为止最大的 DDoS 攻击,最高访问量为 1.35Tbps。 当地时间2月28日起,GitHub 经历了两次间歇性不可访问。攻击发生 10 分钟后,GitHub 向 CDN 服务商 Akamai 请求协助,访问 GitHub 的流量交由后者接管。攻击在 Akamai 介入 8 分钟后结束,GitHub 确认该网站上用户数据的机密性或完整性未受到威胁。 什么是DDoS攻击 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,是指攻击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为正常用户提供服务。 做一个形象的比喻,我们可以把攻击者视为无赖,被攻击者视为商场。无赖为了让一家商场无法正常营业,无赖们扮作普通客户一直拥挤在商场,赖着不走,真正的购物者却无法进入;或者总是和营业员有一搭没一搭的东扯西扯,让工作人员不能正常服务客户;也可以为商铺的经营者提供虚假信息,商铺的上上下下忙成一团之后却发现都是一场空,最终跑了真正的大客户,损失惨重。一个无赖去胡闹,就是 DoS攻击,而一群无赖去胡闹,就是 DDoS攻击。 DoS(拒绝服务,Denial of Service)就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。这是早期非常基本的网络攻击方式。 在信息安全的三要素——保密性、完整性和可用性中,DoS(Denial of Service)针对的目标正是可用性。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。一般来说,DDoS 攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。其中,DDoS 带宽消耗攻击可以分为两个不同的层次:洪泛攻击或放大攻击。 当服务器被DDos攻击时,一般会出现以下现象: 被攻击主机上有大量等待的TCP连接; 网络中充斥着大量的无用的数据包; 受害主机无法正常和外界通讯; 受害主机无法处理所有正常请求; 严重时会造成系统死机。 对于用户来说,在常见的现象就是网站无法访问。 反射型DDoS攻击 本次是GitHub遭受攻击的手段是DDos攻击手段中的反射型DDoS攻击。反射型DDos攻击也被称为放大攻击。攻击者并不直接攻击目标服务 IP,而是利用互联网的某些特殊服务开放的服务器,通过伪造被攻击者的 IP 地址、向有开放服务的服务器发送构造的请求报文,该服务器会将数倍于请求报文的回复数据发送到被攻击 IP,从而对后者间接形成 DDoS 攻击。 执行反射攻击,需要具备四个因素: 一个服务器:用于执行 IP 地址欺骗; 一个脆弱的、易于反射/放大的协议:任何设计不完善的、基于UDP请求的协议都可能被利用; 反射服务器列表:支持脆弱协议的服务器; 一个目标IP地址:受害者的IP地址 攻击的整体思路如下: 攻击者发送虚假的UDP请求; 伪造源IP地址:将请求包中的源IP地址替换成受害者的IP地址,这些请求包中通常不会出现攻击者自己的IP地址; 每个请求包都发往一个随机的反射服务器; 经过伪造的数据包通过网络传输最终到达反射服务器; 反射服务器接收到这些虚假的请求包,遵从约定的协议规则,发送响应;无疑,这些响应都是针对受害目标的。 如图所示,攻击者不直接把攻击包发给受害者,而是冒充受害者给放大器发包,然后通过放大器再反射给受害者。受害目标最终会收到大量的响应包,而这些包都不是它请求的。在攻击足够大的情况下,受害目标可能会发生网络拥塞或中断风暴。 传送给受害目标的响应可能远远大于伪造的请求,这就是这类攻击被称为“放大攻击”的原因。经过精心设计,攻击者可以利用有限的资源,有效的扩大DDOS攻击的流量。 在反射型攻击中,攻击者利用了网络协议的缺陷或者漏洞进行 IP 欺骗,主要是因为很多协议(例如 ICMP,UDP 等)对源 IP 不进行认证。同时,要达到更好的攻击效果,黑客一般会选择具有放大效果的协议服务进行攻击。总结一下就是利用 IP 欺骗进行反射和放大,从而达到四两拨千斤的效果。 对于GitHub的攻击 上面介绍中,想要完成攻击,需要有一个开放服务的支持UDP协议的服务器,而本次针对GitHub的攻击利用的是我们Java开发人员很熟悉的Memcached。 什么是 Memcached ? Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。经过Memcached缓存技术处理的动态网页应用可以减轻网站数据库的压力,让网站管理员可以进一步提升网站的性能,世界上很多大型网站,例如Facebook, Flickr, Twitter, Reddit, YouTube, Github都使用了这种技术。 为什么是 Memcached ? 由于Memcache(版本低于1.5.6)默认监听UDP,天然满足反射DDoS条件。 很多用户将服务监听在0.0.0.0,且未进行iptables规则配置,这导致可以被任意来源IP请求 Memcache作为企业应用组建,其业务特性保证了具有较高上传带宽。 Memcache不需要认证即可进行交互。 Memcached反射的倍数达到数万倍,非常利于用于放大报文倍数行成超大流量的DDoS攻击 本次针对GitHub的攻击,其实是攻击者把自己的IP地址伪装成GitHub的IP地址,然后向Memcached缓存服务器的UDP端口11211,发出大量假请求,Memcached对请求回应。大量的并发回应报文汇聚到被伪造的IP地址源(也就是GitHub),形成反射型分布式拒绝服务攻击。 如何避免自己的Memcached被利用 将服务器放置于可信域内 一定要放置有外网时不要监听 0.0.0.0 有特殊需求可以设置acl或者添加安全组 禁用或限制11211的UDP端口号 如何避免被Memcached DDoS反射攻击 对于网络安全防护,其实没有任何办法能够彻底避免被攻击,网站维护者能做的其实都只是在提高攻击者的攻击成本而已。对于DDoS反射攻击,可以做以下事情: 使用高性能的负载均衡软件,使用多台服务器,并部署在不同的数据中心。 优化资源使用提高 web server 的负载能力。 启用路由器或防火墙的反IP欺骗功能。 使用高可扩展性的 DNS 设备来保护针对 DNS 的 DDOS 攻击。 准备足够多的带宽。 使用第三方的服务来保护你的网站。 参考资料 DDOS攻击之统计分析常见的反射/放大攻击 反射型 DDoS 攻击的原理和防范措施 防范 DDoS 攻击的 15 个方法
技术
# 随笔
酷游
1月22日
0
17
0
上一页
1
...
4
5
6
下一页
易航博客