Tag: 安全

从node.js应用程序中将string安全地存储在内存中

在这个问题中 ,Mubashar询问使用C#在内存中安全地存储敏感信息,并指向.NET中的SecureString类。 有一个现有的可比较的工具,将在node.js做到这一点? 否则,使用节点资源可用的方法是什么?

反向代理是否使node.js安全?

我想将node.js放在云中,以获取具有敏感公司信息的应用程序。 恐怕node.js不像一些较旧的服务器那么安全,因为它并没有被大量使用。 我看到有人build议使用反向代理来使它更安全。 我了解它是如何安全的,因为它不直接暴露于世界。 但是,xss和其他攻击仍然是可能的。 仅从安全的angular度来看,任何人都认为node.js与旧的服务器是一致的? 关于“如何说服老板+公司安全团队”的提示?

Node JS Buffer数据如何存储在幕后?

根据节点JS缓冲区文档,“缓冲区类似于整数数组,但对应于V8堆外的原始内存分配”。 没有进一步的信息给出。 问题是数据如何存储在RAM中。 节点JS缓冲区是否使用一种特殊的方式在堆上分配空间? 这是跟V8堆一样的垃圾收集吗? 我可以安全地假设缓冲区中数据的任何改变实际上改变了RAM中的数据,并且没有残留的数据留给窥探者吗? 对于这个非常广泛的问题感到抱歉,但我似乎无法find任何有关如何实际工作的材料。 我所要求的原因是因为我想确保在我的应用程序中使用的variables不会在存储器中超出需要的时间。 文档: https : //nodejs.org/api/buffer.html#buffer_class_buffer 干杯!

Google Analytics如何避免欺骗?

因此,我试图弄清楚Google Analytics如何避免欺骗。 当然,当您注册一个帐户时,他们会通过上传文件来validation您是否拥有该域名。 但是,您也得到了一些带有唯一公共代码的脚本标签(用下面的“XXXXXXX”代替)。 什么阻止某人复制该代码,欺骗请求头,并假装成为我的网站,通过curl遵循Google的身份validation策略? <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'XXXXXXX']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> 我问的原因是因为我试图创build一个类似的JavaScript插件,将我的网站数据公开给参与网站(“客户”)。 我不知道如何在客户端的服务器端没有私钥的情况下获得这个function。 这真是太糟糕了,因为我真的希望整个Google Analytics(分析)能够整合起来。 有什么想法吗?

身份validation(Passport)足够安全与Node js后端服务器?

使用Facebook身份validation的PassportJS足够用于带有Node JS的iOS后端吗? 我也有toobusy包,当事情变得很忙的时候,也会拒绝请求(我猜这对DDOS来说是好事)。 我正在考虑使用nginx作为我的Node.JS服务器的反向代理。 什么是更多可以扩展的安全措施? 一些build议和提示? 任何与安全相关的问题,我应该关注PassportJS的身份validation会话无法处理?

Socket.io安全问题

我想知道如何保护我的socket.io连接到服务器从下面。 安全问题: 什么会阻止恶意用户通过客户端代码连接到套接字服务器? 例: OUTSIDE DOMAIN REQUEST var socket = io.connect('http://Mydomain', {port: 4000}); 用户可以通过打开不同的浏览器窗口看似创build数千个并发连接。 我怎样才能防止这些问题?

MongoDB在node.js中的安全性

对于说一个MySQL数据库有已知的安全问题。 这是如何适用于NoSQL数据库? 例如Injections,xss等。使用NoSQL db时,您需要采取什么样的安全措施? 特别是关于MongoDB(使用node-mongodb-native )和Node.js(使用Express) 如果是这样,有没有Node / Express模块​​有助于防止这种情况?

PHP + socket.io(会话,授权和安全问题)

