Tag: 安全

基于REST / Web的身份validation即服务的可能性?

我使用Express开发了一个基于REST的服务,最初开始自己实现身份validation。 简单的用户名/密码authentication在哪里 密码使用BCryptencryption 用户信息+散列密码存储在mongoDB中 密码validation检查完成。 authentication令牌(有限的TTL)被生成/validation 我对Node.JS有一些了解,但还不足以让我感觉舒服一点,就是推出我自己的身份validation(login/注册)机制。 出于这个原因,我想用别的东西取代我的内部机制。 有东西被certificate,可扩展,可插拔和易于使用。 考虑到基于Node.JS的安全网站/ REST API的数量,我确信有人或公司必须提供的开箱即用的解决scheme可以使服务实现者快速启动并运行,而无需担心安全性/用户方面。 我正在寻找一个比passport或者everyauth图书馆even higher level of abstraction 。 一些提供开箱即用的function,能够满足我的要求,包括: 提供login页面/注册页面/configuration文件页面 不同的authentication模块(谷歌,脸谱,Github,….) 在数据存储(mongoDB)中存储用户信息(如果需要,需要+证书)。 记住我 忘记密码/重置密码 所以这里的问题是: 是否有可用的提供比护照/ everyauth / …更高的抽象级别的解决scheme? 如果有的话,你会推荐一些这种现成的解决scheme吗? 我是否应该忘记outsourcing my user authentication的概念,并开始查看护照和outsourcing my user authentication ,并开始使用这些库实现我的要求? 是否可以专注于我的业务逻辑,而不用担心有关用户身份validation的任何方面(写入login/注册页面,实现忘记密码/重置密码stream程,将用户信息存储在数据库中)。

如何安全地使用Passport与Node.js和MongoDB?

所以我得到了Passport与Node.js和MongoDB的会话pipe理,这当然方便地提供访问请求头中的user对象。 但是,至less对我而言,Passport将这个对象设置为MongoDB的整个帐户文档。 对于我创build的模式,这包括用户的一切 – 电子邮件,名称,哈希和盐渍密码等。所以我有两个关于这个问题。 首先,在服务器和客户端之间来回发送所有这些信息是否真的很安全? 当然,它是通过SSL发送的,密码被哈希和腌制,但所有的用户信息仍然在那里。 我的模式需求用户信息(不需要身份validation的个人信息)保存在不同的MongoDB文档中? 即使我这样做,哈希密码仍然会来回传递。 是否假设SSL防止数据被窃听? 这似乎是假设某人假设已经把所有发送到我的应用程序的头文件都吸走了,他们可以重新创build用户数据库并执行彩虹表攻击。 其次,在服务器端,我(天真的)一直在使用请求标头用户名元素( req.user.username )来确定哪个用户被连接和authentication。 但是,似乎如果用户只是将其标题更改为不同的用户名,我的代码将允许他们伪装成不同的用户。 那么我应该通过其他方式来validation请求的身份,而不是仅仅使用纯文本的用户名呢? 还是我完全不知道如何存储,生成和传递这些头,这实际上不是一个安全问题? 如果是这样的话 – 有人可以详细介绍一下如何从Passport中创build这些头文件吗?

encryption通道的重新encryption会在Node.js中返回不同的encryption结果

我现在已经有好几个小时了,似乎在这里或其他地方找不到类似的问题。 在拼命寻找小的错别字或其他错误后,我转向你。 我第一次实现encryption,到目前为止,所有工作都已经成功完成,我使用encryption库和Node.js一起对密码进行哈希和encryption。 到目前为止,这工作得很好,但是当我尝试做迭代rehashing时,我得不到相同的密钥。 让我告诉你我的代码: 从app.get方法: var salt = crypto.randomBytes(128); var hash = crypto.createHash('sha256'); hash.update(salt.toString('base64') + request.query.password); var hashedKey = hash.digest('base64'); console.log("original pass is: " + hashedKey) var stretchedKey = crypto.pbkdf2Sync(hashedKey, salt, 1000, 128); var promise = db.User.create({ username: request.query.username.toLowerCase(), email: request.query.email.toLowerCase(), encryptedPassword: stretchedKey.toString('base64'), randomSalt: salt.toString('base64'), premium: true }); 正如你可以在上面看到的,我为新用户生成一个随机salt,将密码附加到它并散列它。 之后,我尝试拉伸它,然后将其保存在数据库中 以下是来自authentication方法的代码: var hash = […]

