互联网安全事件层出不穷,用户每时每刻都有可能会遭受攻击者袭击。作为软件开发人员,则是最大限度的保证应用程序安全。本文主要是对Node.js语言作出的安全开发建议。 以下为译文: 毫无疑问,Node.js已经变的愈加成熟,尽管这样,开发者仍然缺乏大量的安全指南。在这篇文章中,我将分享一些有关Node.js安全要点给大家,希望大家能够谨记于心。 1.避免使用Eval Eval并不是唯一一个需要避免的函数,在后台,下面这几个表达式可以使用eval:
2.请用严苛模式(Strict mode) 这种情况下,你可以使用一个受限制的JavaScript变量,它可以消除一些隐性错误并且会把这些错误抛出去。 3.Undeletable属性
6.测试 不用说,测试,测试,多点测试~
当然,不仅仅是单元测试,直戳测试金字塔。 7.对sudo node app.js说再见 我看到很多人在运行拥有超级用户权限的Node APP,为什么?因为他们想让应用程序能够监听80或443端口。 这种做法是错误的。小心一个错误/bug进程就能降低整个系统,因为它已经拥有合法的凭证去做任何事情。 取而代之,你应该设置一个HTTP服务器/代理来转换请求,可以是nginx、Apache等等。 8.避免命令注入 看看下面这段代码有什么问题?
child_process.exec调用去执行/bin/sh,所以,这是一个bash注射器,而不是一个程序启动器。 当用户输入的内容传递到这个方法中,就会产生问题——要么是一个\要么就是$(),攻击者很可能会注入一个新的命令。 开发人员可以使用child_process.execFile来解决此类问题。访问 LiftSecurity来查看如何处理命令注入。 9.临时文件 开发人员在创建文件时要特别注意,例如处理上传文件。这些文件很容易吃掉你所有的磁盘空间。 解决方法是使用Streams。 10.确保Web应用程序安全 这里不仅仅是针对Node——而是关于如何确保你的Web应用程序安全。 11.跨站脚本反射 当攻击者把代码注入到HTTP响应时,这种情况才会发生。应用程序在返回无效的输入到客户端时(大多数都是基于JavaScript编写的),应用程序很容易遭受这种类型攻击。攻击者可以盗取cookies、执行剪贴板和修改页面本身。 具体示例:
如何预防:
12.停止Cookie盗窃 默认情况下,在同一个域里,JavaScript可以读取cookies,在跨站脚本攻击里,这是非常危险的。不仅如此,任何第三方JavaScript库都可以读取它们。 示例:
如何预防: 开发者可以在cookies里面设置httponly标记,这样,JavaScript便无法接近cookie了。 CSP(Content Security Policy)是一个额外添加的安全层,它有助于检测和减轻某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。 通过HTTP header中的Content-Security-Policy方法来启动CSP。 示例
点击查看更多有关 CSP示例。 14.跨站请求伪造(CSRF) CSRF(Cross-Site Request Forgery)是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 示例:
如何预防: 要想阻止CSRF,你应该实现同步令牌模式(Synchronizer Token Pattern),幸运地是,Node社区已经帮你完成了这件事。长话短说,一起来看看它的工作原理:
行动 开发者应该有所行动,制作一个 Security Adventure车间来指导现实应用开发。 15.保护Express应用程序:Helmet Helmet是一系列帮助增强Node之Express/Connect等Javascript Web应用安全的中间件。安全功能包括:
有关Helmet更多内容,可以访问其托管地址: https://github.com/evilpacket/helmet 。 16.使用工具
如果你想了解更多关于Node安全方面的内容,你可以关注 Node Security 项目。他们的目标是审核NPM中的每一个模块,发现问题并修复问题。(张红月/编译) 英文来自: CODESHIP |