我有一个工作的PHP应用程序,我想添加实时支持。 我想使用nodejs / socket.io来添加这种function。 我发现的第一个问题是如何在nodejs端正确授权用户(用户已通过PHP会话在php后端进行身份validation)。 在nodejs端使用socket.handshake.header.cookie我可以parsing和获取PHP会话ID,我可以通过redis / memcache / database(取决于我用来保存会话信息)进行身份validation。 当用户只有一个网站的标签页/窗口打开时,一切看起来很酷 – 当有更多的使用session_regenerate_id() ,在nodejs用户authentication与另一个sessionid键,所以我不能区分两个标签除了他们连接的套接字ID用。 当用户注销时,他不应该在任何选项卡上收到任何消息(因为他已经从该浏览器的每个选项卡/窗口注销)。 所以在注销消息(从浏览器刚刚注销PHP的事情发送),我应该删除所有连接到授权用户ID的套接字连接。 但是,如果用户login在两个设备上(如电脑浏览器和iPad游戏)。 在注销一个设备后,他不应该在他注销的设备上收到任何消息,而不是在每个设备上。 如何区分socket.io中不同设备/浏览器的连接? 当然,不使用session_regenerate_id()会很有效,但是如果我真的想要使用这个function,我该怎么办? 我的另一个问题是安全问题(甚至是问题)。 我们假设应用程序中的授权用户可以看到example.com/user1页面(这是user1的新闻提要),并且看不到example.com/user2 (他没有看到它的权限)。 当用户在example.com/user1上时 ,我想让socket.io向浏览器发送更新消息,当用户在example.com/user2上时 ,当然不会发送更新消息。 在socket.io端我可以读取引用地址(据推测,当用户在user2网站上,他没有得到任何socket.io连接)。 问题是: 我应该比较referer地址与node.js端的身份validation用户的权限? 或者也许引用值在node.js方面是安全的? 在node.js端添加另一个数据库检查会降低速度(因为几乎所有的请求都应该在两边同时进行数据库检查 – PHP和node.js)。 或者,也许整个概念的socket.io + PHP应用程序工作我提出的方式是错误的? UPDATE 我想我find了一个方法来省略第一个问题的问题 – 基本上我只是添加另一个cookie(除了PHPSESSID)fe。 命名为NODESESSID,我在用户授权时生成(使用uniqid())。 现在在node.js端的授权是比较PHPSESSID和NODESESSID(都必须匹配)。 现在,当用户注销时,他将消息注销传递给socket.io,而socket.io将使用NODESESSID断开所有的套接字。 这就像连接重新生成会话ID的好处,而不是重新生成会话ID(但不容易受到会话固定,不是吗?)。

如何防止Node.js / Express提供我的应用程序的源代码?

我从来没有想过,这将是一个与Node.js和Express的问题,但在一个疯狂的奇想,我决定在浏览器中input我的Node.js Express项目中的一个源文件的位置 – 如下所示: http://www.mywebsite.com/mynodejsapp/app.js 令我非常惊骇的是 ,我的应用程序的源代码正好popup,公众可以看到。 那么,除此之外:如何在Node.js / Express中停止它? 我的设置代码非常简单: var app = express(); app.configure(function() { app.use(express.static('/home/prod/server/app/public')); }); app.listen(8888); 为了澄清,这是我的文件夹结构看起来像: /home/prod/server/ /home/prod/server/app.js /home/prod/server/public/ 各种各样的用于公共访问的文件都在/public 。 我的所有服务器源代码位于/server/ ,而且我对Express的静态文件夹configuration的理解是,静态文件夹是Express快速从文件系统提供文件的唯一位置。 有任何想法吗?

在Node.js服务器中validationGoogle授予的OAuth令牌的正确方法是什么?

我试图validationAndroid平台的移动应用程序自定义node.js服务器API。 我想为此使用Google OAuth2令牌,而不是推出自己的身份validation,因为安装了Google Play的Android设备可以让应用开发者使用。 我正在使用Google Play服务库中的GoogleAuthUtil.getToken调用, 这里logging了GoogleAuthUtil.getToken调用。 我试图按照这个Android开发人员博客post概述的build议 getToken方法在我的情况下返回一个长857字节的string。 如果我尝试将此令牌传递给Google的TokenInfo端点,则会返回: {'错误':'invalid_token','error_description':'无效的值'} 我在这里做错了什么? 在getToken调用的“范围”中,我发送: audience:server:client_id:**i_put_my_clientid_here** 。 我有一个clientid为“已安装的应用程序”生成。 使用这个客户端ID,对getToken的调用根本不起作用。 当我生成一个“服务帐户”的客户端ID,调用成功,但我得到一个857字节的令牌失败,如上所述传递到TokenInfo端点。 编辑:我也创build了“Web应用程序”的客户端ID,因为它似乎是调用getToken时使用的正确的客户端ID。 但行为是一样的,我得到一个857字节的令牌,调用Google的端点时不validation。 如何在Android上使用Google Play服务正确获取有效的身份validation令牌? 一旦我有正确的标记,什么是正确的node.js库来validation它的服务器端? 我可以使用passport-google-oauth吗?