从安全的angular度来看,Python与NodeJS的Web应用程序

我打算构build一个安全性至关重要的Web应用程序,并且需要决定在后端使用哪种技术。 我正在考虑的选项是Python(大部分是Django框架)和NodeJS(可能带有express.js)。 从安全的angular度来看,我想知道使用这些技术的优点和缺点。

如何检查文件名string不是一个文件path

我在节点js上编写一个服务器应用程序。 操作系统是Linux。 我收到的文件名为一个纯string,所以可以被黑客入侵。 然后我连接文件名string和pathstring是这样的: filepath = '/home/www/upload/' + filename; 我想保护一个上传脚本,除了上传文件夹[或者它的子文件夹:可选],使用我的应用程序逻辑,而不是Linux写入任何地方。 我目前天真的解决scheme是阻止有..子string的文件名。 我不在乎是否有人有两个点的文件名。 当然,在安全方面,我必须向观众征求意见:任何事情都可能出错?

保护node.js restful API

我想要确保一个安静的Api,并且尽力保持它尽可能简单,以及无国籍。 什么是存储,生成和validationAPI密钥的最佳方式? 我正在考虑用node-uuid生成密钥,将它们存储在redis中,然后用passport-apikeys进行身份validation。 这会工作吗? 还是有我缺less的另一个最佳解决scheme。 我一直在阅读这个好消息,但是很多资源都缺less实际的实现,就像这篇文章一样

保护与PHP应用程序集成的Node.js应用程序

我有一个现有的第三方PHP Web应用程序(ELGG),我想扩展一个Node.js应用程序。 用户在PHP应用程序中通过检查他们提供的凭据来对MySQL数据库进行身份validation。 如何保护对Node.js应用程序的访问而不必重写Node中的validation代码? 有没有办法让用户只有login到PHP应用程序才能访问Node.js应用程序?

validationWebSocket连接源

我目前正在开发一个谷歌浏览器扩展插件,通过WebSockets连接到我们的服务器,但是很害怕有人能够用假的数据来炸毁我们的服务器,所以我们希望实现一个安全措施,以防止其他来源连接到服务器。 有什么方法可以将安全措施集成到应用程序和服务器中,以validation来自Google Chrome扩展程序的连接? 在进行这种应用程序时,我们是否还有其他的事情需要注意? 任何意见表示赞赏。

获取SSL证书与我的Node.js应用程序有什么关系?

我有一个Node.js应用程序在我的Linode服务器上运行,我的服务器将需要SSL。 我知道我需要购买一个,像这样: http : //www.namecheap.com/ssl-certificates/comodo/essential-ssl-certificate.aspx 我知道我需要得到一个专用的IP地址,并按照这些指示: http : //library.linode.com/security/ssl-certificates/commercial 我不明白的是我的Node应用程序将如何知道这个SSL证书? 我的Node应用程序是否关心?

通过express js和bodyParser来保护file upload器

我谷歌了很多,find如何保护file upload在快递js,最后我开发下面的代码来做到这一点。 app.use(express.json()); app.use(express.urlencoded()); app.post('/',express.bodyParser({ keepExtensions: true, uploadDir: __dirname + '/faxFiles', limit: '20mb' }),function(req,res){ checkFile(req.files.faxFile); }); 正如你所看到的,我可以限制文件大小,并在bodyParser中设置uploadDir,现在我需要允许用户只上传图片和pdf,我使用的方式是包含以下代码的checkFile函数。 var fs = require('fs'); var checkFile = function(faxFile){ if (faxFile.type != "image/jpeg" || faxFile.type != "application/pdf" || faxFile.type != "image/gif"){ fs.unlink(faxFile.path, function(err){ }); } } 但我认为这不是最好的方式,有没有其他的方法来做到这一点?比如在bodyParser构造函数中设置文件扩展名?