Tag: 安全

nodejs:encryption/解密的节点模块?

如果访问者来自特定的其他网站(B),我希望网站(A)只能工作。 最初,我想到了使用document.referrer ,但显然它可以很容易地伪造。 猜测,我没有别的select,只能将网站A的密钥传递给网站B. 这两个网站都在node服务器上运行。 我已经传递了两个参数(比如param1 n param2 ),所以认为这个关键字以及两个站点之间共享的一些常见string(认为称为private key )会在站点A上产生某种encryption的代码,并将其添加为第三个参数并发送到站点B. 在站点B中,我将解密第三个参数(使用private key )并检查它是否与param1和param2匹配,然后允许通过,否则返回401 。 我从来没有做过这样的事(安全相关的东西),这种方法是正确的吗? 有没有节点模块已经提供这种encryption和解密? 最后,有没有build立私钥的build议?

expressjs中附加的请求可以被篡改吗?

在express.js中,我们经常将对象附加到中间件中的req对象,例如req.myObject。 什么阻止发送包含req.myObject的http请求的用户已设置为某个值? 例如,我可以使用req.myObject作为身份validation的一部分。 当发送请求的时候,用户是否可以设置req.myObject = true? 如果在某些路由上设置req.myObject而不是其他设备,但检查req.myObject的中间件是跨路由重新使用的,则可能存在问题。

带Meteor的Filepicker.io:如何返回实际的资产,而不是指向资产的链接

我正在使用filepicker.io与Meteor应用程序,并正在为我的应用程序的安全性工作。 Filepicker为创build和签署策略提供支持,但在Meteor的服务器端,我觉得为每个请求文件的用户创build过期的策略是过度的。 我想要做的是提供给用户间接链接到一个文件。 服务器用服务器端路由(铁路由器)拦截这个请求,然后服务器通过带有关于所述文件的元数据的Files集合来检查用户是否具有该文件的许可。 就像我现在所做的那样,如果用户有访问权限,我会为他们提供一个带有签名和策略的文件链接作为该链接的参数。 相反,我宁愿只返回图像或文件资产,根本没有链接。 例如,服务器端将通过只有服务器知道的链接访问文件或映像,但是服务器会将该文件或映像stream式传输到客户端,而不共享到文件的实际链接。 预期的代码看起来像下面这样,我最终不知道该怎么做: @route "file", path: "/file/:_id" where: "server" action: -> if @request.cookies.meteor_login_token user = Meteor.users.findOne( {"services.resume.loginTokens.hashedToken": Accounts._hashLoginToken(@request.cookies.meteor_login_token)} ) if user # the files collection has metadata about each file # these files are uploaded through filepicker # this include file.url which is the actual link file = share.Files.findOne( {_id: […]

mongodb:encryption字段上的唯一索引

我正在用mongodbencryptionSSN。 但是,我需要使用SSN作为唯一的标识符,以确保具有该SSN的人不会插入重复。 所以基本上我想在保存之前检查重复的SSN。 不过,我不确定是否可以在使用AESfunctionencryption此字段后执行此操作。 如果我encryption并签名与AES相同的2个string,输出是否仍然相同? 如果不是,那么将会是一个好的select? 我曾经考虑过对SSN进行哈希处理,但SSN似乎有这么小的熵(它的9位数字,其中有些是可以预测的)。 如果我盐,我失去了在这个领域分配一个独特的索引的能力,除非我使用一个静态的盐,这并没有多大的作用。 加成 我将使用node.jsencryption核心模块在应用程序级进行encryption。

用户是否可以添加/更改“请求”对象的属性(并导致安全漏洞)?

我对Node.js很陌生,写了一些类似的代码 request.validToken = true; 一旦我确认请求中的令牌有效。 如果validToken已经是真的,那么我会缩短检查时间。 但是我想知道的是,请求是否可以被攻击者编辑,使这个字段在原始请求中存在,因此允许他们绕过安全检查? 如果是的话,最好的做法是什么?

为api访问生成安全令牌

