毫无疑问,Node.js现在是越来越成熟。尽管这样,我们还没有形成很多的安全准则。 在这篇文章中,我会分享一些关于提高Node.js安全性方面的技巧。 不用eval,赢得朋友 你不仅仅要避免使用eval - 你也应该避免使用在下列情况,他们等价于直接使用eval;
注* eval: 直接将字符串转化为代码执行,如: eval('alert("hi")') 为什么不要用eval? 如果你对用户输入的内容进行了eval运行(千万不要这么设计),你就有可能受到注入攻击。并且这种运行方式很慢。 请使用Strict严格模式 使用这种模式将限制你的变量声明,并总会将一些可能隐藏的错误抛出来,下面是几个例子: 不可删除的属性
对象属性必须是唯一的
禁止使用with
注* 更多参考: 为什么使用"use strict"可以节约你的时间 5个经典的前端面试问题 静态代码分析 使用 JSLint, JSHint 或 ESLint 来静态分析你的代码. 静态代码分析可以让你在早期捕获一些潜在的BUG. 测试 这一点不言而喻:测试,测试再测试。 不仅仅是单元测试,你应该进行全面测试(test pyramid)。 不要直接使用: sudo node app.js 很多人使用超级用户权限运行Node应用,不是吗?因为他们希望应用程序直接侦听80或443端口(注* http和https的默认端口) 这一点是不对的,进程中的任何一个错误/漏洞都将让整个系统宕机,然后你就什么也干不了。 所以你应该使用一个HTTP反向代理服务去转发这些请求。可以用nginx, Apache 你看着办。 注* 相关阅读 NodeJS on Nginx: 使用nginx反向代理处理静态页面 拿什么守护你的Node.JS进程: Node出错崩溃了怎么办? 避免命令(shell command)注入 下面的代码段有什么问题?
child_process.exec 命令调用的是 /bin/sh, 它启动了一个解释器,而非程序。 这是有问题的,当该方法执行用户输入的一个方法,比于一个反引号或$()中的内容,一个新的命令就可能被攻击者注入。 为了避免这个问题,你只需要使用child_process.execFile。 临时文件 创建文件时,如处理上传的文件格外注意。这些文件可以轻松吃掉你所有的磁盘空间。 为了解决这个问题,你应该使用Streams。 加密你的Web应用 不光是Node-所有的Web应用程序都应该加密。(注* https) 跨站脚本攻击(Reflected Cross Site Scripting) 发生这种情况时,攻击者注入可执行代码的HTTP响应。一个应用程序容易受到这种类型的攻击,它会在客户端执行未验证的脚本(主要是用Javascript写的)。它使攻击者能够窃取cookie,剪贴板的内容或修改页面本身。 比如
如果这条用户查询未经过验证直接插入到DOM(HTML)中,它就会被执行。 怎么避免 永远不要往DOM中插入不可信的数据 在插入前去除HTML 注* 更多内容 你不知道的JavaScript用法,Hacker是这样写JS的 QQ邮箱是如何泄密的:JSON劫持漏洞攻防原理及演练 防止Cookie被盗 默认情况下,Cookie可以通过Javascript在同一个域中读取。这样可能会被跨站点脚本攻击。而且它们还有可能被第三方的JavaScript库阅读。 例如
怎样避免 为了防止这种情况,你可以在Cookies上使用HttpOnly,这个标签可以让JavaScript无法读取这个cookie。 (注* 比如服务器端用到的Cookie) 内容加密策略 内容安全策略(CSP)是一个附加的安全层,帮助检测和缓解某些类型的攻击,包括跨站点脚本(XSS)和数据注入攻击。 CSP可以通过 Content-Security-Policy 被启用。 比如:
注* CSP的更多内容 这个header头信息将只接收信任的域名及其子域名的发过来的内容。 跨站请求伪造 (Cross-Site Request Forgery) CSRF是一种迫使终端用户在他目前已验证授权的Web应用程序中执行其它的actions。 这时侯问题就可能发生了,因为cookie也会发送到被请求的网站(此网站你已经被授权) - 即使当这些请求来自不同的位置。 例如
这样会直接导致这个用户信息被删除。 怎样阻止 为了防止CSRF,您应该实现同步令牌模式 - 幸运的是,node社区已经帮你做了。下面是它的工作原理: 当发起一个GET请求时,服务器检查你的CSRF令牌 - 如果它不存在,创建一个 当用户显示输入时,确保添加一个隐藏的CSRF令牌值 当Form表单提交时,确保该值与该表单与Session中的内容相匹配 来自:http://ourjs.com/ 原文地址: blog.codeship.com |
小黑屋|在路上
( 蜀ICP备15035742号-1 )
GMT+8, 2025-8-19 02:14
Copyright 2015-2025 djqfx