Tag: 安全性

NodeJS和AngularJS – 使用客户端证书authentication来保护REST API

我目前正在努力使REST Api服务器(NodeJS + Express + Mongoose)安全,除了我的客户端应用程序(AngularJS 1.6)和我的pipe理应用程序(基于AngularJS 1.6)之外,没有人可以访问路由并获取或放置数据到我的数据库。 所有内容都使用有效的SSL证书在https上运行。 我主要想到两种方法: 共享密钥在特定路由需要“访问密钥” 客户端证书authentication 我没有去。 2,因为在我的想法这是最安全的(请纠正,如果我错了:)) 所以我设置我的API服务器在https上运行,并请求一个有效的客户端证书: var options = { ca: fs.readFileSync(__dirname + "/cert/server.ca"), key: fs.readFileSync(__dirname + "/cert/server.key"), cert: fs.readFileSync(__dirname + "/cert/server.crt"), requestCert: true, rejectUnauthorized: false }; https.createServer(options, app) .listen(PORT, () => { console.log(`up and running @: ${os.hostname()} on port: ${PORT}`); console.log(`enviroment: ${process.env.NODE_ENV}`); }); 我通过以下方式直接在应用程序中处理未经使用的用户的拒绝: if […]

访问一个NodeJSvariables?

为了安全起见,有没有办法在服务器和/或客户端JavaScript中访问和打印控制台(或嗅探)variables? 你会认为安全的存储variables的密码来encryption帐户敏感数据(然后混淆.js文件)?

我想在S3中存储用户的个人资料图像,并将其显示在客户端 – 将S3对象展示给移动客户端的最佳做法是什么?

所以我有一个Android聊天应用程序,用户可以创build个人资料照片。 这些照片被发送到我的节点JS后端,我上传到我的AWS S3存储桶。 我将关键字存储在我的SQL数据库下的“ user ”表中的“ image_path ”列中。 现在,当用户访问应用中的多个其他用户的聊天室时,他们应该能够看到其他用户的个人资料照片。 目前,在join聊天室时,所有用户及其“ image_path ”列表被返回给客户端。 我正在考虑如何以有效的方式向用户展示个人资料图片,而不会违反最佳安全做法。 我正在考虑的第一个解决scheme如下: 使S3桶读取公共 客户端现在可以通过“ bucket-name.s3.amazonaws.com/image_path ”请求直接访问其他用户的个人资料图片。 我对这个方法的担心是S3显示下面的警告,这让我觉得这种方法有些严重的错误: You have provided public access to this bucket. We highly recommend that you never grant any kind of public access to your S3 bucket. 我正在考虑的第二个解决scheme是: 当在聊天室中检索用户时,遍历每个用户,从每个用户的“ image_path ”创build一个预先签名的URL,在X时间后过期,然后将其返回给客户端 我看到了一些问题。 首先,如果用户在聊天室中停留的时间长于预先签名的url的到期时间,该怎么办? 实现这个刷新逻辑听起来像头痛。 而且,生成所有预先签名的URL似乎会在后端花费很长时间。 推荐哪两种方法? 还有其他的select我应该考虑吗? 更新:所以目前我正在诉诸第一个方法,它工作正常 – […]

用多个客户端testing节点应用程序

我是服务器端编程的新手。 所以这个问题可能看起来很基础。 我写了一个节点应用程序,我想通过多个客户端进行testing。 我怎样才能运行我的本地networking应用程序给其他客户端的本地IP,他们可以访问应用程序? 我试图听192.168.10.10的IP,但似乎节点没有这样做的权限。 我怎样才能做到这一点? 我在Mac OSX上

Firefox中的Websockets不能使用多个HTTPS页面