我需要生成一个安全令牌访问一个API。 用户将auth和成功auth我需要生成一个令牌。 重要提示:我有一个要求,我需要能够随时撤销用户对api的访问权限。 选项1: 我可以生成一个随机string,并将其用作令牌。 将令牌和用户存储在数据库中。 当用户通过令牌时,我检查数据库的令牌,如果它存在去… 这使我能够通过删除用户令牌来撤销访问。 如果他们试图重新login,令牌消失,他们将无法访问。 我也可以根据时间从数据库中删除令牌。 我正在使用nodejs并已经看到这个: 在Node.js中安全随机令牌 require('crypto').randomBytes(48, function(ex, buf) { var token = buf.toString('hex'); }); 这真的很安全,因为有人不能猜测我生成的令牌吗? 选项2: 使用像jwt的东西。 在身份validation用用户ID生成一个jwt。 当用户通过一个请求的jwt时,我确信jwt是有效的,如果是这样的话,抓取用户ID和好去。 这看起来更安全,因为jwt可以防止篡改。 问题是撤销对API的访问。 我可以存储所有jwts(直到它们到期)在数据库中,请求validation的jwt,并确保它在我的分贝。 如果我想撤销,我可以从数据库中删除它。 Con在这里是我现在有validation的jwt和查找确保其在我的分贝的开销。 有使用jwt撤销访问的好方法吗?

最近开始使用socket.io – 在向公众发布网站之前应该采取哪些安全措施?

套接字服务器不处理用户的任何login或任何input,它只是在一个mysql数据库提供给用户的信息。 没有使用socket.io之前,我不知道什么东西,我应该看看用它来开发。 例如有人可以访问.js“服务器”的内容? 因为我的包含一些敏感的数据,如SQL凭据。

Sails JS – 删除现有的JWT

我跟着这个教程https://ericswann.wordpress.com/2015/04/24/nozus-js-1-intro-to-sails-with-passport-and-jwt-json-web-token-auth/和我它工作得很好。 唯一遗漏的是注销function。 我读过,我可以从客户端删除令牌,但我认为这也是一个更好的办法也将其从服务器中删除。 这是我的AuthController.js var passport = require('passport'); //Triggers when user authenticates via passport function _onPassportAuth(req, res, error, user, info) { if (error) return res.serverError(error); if (!user) return res.unauthorized(null, info && info.code, info && info.message); return res.ok({ // TODO: replace with new type of cipher service token: HashService.createToken(user), user: user }); } module.exports = { […]

使用令牌保护REST API的标准方式是什么?

这是我想要做的: 我有使用REST API提供数据的服务器,但是我只希望我的移动客户端(APP)能够访问它。 我想使用一个类似的系统,用户可以创build一个电子邮件/密码login。之后,用户可以使用API​​访问某些数据。 OAuth2是正确的使用? 或者我只是尝试创build我自己的协议,并为用户生成一个令牌。 并让用户在所有API请求上附加一个令牌。 (这是我困惑的地方,我可以使用OAuth吗?或者甚至是需要的?如果不是,有一个标准的HTTP方式来做到这一点?我也想使用刷新令牌,但我不知道如果我应该创build我自己的方法。

节点js的 – 如何安全地传递令牌从http获取请求到html页面?

我正在实施自己的自定义密码重置,发送一个电子邮件,用户正在页面重置密码。 到目前为止,我已经生成了一个独特的令牌,放在一个http获取请求链接中,并通过电子邮件发送给用户。 当用户点击链接时(例如mywebsite.com/verifypasswordreset?id=96rZyAWLTu ) 我有一个明确的路线获取令牌: //Verify Password Reset app.get('/verifypasswordreset', function(req, res) { Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, { success: function(user) { res.sendFile(path.join(__dirname + '/website/resetpassword.html')); }, error: function(error) { res.sendFile(path.join(__dirname + '/website/404.html')); } }); }); 然后,我运行一个Parse云代码函数validation如果令牌存在,如果是的话,它通过发送包含重置密码的表单的HTML响应。 ( resetpassword.html ) 此时, resetpassword.html页面的url仍然包含embedded的令牌( mywebsite.com/verifypasswordreset?id=96rZyAWLTu ),但是,一旦用户提交表单,它会执行一个http post并发布新的密码,离开令牌后面的链接,因此我不知道哪个令牌与密码重置相关联? //Reset Password app.post('/resetpassword', function(req, res) { res.send('You sent the password "' + […]