Tag: 安全

从浏览器中隐藏服务器端技术信息

我已经安装了用于Firefox浏览器的Wappalyzer插件。 当我访问我的Web应用程序时,它显示使用的服务器端技术。 在这种情况下,它显示以下信息: Node.js(编程语言) Express(Web框架) 连接(Web框架) 为了安全起见,我需要以某种方式隐藏浏览器/客户端的这些信息。 那么,有没有人可以说明我在node.js中如何做到这一点? 是否有任何configuration设置可以更改,以便它们不会向浏览器/客户端发送不必要的信息。 更新: 我使用下面的代码来防止Express框架发送'x-powered-by'标题: app.disable('x-powered-by'); 即使在更改之后,服务器端堆栈信息也正在显示。 谢谢。

socket.io是否仅向用户广播?

请检查下面的服务器端代码。 假设在某个瞬间data.id为abc77,那么无论是否引发了socket.io事件,每个连接的浏览器都会收到套接字消息“my_model / abc77:update”,还是只接收到订阅此特定消息的套接字消息,不? 为了澄清,使用一个实际的应用程序:即使他的应用程序的实例没有订阅,黑客能够使用浏览器的开发者控制台接收消息“my_model / abc77:update”,不知道data.id是abc77? var io = require('socket.io'); io.listen ( server ).sockets.on ( 'connection', function ( socket ) { socket.on('my_model:update', function(data, callback) { database.save(data, function(err){ if (!err) { callback(data); socket.broadcast.emit('my_model/'+data.id+':update'); } }); }); });

在Node.js Express日志文件中发现奇怪的http请求

我的第一个基于Node.js的公共网站(和Express)在几周前就已经公开发表了。 我经常检查服务器日志,有时还有一些奇怪的logging。 这里有些例子: – – – [Sat, 19 Oct 2013 08:44:38 GMT] "GET http://www.google.com/ HTTP/1.0" 200 3539 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" 222.205.7.245 – – [Sat, 19 Oct 2013 19:54:57 GMT] "GET http://www.wikipedia.org/ HTTP/1.1" 200 3539 "-" "Mozilla/5.0 (compatible; MSIE 5.01; Win2000)" 223.94.178.192 – – [Sun, 20 Oct 2013 06:04:23 GMT] "GET […]

使用Express进行处理的最佳实践

我正在写一个实现用户pipe理系统的网站,我不知道有什么关于表单处理的最佳实践,我不得不考虑。 尤其是性能,安全性,SEO和用户体验对我来说非常重要。 当我正在处理这个问题时,我偶然发现了一些问题,并没有find一个完整的节点/快速代码片断,我可以在这里找出所有我下面的问题。 用例:有人将更新他的个人资料的生日。 现在我正在对同一个URL进行一个POST请求来处理该页面上的表单,POST请求将以302redirect到相同的URL进行响应。 关于表单处理的一般问题: 我应该做一个POST请求+ 302redirect的表单处理,而不是像AJAX请求其他东西? 我应该如何处理无效的FORM请求(例如,无效login或注册期间已经使用的电子邮件地址)? expression关于表单处理的具体问题: 我之前插入任何东西,我想我需要清理和validation服务器端的所有表单域。 你会怎么做? 我阅读了有关CSRF的一些内容,但是我从来没有实施CSRF保护。 我也很高兴在代码片段中看到这一点 使用Express处理表单时是否需要处理任何其他可能的漏洞? 示例HTML /帕格: form#profile(method='POST', action='/settings/profile') input#profile-real-name.validate(type='text', name='profileRealName', value=profile.name) label(for='profile-real-name') Name textarea#profile-bio.materialize-textarea(placeholder='Tell a little about yourself', name='profileBio') | #{profile.bio} label(for='profile-bio') About input#profile-url.validate(type='url', name='profileUrl', value=profile.bio) label(for='profile-url') URL input#profile-location.validate(type='text', name='profileLocation', value=profile.location) label(for='profile-location') Location .form-action-buttons.right-align a.btn.grey(href='' onclick='resetForm()') Reset button.btn.waves-effect.waves-light(type='submit') 示例路由处理程序: router.get('/settings/profile', isLoggedIn, profile) router.post('/settings/profile', isLoggedIn, […]

如何防止在Node.js中执行恶意* .js脚本

我使用Node.js来创buildWeb服务。 在实现中,我消耗了许多通过npm安装的第三方模块。 如果在所使用的模块中存在恶意* .js脚本,则存在安全问题。 例如,恶意代码可能会删除我的所有磁盘文件,或者静默收集秘密数据。 我有几个关于这个问题。 如何检测模块中是否存在安全问题? 我应该怎么做才能防止在Node.js中执行恶意* .js脚本? 如果您可以分享任何经验来构buildnode.js服务,我将非常感激。 谢谢,杰弗里

请求反馈:使用客户端复制(pouchdb)为多个用户/帐户设置Couchdb

