Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确保对前端和其他服务器开放的API的安全性?_Javascript_Ajax_Node.js_Api - Fatal编程技术网

Javascript 如何确保对前端和其他服务器开放的API的安全性?

Javascript 如何确保对前端和其他服务器开放的API的安全性?,javascript,ajax,node.js,api,Javascript,Ajax,Node.js,Api,我正在建立一个网站。该站点的前端页面需要通过AJAX从/到服务器获取/发布数据,服务器向其他应用程序提供相同的api(私有应用程序,而非公共应用程序,在同一个一级域下) 例如,POST/api/users用于创建新用户。该站点将提供一个注册页面,该页面将使用此API注册用户(通过AJAX)。我希望其他应用程序也能够使用此API注册用户 通常,我使用哈希字符串来验证来自其他应用程序的请求。但我不认为我能在头版做同样的事情 我不想在首页和其他应用程序中分别使用两种不同的API。那我该怎么做呢 我正在

我正在建立一个网站。该站点的前端页面需要通过
AJAX
从/到服务器获取/发布数据,服务器向其他应用程序提供相同的api(私有应用程序,而非公共应用程序,在同一个一级域下)

例如,
POST/api/users
用于创建新用户。该站点将提供一个注册页面,该页面将使用此API注册用户(通过
AJAX
)。我希望其他应用程序也能够使用此API注册用户

通常,我使用哈希字符串来验证来自其他应用程序的请求。但我不认为我能在头版做同样的事情

我不想在首页和其他应用程序中分别使用两种不同的API。那我该怎么做呢


我正在使用Node.js和Express。

我建议结合使用API。登录用户或创建用户应返回会话令牌。然后,每个后续请求都应该包含该令牌。服务器上的其他API不应允许没有用户会话令牌的请求。因此,当请求传入eg:/app/data时,服务器会查找会话令牌(通常在头中发送)以验证用户是否存在并已登录

这通常适用于带有网站场景的移动应用程序,因为用户必须通过网站注册。因此,注册API通过禁止注册API使用CORS,但允许服务器中所有其他API使用CORS的方式,仅限于网站。只要他们查找会话令牌以验证其有效性,那么我认为那里不会有太多安全风险


更高级、更安全的方法是使用OAuth 2保护API。由于您拥有该服务器,通过OAuth 2握手从网站和移动应用程序注册用户将非常容易。

您所说的“其他应用程序”是什么意思?为什么“其他应用程序”与前端页面不同?@Cristy嗯,如果使用外部应用程序,您也可能会遇到CORS问题。@Cristy例如,a.abc.com域下的此站点有一个注册页面。现在,在域b.abc.com下有另一个站点(是的,同一个一级域),当用户注册提交注册请求时,b站点实际上将数据发布到站点(服务器到服务器)进行注册。b站点是“其他应用程序”之一。@krillgar我真的不明白这个问题。他是否已经有了
API
?他说他对来自其他应用程序的请求使用“哈希字符串”,为什么他不能对来自前端页面的请求使用相同的逻辑?我认为这实际上相当广泛。您将需要研究Oauth和OpenID之类的东西。我在这里有点困惑。CORS问题不是发生在前端和服务器端之间吗?服务器到服务器呢?对于服务器到服务器的通信,您可以使用会话令牌验证传入的请求。这样您就知道服务器已登录。您还可以使用CORS阻止在不同IP地址上运行的服务器。通常,服务器在防火墙后面的IP范围为10.0.0.0/24。但是,您只能允许使用CORS标头从10.0.1.33进行访问。在10.0.0.0/24上运行的服务器通常会设置为在没有安全性的情况下进行通信,就像您在本地主机上运行测试一样。但是,这种行为很容易修改。当与服务器通信时,另一台服务器的行为将类似于客户端。然而,CORS更多的是保护客户端用户不受跨源请求的影响。客户机可以很容易地忽略CORS头,CORS并不是在服务器端阻止客户机请求。它是关于在客户端阻止对服务器的请求。Aaron Franco本质上说的是将IP/域列入白名单,而这与CORS无关。@Aaron Franco这取决于CORS的具体实现,但最终你本质上是将IP或域列入白名单,你不需要CORS。此外,IP/域可能被欺骗。为了真正的安全性,需要OAuth2(或类似的身份验证协议/规范)