Tag: 安全性

node.js是否会在连接之间共享数据的风险更大?

由于node.js是单线程的,并且许多请求使用asynchronouscallback或事件并行运行,并且任何一个请求都不会立即运行到完成状态,所以从一个http请求的进程最终会与其他请求共享variables当将数据存储在函数/模块中的临时对象或variables中时? 例如,在PHP中,每个进程得到它自己的线程,并运行到完成(阻止其他任何东西)。 因此,无法通过连接/请求访问variables。 我试图谷歌search,但没有发现太多。 这甚至是一个问题吗? 是否有可能在不同的(甚至是相同的)用户的个别请求之间无意中共享variables?

在开源程序中encryption?

目前我正在开发一个Node.js的web服务器应用程序,然后我想提供下载和使用。 这个应用程序应该具有帐户,以便您可以login您的帐户在服务器创build的网站上。 由于这需要密码,所以我也必须考虑安全问题。 但现在,我真的不知道如何在发送和接收密码的时候保护密码。 对于存储,我只是简单地创build一个密码散列,并将散列存储在某个地方,但是传输呢? 我正在考虑SSL / https,但是这需要一个SSL证书,即使我在某个地方免费获得,我也无法在开源应用程序(?)中分享它。 我也可以以某种方式在网站上散列密码,然后把散列发送给服务器,但是我认为这也不是安全的最高标准,是吗? 考虑到没有SSL会导致更多的弊端,而不仅仅是更糟糕/没有encryption。 有任何想法吗?

我怎样才能保护与多个租户的SAML?

我正在谈论IDP发起的工作stream程。 我正在使用saml的这个 passport策略。 在“ 安全和签名 ”标题下,它build议提供IDP的证书。 当我定义战略AFAIK时将插入此证书。 在多租户应用程序的情况下,我将无法知道使用哪个证书,直到用户尝试login,并且在那时使用证书将会迟到,是不是? 如果在SAML请求进来之前我无法知道使用哪个证书,那么如何与多个租户validationSAML请求呢? 我想我需要这样的东西: 用户发送标识他们尝试login的租户的信息 SAML策略是使用正确的证书创build的。 SAML过程开始。 或者,也许我只是在想它错了,没有一个是真正需要有一个相对安全的login过程? 如果这个问题太广泛,如果你留下意见来帮助我缩小范围,或者指导我阅读资源,我将非常感激。 如果不清楚,我正在储存: SSOurl 发行人url 公共证书 这个信息与租户相关联,所以一旦我从IDP获得了个人资料信息,我就可以确定用户应该被引导到哪个租户。 在确定承租人确认事物之后,我也可以使用这些信息。 也许我可以使用公共证书做一些“事后”validation?

暴露用户唯一的MongoDB _id是否存在安全风险?

在我的web应用程序中,我将用户的数据存储在MongoDB文档中。 这些具有独特的_id属性。 要检索与用户创build的项目相关联的上传,我已经创build了以下API: /api/uploads/:user_id/:item_id/:fileName 在后端,我只是返回文件位置/uploads/<user_id>/<item_id>/<fileName> 虽然项目logging本身将具有唯一的ID,但是此文件夹结构将使其更清洁,以删除与一个用户关联的所有项目,因为我可以简单地删除整个名为<user_id>文件夹。 然而,通过这种方式,我清楚地将用户的唯一_id暴露给所有访问其公开上传的人。 现在我的问题是,有什么方法可能会造成安全风险? 恶意黑客用一个用户的唯一ID做什么?

WebSocket安全的本地主机连接

我已经构build了一个简单的Node.js WebSocket聊天服务器 。 我可以在terminal选项卡上的localhost上运行它。 在另一个terminal标签中,我可以用ws://连接到wscat 。 如何使用wss://在localhost上连接到它?

Socket.io,安全和多人游戏

我目前正在制作一个在线游戏,我想知道Node.js和socket.io的安全性。 游戏的当前状态 我所有的 io.sockets.on('connection', function (socket) { socket.on('request', function (data) { }) }); 是安全的。 玩家可以发出任何请求(请求在这个例子中是指'请求')与任何数据(指数据),他们将不能利用它,即使他们手动修改他们发出的请求和数据并绕过客户端的基本安全。 他们也不能通过发送无效数据来使服务器崩溃。 注:我只有2发射:发射用户/通过login和发射input。 服务器虽然通过各种“发射”发送数据。 session()或GET / POST没有“通常”的概念。 在客户端,我专门使用 var socket = io.connect('http://something:3000'); socket.emit('request', data); 对于玩家需要获取代码+图片的静态资源,它看起来像: app.use(express.static(__dirname + '/public')); 对于数据库: client = mysql.createConnection({ host: 'localhost', user: 'root', password: 'something',}); client.connect(); client.query('USE dbname'); 最后是路由?,我显示相同的页面,不pipe请求: app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); […]

