为多个前端域设置安全的后端NodeJS服务器

时间:2014-08-05 21:27:51

标签: node.js security web nginx vps

我最近在为我运行的所有网站创建后端方面进行了大量研究,几天前我租用了运行Debian的VPS。

长期来说,我想将它用作某些Web应用程序的后端。但是,这些客户端JavaScript应用程序在完全不同的域上运行,而不是VPS域。我正在考虑在VPS上运行各种后端应用程序作为守护进程。例如,守护进程1是一个python应用程序,守护进程2和3是节点js等。我不知道我最终可能创建了多少这些。

目前,我只在VPS上运行一个NodeJS应用程序。我想在它上面实现两个方法,监听一些任意端口,例如端口4000:

  • / GetSomeData(GET请求) - 接受一些参数并返回一些JSON
  • / AddSomeData(POST请求) - 需要一些参数并添加到后端MySQL db

这些方法只能在一个与VPS域不同的特定域(称为DomainA)中使用。

现在有一个我觉得我会反对的问题是CORS政策。听起来我需要为Access-Control-Allow-Origin包含一个响应头:DomainA。问题是,在将来,我可能想要添加另一个可接受的请求者域,例如DomainB。那我该怎么办?我是否需要验证传入的request.connection.remoteAddress,如果它与DomainA / DomainB匹配,请写入相应的Access-Control-Allow-Origin?

截至约5分钟前发布此问题之前,我从W3C site发现了这个问题:

  

希望自己与多个Origin共享但不能统一响应" *"实际上必须动态生成Access-Control-Allow-Origin标头,以响应他们希望允许的每个请求。因此,此类资源的作者应发送Vary:Origin HTTP标头或提供其他适当的控制指令以防止缓存此类响应,如果跨源重用,则可能不准确。

即使我这样做,我也有点担心安全问题。根据设计,我的DomainA网站上的任何人都可以使用该网络应用程序,您不必是注册用户。我担心攻击者欺骗他们的IP地址等于DomainA。看起来对于GetSomeData请求并不重要,因为我的NodeJS会将数据发送回DaemonA而不是攻击者。但是,如果攻击者将脚本运行到AddSomeData一千次,会发生什么?我不希望我的sql表被恶意请求填满。

另一方面,我一直在阅读nginx和虚拟主机,以及如何根据传入的域名使用它们来建立不同的路由,但我不会相信< / em>我需要这些东西;不过也许我错了。

再一次,我不想将VPS用作网站服务器,Node JS监听器将返回一些JSON集合,因此我没有使用端口80事实上,VPS的主要用途是对数据​​进行大量操作(可能涉及本地MySQL数据库),然后返回任意数量的前端客户端浏览器应用程序可以使用的JSON集合。

我还阅读了一些有关使用NodeJS RestifyExpressJS的建议。我是否需要这些用于我想要做的事情?

1 个答案:

答案 0 :(得分:0)

La cuestion es sencilla:veras,para que tu servidor sea lo mas seguro posible,tenes que tener en cuenta tres cosillas:

  1. Asegurate desaberquépertostenes abiertos en tu server,te aconsejo,que en la medida de lo posible,sólodejesel puerto 80,y en caso de no,entonces reduce la mayor cantidad de puertos abiertos。
  2. Usa un proxy,en su manera mas simple,nginx,liviano,sencillo,rápido,y asegurate de usarlo,enunamáquinanla que no tengas alojadaninguninformación,podes usar un vps de 5 dolares en digital ocean,y luego hecharte mano de un proxy gratuito en cloudflare,así,tu app,tendrábleblepuerta,de entrada; mira,el usuario que visite tus sitios,sabráladireccióndetu proxy cloudflare,tu proxycloudflareababáladireccióndetu proxy digital,pero tanto el usuario como cloudflare desconoceran,ladirecciónrealde tu maquina en linode。
  3. Asegurate de separar tu backend de tu frontend,s refiero a que todo tu frontend,sólodebeusarsólocodigode frontend,html,css,y js,nada de enbebidos en php o lo que sea que uses; por tu lado,manipula los datos para que transportes tus datos en tipo json,o lo que quieras。
  4. Lacuestióndeseguridad es mas que otra cosa,la recursividad que le pongas。 Aunque este tuto,es de redhat,te puede dar suficientes pistas,paraunacconfiguraciónmasprofunda。

    Red Hat Enterprise Linux Security

    Suerte,espero haberte hechado una mano。