我有一个websocket客户端 – 服务器应用程序。 这是客户的简化代码: const HOST = "wss://localhost:8000"; const SUB_PROTOCOL= "sub-protocol"; var websocket = new WebSocket(HOST, SUB_PROTOCOL); websocket.onopen = function(evt) { … }; websocket.onclose = function(evt) { … }; websocket.onerror = function(evt) { … }; websocket.onmessage = function(evt) { … }; 这里的服务器: const PORT = 8000; const SUBPROTOCOL = 'sub-protocol'; var WebSocketServer = require('websocket').server; var […]

Node.js文件安全

我即将开始创build一个网站,该网站从客户端(不涉及用户帐户)获取表单input(下拉菜单,辐射盒等)的值,并执行这些值的计算。 这些计算是相当敏感的,我知道客户端JavaScript不能安全。 是否有可能拉这些客户端的值,并运行计算服务器端node.js? 如果是这样,那有多安全? 还有什么其他的预防措施可以采取? 如果这是不可能的或安全的,还有什么其他解决scheme?

ACME – 使用SAN获取子域的证书

我对即将到来的自动证书pipe理环境(ACME)感兴趣。 我下载了演示,并试用了我的主域名。 我仍然有一个问题:使用常规authentication过程,我能够获得与SAN的证书,所以我可以将其设置在我的服务器(Node.js),并为所有子域(这是虚拟主机)提供服务。 问题是, 目前的草案说明如下: 关键授权 可以重复该过程以将多个标识符关联到密钥对(例如,请求具有多个标识符的证书) 这是否意味着即使它们是同一主域(“主标识符”)的一部分,我也需要为每个子域颁发由相同密钥生成的新证书? 谢谢你的答案。

用于客户端 – 服务器通信和安全的api-key

我需要一些build议。 我想build立一个JS应用程序,将在客户端浏览器上运行,并与我的服务器与Ajax通信。 问题是我想给这个客户端一些API密钥,所以我可以在我的服务器上授权。 安全明智的问题,因为只要这个关键是通过ajax调用发送,任何人都可以复制此调用。 我不想问客户端创build一些代理服务器,并“请求”。 我希望它是直接从客户端到我的服务器。 除了通过他的IP或域来validation客户,最佳做法是什么?

保护自己免受nodejs中的sql注入的最好方法

这是设置。 我使用ajax发送一个POST,在这里我将过程的参数发送到nodejs服务器。 在这个特定的情况下,用户名和代码。 此POST将request.get调用到执行使用这两个参数的过程的Web服务。 例如 app.post('url/:username/:code', function(req,res,next){ var procedure = 'EXECUTE procedureName'+req.params.code; request.get('myWslink/myService.asmx/service? callback=&userName='+req.params.username+'&procedureName='+procedure, function(){}); }); 前端用户无法看到我的web服务url,我的request.get url或我的过程名称,但他仍然可以看到正在发送的参数(用户名,代码),他可以更改这些参数,使他执行一个他不应该执行的过程。 他也可以多次调用一个POST请求,如果是一个插入过程,用一堆垃圾填充数据库。 保护自己免受这些攻击的最好办法是什么?

ReST API:我应该将访问令牌与数据库中的用户关联起来吗?

我正在nodeJS服务器上构build安全的ReST API,以便我的Android应用程序可以访问我网站上的数据。 根据阅读一些其他职位,我已经明白,我应该使用访问令牌。 所以我的想法是做到以下几点: 1)当用户loginAndroid应用程序时,应用程序向我的网站上的/api/login发送一个请求,提供用户名和密码(这当然需要通过SSL来防止窃听)。 2)我的服务器validation用户名+密码是否匹配,如果是,则用访问令牌进行响应。 3)应用程序使用这个访问令牌来完成对我的API的所有后续请求。 我的问题是我应该存储访问令牌在我的服务器上的数据库? 具体而言,我是否应该存储访问令牌与特定用户关联的事实? 我看过的大多数教程都没有这样做,但是如果我不这样做,那么用这个访问令牌来修改或者查看另一个用户的数据是什么呢? 我不需要将访问令牌与数据库中的用户配对?