xglys 发表于 2017-2-21 11:37:54

《Nodejs实战》读后感

  前言:
  其实很多人都开始学习Node了,或者也试了一些express这样的库去做web开发,但是实战的经验确实不是很多,原因很简单:现在的项目或者自己的level还没法去接一些这样node的case,而这本书集聚了cnode社区的老人,里面大部分还是干活。
  正文:
  试读的部分内容属于后面的,主要是专注在node服务相关的安全。


[*]什么是web安全?


[*]保密性:保护书籍内容不泄露,加密
[*]完整性:数据不被篡改
[*]可用性:web站点可被访问,拒绝Dos


[*]HTTP管道洪水漏洞
  这个主要出现在0.8.26和0.10.21之前,原因:
  客户端不接收服务器端的响应,但客户端又拼命发送请求,造成Stream流无法泄洪,主机内存耗尽而崩溃。
  一些攻击手段:


[*]SQL注入:其实这个不是很了解,写的稍微少点
  大致记一下防范措施:保证拼接到SQL查询语句的变量都经过escape过滤函数,使用比较成熟的ORM框架


[*]XSS脚本攻击【Cross-Site-Scripting】
  其实这个前端还是遇到过很多次的:


[*]ajax的xss注入
[*]base64注入
[*]ASC II码
[*]图片src的 onerror
[*]link的href
[*]iframe
      其实这些大部分都是要过滤 < 和 >


[*]CSRF请求伪造
  cookie的特性:


[*]同源性:保证不会跨域发送造成泄密
[*]附带性:保证每次请求服务器端都会在请求头带上cookie信息
      session对象可以保存在文件中,也可以保存在内存里。建议保存在第三方媒介:redis或者mongodb
      express框架将session保存到内存里面。
      除了可以用cookie保存sessionid,还可以用url参数来保存
      Etag来保存sessionid也被使用在用户行为跟踪上:
          Etag是静态资源服务器对用户请求头中if-none-match的响应:
          一般第一次请求某一个静态资源是不会带上任何关于缓存信息的请求头的,这个时候静态资源服务器根据资源的大小和最终修改时间,哈希计算一个字符串作为Etag的值响应客户端。
          第二次再访问静态资源的时候,由于本地浏览器具有次图片缓存,但不确定服务器是否已经更新掉了这个静态资源,发起请求带上if-none-match参数,其值就是上次请求服务器响应的Etag值。服务器接收到这个if-none-match值,再根据算法生成Etag,并对比,如果相同,说明资源没有更新,响应状态304
        其实以前对Etag的理解好像有点偏差,通过这里面的描述,加深了Etag的值的定义的理解。 


[*]应用层DoS拒绝服务
[*]文件路径漏洞
[*]加密安全


[*]
对称加密:AES DES
[*]
非对称加密:RSA
[*]不可逆加密:md5、SHA-1
     这边有一个例子:

var crypto = require('crypto');
var md5 = function(str, encoding){
return crypto.createHash('md5')
.update(str)
.digest(encoding || 'hex');
};
console.log(md5("nodejs"));

   
     其实最早的时候,我一直是用这个方法做md5的转换,但是书中确实提到,一些网站很简单地就破解了
     后面还是得用时间戳 + gap + 某个需要加密的东西
     结语:
  其实也关注过Node相关的服务安全,但是确实没有如此深刻,感谢这次读书活动,内容很干货
页: [1]
查看完整版本: 《Nodejs实战》读后感