Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Node.js AWS API网关仅限制从S3静态网页访问_Node.js_Amazon Web Services_Amazon S3_Aws Api Gateway - Fatal编程技术网

Node.js AWS API网关仅限制从S3静态网页访问

Node.js AWS API网关仅限制从S3静态网页访问,node.js,amazon-web-services,amazon-s3,aws-api-gateway,Node.js,Amazon Web Services,Amazon S3,Aws Api Gateway,我在AWS EBS上部署了一个Node.js express服务器,客户端用React编写,作为静态网页部署到S3 bucket 我正在开发某种特定服务的注册系统,我不想向用户请求凭据,所以我猜csrf\jwt不起作用 是否仍有阻止来自客户端以外的源的所有http请求的方法?现在,有人可能只是使用邮递员向我的服务器发出请求,例如仅通过电子邮件创建用户 我尝试使用私有API网关,但找不到让客户端成功发出请求的方法。 我曾考虑对http请求有效负载进行加密,但我没有发现在任何人都无法通过浏览器看到的

我在AWS EBS上部署了一个Node.js express服务器,客户端用React编写,作为静态网页部署到S3 bucket

我正在开发某种特定服务的注册系统,我不想向用户请求凭据,所以我猜csrf\jwt不起作用

是否仍有阻止来自客户端以外的源的所有http请求的方法?现在,有人可能只是使用邮递员向我的服务器发出请求,例如仅通过电子邮件创建用户

我尝试使用私有API网关,但找不到让客户端成功发出请求的方法。
我曾考虑对http请求有效负载进行加密,但我没有发现在任何人都无法通过浏览器看到的地方存储私钥…

您无法阻止所有
http
请求,但肯定可以通过添加
中间件来拒绝

app.use((req, res, next) => {
  if(req.protocol === 'http' && req.hostname!== <client domain>){
    return res.sendStatus(403);
  } next();
})
app.use((请求、恢复、下一步)=>{
if(req.protocol=='http'&&req.hostname!==){
返回res.sendStatus(403);
}next();
})

来源只是一个HTTP头,有人可以在他们的邮递员请求中设置,即“欺骗”。您可以检查原点以阻止随机扫描机器人,但它不会阻止任何已确定的人。所以,请不要把它混淆为实际的安全性。您可以通过将AWS Web Application Firewall连接到您的EB负载平衡器来实现这一点,或者只需在express中间件中添加一个复选框,如另一个答案所示

关于私有API网关,这在这种情况下永远不会起作用,这只适用于VPC网络内的资源,并且您的React应用程序正在公共互联网上的人们的web浏览器中运行

关于有人创建一个用户帐户“只有一封电子邮件”这是你要处理的,你应该在服务器端完全验证该请求,因为你知道该请求可能来自使用诸如Postman之类的工具的人,因为在你的场景中没有办法完全阻止


如果您想使用API网关实现这一点,您可以尝试在那里实现。您还可以将Web应用程序防火墙连接到API网关。我相信您也可以作为API网关请求验证程序的一部分来执行源标题检查。

Node.js服务器?它是express服务器吗?您的API网关域在客户端上是否可见?