在进入开发阶段之前,我希望获得关于我正在考虑的改变的反馈意见,从mongo移动到沙发。 基本上我有一个webapp,用来帮助组织用户活动(todolist,日历,笔记,日记)。 它目前使用mongodb,但我正在考虑将其移动到沙发上,主要是由于沙发的复制能力和clientdb交互(pouchdb)。 我在浏览器上使用了localstorage,在mongo的支持下有一个类似的本地安装,但是我正在寻找一个更成熟的解决scheme。 由于couchdb与mongodb不同,我想每个用户都应该有自己的沙发数据库,​​他们的文档是我的每个应用程序组件。 基本上我必须通过本地数据库复制以及安全性来将所有事情都提高一级。 我有3个问题。 1)我认为沙发没有文档级别的安全/authentication,对吗? (因此,我把每个用户的资产移动到他们自己的数据库,好主意?) 2)我的计划是有用户login到网站,然后我的后端nodejs代码validation他们,并发送一些auth /会话令牌。 然后,客户端上的javascript使用其本地pouchdb数据来设置自身,并将复制请求直接发送到couchdb服务器(使用从服务器端进程获得的auth令牌)。 他们应该只能访问他们的数据库,因为我可以做每个数据库身份validation访问(正确?)你怎么看待这个设置? 它应该工作? 3)关于couchdb服务提供商,为什么他们的沙发版本差异如此之大? IE,happycouch,1.6.1,虹膜1.5,cloudant,1.0.2? 而且我也听说有关couchdb 2.0即将推出…我想要使用cloudant,但1.0.2是从1.6或1.5以上的版本,如果我没有做任何异国情调,这有什么关系? 奖金问题:从上一个问题继续,你知道任何服务,主机node.js和本地实例的couchdb可用? 我想用我的后端服务器代码作为代理,但不以牺牲另一个networking跳跃为代价。 保罗,非常感谢你的反馈

Node.JS在运行时切换用户

以root身份运行的Node.JS程序是否有可能在运行时降级其权限? 这是它首先要做的事情之一,目的当然是为了限制可能造成的损害,万一在这个过程中出现漏洞或不可信的代码。 另外,有没有一种方法,以root身份运行的Node.JS进程启动一个非root的单独进程? (最好不要在中间添加一层,比如sudo)

使用nodejs应用程序上的刷新和访问令牌了解身份validationstream程

我知道已经有很多关于Oauth,Oauth2,JWT等的post了。我看了很多,而且比以前更加困惑,所以我正在寻求一些解释。 我会提出我对这个问题的看法,希望有人能告诉我,如果我的实施是足够安全的,或者我做错了什么,以及如何改进。 我正在build立一个API Rest服务器,为我的用户提供资源。 假设这是一个银行应用程序,用户可以存款,取款和转账。 我正在使用nodejs,hapijs,jsonwebtokens和bcrypt为我的服务器。 我想实现两个令牌authenticationstream程(Oauth2)。 这是我这样做的方式: 用户通过提供一些凭据(用户名和密码)login到auth服务器。 服务器validation用户的凭证,如果它们是有效的,它将授予对用户的访问并返回刷新令牌和访问令牌。 这些令牌被保存到浏览器或移动设备的本地存储器中。 access token : 被签名为jsonwebtoken。 包含发布date,过期date(5分钟),用户数据(id,用户名)。 refresh token : 被签名为jsonwebtoken并用bcryptencryption。 包含一个唯一标识符 可能包含到期date 保存在数据库中。 只要access token有效,即没有过期并且包含有效的用户数据,资源服务器就为用户提供所请求的资源。 当access token不再有效时,auth服务器请求客户端提供refresh token ,以便发出新的access token 服务器从用户接收refresh token ,对其进行解密,将其与数据库中的refresh token进行比较,检查是否已被吊销,并检查其唯一标识符。 如果refresh token通过所有testing,则服务器向客户端发出一个新的access token 。 如果refresh token一次testing失败,则服务器请求用户重新进行身份validation。 注:我正在尝试避免使用Cookie。 问题: 如果用户能够窃取access token ,我想它也可以窃取refresh token 。 那么,我怎样才能使refresh token更安全呢? Oauth2stream程的观点是否正确? 我可以改进什么? 我错过了什么吗?

在Angular2中保护API密钥

我现在一直在Google上search。 可能是我错过了正确的关键字。 我有以下设置: ExpressJS API(在端口3000上使用pm2运行) Angular2应用程序 – 通过nginx提供 两者都在同一台服务器上运行。 调用api(mydomain / api /)代理127.0.0.1:3000 对于需要授权的api调用,我将使用JWT和用户authentication。 我想要实现的是,我为我的angular2应用程序生成一个令牌,允许/需要进行公共呼叫(例如产品清单)。 当然,我不希望别人通过直接的API调用(盗用令牌)来获取我的产品和价格。 任何帮助赞赏。

什么使string/令牌密码安全?

如果您需要生成一个string/令牌来validation将来的请求(例如API密钥,电子邮件确认URL等),应考虑哪些因素? 尤其是 是什么让string“安全”/“很难猜到”? 如何测量/估计“安全量”? 那里的主要标准是什么? 一个实际的例子 我们从NodeJS中获取这两个输出string。 string1 (通过节点密码 ) var crypto = require('crypto'); crypto.randomBytes(48, function (ex, buf) { console.log(buf.toString('hex')); }); string2 (通过节点UUID ) var uuid = require('node-uuid'); console.log(uuid.v4()); 基于上述概念,哪一个更安全,为什么? 另外,请随时提出有关这个主题的任何好的介绍材料,因为我不容易find关于这个在线的文章。