将私钥存储在静态的Angular站点上

我有一个静态的AngularJS文件。 它部署在Amazon S3上。 我正在访问一个具有散列validation机制的API。 我必须使用私钥才能创buildURL的散列并在标题上发送。 它工作的很好,但问题是,我必须find一种方法来保护私钥远离黑客。 我想知道是否有人知道保持密钥安全的方法。 我曾想过在node.js服务器上运行我的网站。 唯一的要求是我应该能够在Amazon Web服务上部署它。 是否有意义?

限制npm依赖项模块对require(isolation)的使用

有没有办法通过限制使用require来require一个npm模块? 例如,一个应用程序可以提供一个系统来扩展它的一些function,通过提供一个npm模块来完成一个给定的合同( 比如说它用一个方法process导出一个类 )。 该模块,如果知道require它的应用程序的源代码可能require('db').connect().flush()或类似的东西。 这个应用程序扩展可能require从它的主机的任何修改它。 npm是否允许限制/安全的方法来处理这种情况(可能通过使用进程)? 谢谢。

对于可以通过HTTP传递给JavaScript服务器的数组大小,有哪些安全考虑因素?

我正在处理Node.js中的库qs ,它使您可以对查询string进行string化和分析。 例如,如果我想发送一个包含项目的数组的查询,我会做qs.stringify({ items: [1,2,3] }) ,这将作为我的查询string发送: http://example.com/route?items[0]=1&items[1]=2&items[2]=3 (编码的URI将是项目%5B0%5D%3D1%26项目%5B1%5D%3D2%26项目%5B2%5D%3D3) 当我在服务器上执行qs.parse(url)时,我会返回原始对象: let query = qs.parse(url) // => { items: [1,2,3] } 但是,根据文档, qs数组的默认大小限制为20。 qs也将数组中的指定索引限制为最大索引值20.任何索引大于20的数组成员将被转换为以索引为键的对象 这意味着如果数组中有超过20个项目, qs.parse会给我一个像这样的对象(而不是我期望的数组): { items: { '0': 1, '1': 2 …plus 19 more items } } 我可以通过设置一个参数来覆盖这个行为,例如: qs.parse(url, { arrayLimit: 1000 }) ,这将允许最大数组大小为1000。 这样就可以把一个1001个数组变成一个普通的旧的JavaScript对象。 根据这个github问题 ,限制可能是“安全考虑”( 在这个其他github问题相同)。 我的问题: 如果20的默认限制是为了帮助减轻DoS攻击, 那么如何将一个超过20个项目的数组变成一个普通的旧JavaScript对象应该有所帮助? (对象是否需要更less的内存或什么?) 如果上述情况属实,即使数组限制为20,那么攻击者是否可以发送更多的请求并获得相同的DoS效果呢? (需要发送的请求的数量会随着数组大小的限制线性减less,我想…所以我想单个请求的“影响”或负载会更低)

多个资源服务器的OAuth2stream

正如我试图为内部自定义用户库系统创build一个统一的OAuth2系统一个问题引起我无法find适合的文档: 在我们的微服务应用程序/服务结构中,我们有几个(web)应用程序客户机,它们通常具有单独的应用程序服务器或包含客户机中的所有逻辑。 他们正试图访问微服务networking。 有些API是直接访问的,有些是通过其他服务访问的。 为了保护这些资源,我设想了一个类似于以下的系统: 该图主要面向Node.Js + Passport重型结构,但现实生活中正在使用其他技术。 这里客户端/应用程序服务器将直接使用OAuth2授权服务器来处理完整的login和授权过程。 这将导致客户机/应用程序服务器拥有有效的访问令牌。 使用此访问令牌,然后可以通过在请求的授权标头中将令牌用作承载令牌来访问API。 然后API可以通过validation授权服务器来validation该令牌。 之后,它也可以临时保存令牌,以便不在每个请求上validation令牌,而是使用TTL来存储令牌。 当一个服务在内部访问另一个服务时,它应该只传递Access令牌,以便下一个服务可以再次validation它。 这是这种情况下的首选stream程/设置,还是我在这里犯了一个错误?