开源改变世界!!

允许 * for CORS for /upload #23

推推 grbl 2年前 (2022-10-19) 117次浏览 0个评论
关闭
petervanderwalt 打开了这个问题 on 25 Sep 2019 · 16 条评论
关闭

允许 * 用于 CORS 用于 /upload#231

petervanderwalt 打开了这个问题 on 25 Sep 2019 · 16 条评论

注释

允许 * for CORS for /upload #23

彼得万德沃尔特 评论 on 25 Sep 2019  

[edit] 删除了愚蠢的问题,呵呵 [/edit]
构建我自己的 UI,由于 CORS 无法上传

允许 * for CORS for /upload #23

尝试从我自己的 UI 上传一些 gcode:
似乎在 ESP32 上启用了 CORS:
请参阅https://github.com/me-no-dev/ESPAsyncWebServer#adding-default-headers

允许 * for CORS for /upload #23

也允许我从不同的 IP 发帖

允许 * for CORS for /upload #23

将 Access-Control-Allow-Origin: “*” 添加到上传功能,如下所示:
允许 * for CORS for /upload #23

(:希望尽快在官方版本中看到它(:

petervanderwalt 添加了对引用此问题的 petervanderwalt/Grbl_Esp32 的提交 on 25 Sep 2019

允许 * for CORS for /upload #23 彼得万德沃尔特 改变了标题 问题:我可以通过 html 从 SD 中获取 gcode 文件吗 允许 * 用于 CORS 用于 /upload 2019 年 9 月 25 日
允许 * for CORS for /upload #23

公关创建(:

允许 * for CORS for /upload #23
所有者

婚戒 评论 2019 年 9 月 25 日  

  1. 这会产生潜在的安全问题。请通过 config.h 中的#define 将其更改为可选。

默认情况下应该禁用它。

  1. 我们在 wiki 中有拉取请求指南。请遵循这些准则。
允许 * for CORS for /upload #23
作者

彼得万德沃尔特 评论 2019 年 9 月 26 日  

可能是的……,但它只在/上传,它只是 Grbl,而不是门锁或安全性真正重要的东西(而且它甚至不提供 htttps 这么早在不了解 CORS 的情况下提及安全性,它是什么以及为什么在这种情况下,它会导致问题)

编译时间选项不是我在我的软件中可以依赖的东西,不能让用户强迫自己编译。如果它不能是默认的(阅读CORS并考虑上下文。安全性不是这样,我可以从nodejs和python等按原样发布。它只是Chrome在做它应该做的,但在这种情况下它毫无意义,因此允许 * 是合适的做法)我不能在软件中有上传按钮。

允许 * for CORS for /upload #23

https://www.google.com/amp/s/auth0.com/blog/amp/cors-tutorial-a-guide-to-cross-origin-resource-sharing/很好地解释了为什么在合法的情况下这正是 CORS是。资源共享

对不起,请用手机打字,固定电话互联网已关闭

允许 * for CORS for /upload #23
合作者

luc-github 评论 2019 年 9 月 26 日  

抱歉,您写道:Potentially yes... , 并且当您在 AsyncWebServer 中阅读时,默认情况下未启用它,最后,正如您所写的那样,cases不是大多数用户都是合法的。
这是安全问题,Bart 对此非常敏感。
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
所以启用它必须由用户完成,而不是默认情况下。

这也不是“必须”,因为已经可以使用没有 CORS 的 curl 完成上传:
curl -F 'data=@path/to/local/file' http://192.168.1.100/upload
确实没有实现命令行身份验证,因此
curl -F 'data=@path/to/local/file' http://adminlogin:adminpassword@192.168.1.100/upload 目前无法工作,由于工作负载优先级,我已经在 ESP3D 上实现但在 grbl 上没有实现但重要的是您的应用是否支持身份验证。
还有一些用户写了一些上传应用程序并且不需要它我知道

允许 * for CORS for /upload #23
合作者

luc-github 评论 2019 年 9 月 26 日  

这里是 Slix App 的屏幕截图: 以及完整的视频记录_000001.avi.wmv.zip
允许 * for CORS for /upload #23

上传正在使用此 VB.net 应用程序,并且在固件中未启用任何 CORS

允许 * for CORS for /upload #23

关闭问题,因为我不会说服你。

可惜。我知道我可以从“除了浏览器之外的任何东西”上传

如果你有 cam > gcode 文件 > 本地运行的 gui 可以上传 > esp32grbl

但是你忘记了它的 2019 年,基于浏览器的应用程序可以做很多很棒的事情。

基于浏览器的 cam > 使用 webrtc 扫描网络并自动找到 esp32grbl > 为您将 gcode 发布到 SD。用户使用他喜欢的任何主机或 webui 来运行文件

我现在不能添加用户必须下载并安装的 shim 才能充当浏览器和 esp32grbl 之间的中间人

考虑一下,但不要打扰回复。如果您可以从 curl/vb/python/nodejs 等发布未经身份验证的 /upload,为什么只在您的默认行为中阻止浏览器。不要回复只是为了回复,或者证明你是对的。睡在上面,想想我对此有何看法,想想各种基于浏览器的 gcode 生成器的潜力,这些生成器可以从浏览器直接上传到 SD。现代时代,现代开发者,现代思维方式。

允许 * for CORS for /upload #23
合作者

luc-github 评论 2019 年 9 月 26 日

我们没有拒绝 PR,我们出于安全考虑要求修改。
默认情况下启用身份验证,因此用户需要使用定义禁用它。

如果不存在 cors 标头,浏览器应用程序会阻止上传。这不是给你敲响警钟吗?
如果不重要,这个限制就不存在
让用户知道他们需要为您的应用程序敞开大门的问题吗?他们将不得不根据他们的硬件编译固件,我没有看到任何问题提到他们需要启用定义以使上传与您的应用程序一起工作,就像他们禁用身份验证一样。

现代思维方式包括网络安全和大多数用户的担忧。

允许 * for CORS for /upload #23

很公平,他们无论如何都必须为硬件编译,没有像 Grbl 这样的预建十六进制。好吧,你赢了。但是如果你喜欢这个想法,我将没有时间在几周内工作,请添加它。我没时间

允许 * for CORS for /upload #23

很公平,他们无论如何都必须为硬件编译,没有像 Grbl 这样的预建十六进制。好吧,你赢了。但是如果你喜欢这个想法,我将没有时间在几周内工作,请添加它。我没时间

如果您无法弄清楚这一点,这可能会对您有所帮助。这是我们在 vb.NET 中上传的代码。

它使用一个 WebClient 对象(基本上是一个 Web 浏览器外壳)

Private Sub UploadFile(ByVal FileName As String, ByVal IPAddress As String) Dim IPAdd As String() = Split(IPAddress, ":") lblUploadPcent.Visible = True SDFailed = False cmdUploadJob.Enabled = False CurrState = ChipState.UploadingFile Dim uriString As New System.Uri("http://" & IPAdd(0) & "/upload") WC.UploadFileAsync(uriString, "POST", FileName) End Sub Dim WithEvents WC As New System.Net.WebClient()

允许 * for CORS for /upload #23
作者

彼得万德沃尔特 评论 2019 年 9 月 26 日  

没有得到它的工作,我真的只是不想要一个基于 nodejs 的垫片(只是浏览器)

现在我在我的本地 nodejs shim 上使用代理(强制用户下载并安装一个应用程序,这不是我真正想要的,但是哦,好吧,会找到它的其他用途)

基于浏览器的 gcode 生成器 -> 发布到在 shim 上运行的本地网络服务器 _> nodejs 发布到 ESP32GRBL:(看起来它是如此“安全”,呵呵,但我仍然可以从浏览器以外的任何地方发布)

function esp32grblupload(url, filename, gcode) {
  const r = request.post({
    url: url,
    formData: formData
  }, function optionalCallback(err, httpResponse, body) {
    if (err) {
      return console.error('upload failed:', err);
    }
    console.log('Upload successful!  Server responded with:', body);
  });
  const form = r.form();
  form.append('path', '/');
  form.append('myfile', new Buffer(gcode), {
    filename: filename
  });
}

说到安全性,/upload 不应该受到用户名/密码的保护(或者是 – 现在才想到 – 目前看不到 auth)

允许 * for CORS for /upload #23

也就是说,我仍然希望当自我和脾气平静下来时,他们会真正阅读有关 CORS 的信息:https ://stackoverflow.com/questions/20164173/is-cors-considered-bad-practice (;

我无法用语言表达这一点,但是嘿,将来谁知道呢(:

只是为其他人记下来:

  • CORS 允许共享资源(在本例中是主机上的 /upload api,以便人们可以从其他基于浏览器的应用程序(不仅仅是从 SD 提供的应用程序 – 这是有限且缓慢的)在那里发布
  • 考虑到用例,它完全是正确的解决方案(如果您了解浏览器的角色,以及为什么它会在发布之前查找标题)
  • 照原样,它不像禁用 CORS 会使其更加安全,我仍然可以从其他任何地方发布到 /upload,而不是在不同域上运行的浏览器
  • 如果他们希望将其作为编译时选项,这已经足够公平了,但我仍然没有在这种情况下看到这一点(除非他们也使用编译时选项禁用从任何其他 ip/源的上传。适合的人应该适合所有人)
允许 * for CORS for /upload #23
所有者

婚戒 评论 2019 年 9 月 26 日

我认为自负和脾气会平静下来。我们还不太了解对方,但我们都在朝着同一个目标努力……一个强大且功能丰富的产品。

我负责固件的大部分机器控制和硬件方面@luc-github完成所有网络方面的事情。卢克目前正在“度假”。这个问题进展得有点快,在我们中的任何一个人有机会阅读这个问题之前就进入了一个拉取请求。

听起来您正在尝试做一些非常酷的事情,我愿意支持。我们至少应该从#defined 允许它的选项开始,然后重新考虑默认方案。我也有一些想法,将来可能需要 CORS。

几乎每个人都必须配置 Grbl_ESP32。默认为不使用任何 I/O 的“试驾”模式。为了使编译更容易,config.h 中的许多通常更改的内容实际上是在 cpu_map 中选择的。cpu_map 是传统的 Grbl 名称,但在 Grbl_ESP32 中,它已成为完全定义机器的地方。鼓励将归位选项之类的东西放在那里。新用户只需选择他们的机器即可开始使用。高级用户可以根据需要调整其他设置。

因此,如果您希望为此启用 CORS,我们可以为您设置一台新机器。

你应该考虑加入我们的 Slack

允许 * for CORS for /upload #23

谢谢 Bdring,感谢它(;
你有点了解我,Peter van der Walt,作者或 Laserweb1-3 和 LW4 的项目负责人。
也为 OpenBuilds 工作(但 ESP32 的东西纯粹是个人宠物项目,所以不要让它发挥作用进入任何讨论)我在software.openbuilds.com上写所有东西(所以是的,很多很酷的过去经验可以带到桌面上)

很高兴听到您还需要 CORS(与往常一样,除了 auth 等之外,还需要对特定端点应用一些智慧)所以现在将使用我的 shim 应用程序,直到您这样做(: – 不再需要推送它。

公关真的是出于好意,但是哦,好吧(;

@luc-github: 放假的时候关掉手机!(;我也这样做,当我应该离开时,当人们与我交谈时会感到困扰 – 但是当我应该放松时检查电子邮件是我的错。实际上,有时会无缘无故地感到沮丧

会考虑懈怠谢谢。事实上现在,因为我还想为目前只能通过 HTTP 提供的某些功能(如创建文件夹、删除等)请求(或作为 PR,如果你愿意的话)额外的 ESP 命令

允许 * for CORS for /upload #23
喜欢 (0)

您必须 登录 才能发表评论!