如何控制谁使用我的网络小部件

Posted

技术标签:

【中文标题】如何控制谁使用我的网络小部件【英文标题】:How to control who uses my web widget 【发布时间】:2012-10-11 12:16:23 【问题描述】:

我创建了一个网络小部件,用于显示来自我的网站的用户特定信息。这个小部件是基于java脚本的(我关注this example),并且可以嵌入到其他站点中。

我正在寻找一种方法来控制谁可以将小部件嵌入他的网站。欢迎任何想法/参考。

【问题讨论】:

你也许可以使用this 【参考方案1】:

您必须与 OAuth 一起使用一些额外的技巧才能正确识别客户端。

这个问题在here有详细解答。

【讨论】:

我真的认为您在那里接受的答案并不安全。一点都不安全。在那里看我的cmets。 (在我看来,您在链接问题中找到的文章中的步骤安全的,而且我们使用的是相同的 javascript 技巧。太糟糕了,我的答案在这里被删除了。)跨度> 感谢您的回答和 cmets。我不知道为什么你的答案被删除了。我还没有实现这个,但我认为我引用的答案以及随附的 cmets 很有价值。他们对如何处理这个问题提出了一个很好的想法,你不同意吗? 我确实觉得您找到的文章是您解决方案的关键,但我认为具体的答案并没有增加任何内容。实际上,我觉得答案比文章要糟糕得多。 (该答案是在我对您的问题有悬赏时发布的;我希望回答者只是快速阅读您找到的文章,并发布了一个糟糕的摘要来获得该悬赏,而不是真正实现它方式。我在REST authentication and exposing the API key重新发布了我删除的答案。) 谢谢。我现在将对原始问题添加评论。 新想法:也许 CORS 可以扩展来达到同样的效果。不过,我们还没有尝试过;请参阅我之前的回答中的my own comment。【参考方案2】:

您可以尝试使用request.referer 并仅根据已批准的网络主机列表选择性地发送 JavaScript 文件(通过控制器操作),而不是直接提供文件。您可以使用 send_file 方便地将 JavaScript 发送到客户端(在 HTTP 标头中设置缓存选项,以便浏览器不会重复请求文件)。但是,引荐来源网址可能会被欺骗,并且可能不会被发送,具体取决于 HTTPS => HTTP 配置。

您还可以考虑为您的 JavaScript 文件要求一个 API 密钥(只需将其作为 JavaScript 文件请求的一部分附加)。虽然它无论如何都不是万无一失的,但它使跟踪使用变得更加简单。 (并且通过使用日志,您可能能够发现非法用途)。

【讨论】:

由于 WPCoder 所述的原因,API Key 方法是一种很好的方法。虽然它是可见的,因此很容易被盗,但这是一个好的开始。要真正锁定它有很多方法,但现在的标准是 OAuth;如果这是您真正需要的,则要复杂得多,但更安全。 我将 OAuth 用于我系统的 API 部分,但这不是客户端的问题吗?你能给我指个参考吗? @tharrison -- 我不明白你会如何使用 OAuth?这是为了防止嵌入 javascript 小部件。 我不介意该解决方案是否允许嵌入小部件并且如果我不希望它不允许它访问我的网站。如果 OAuth 可以做到这一点,你能告诉我怎么做吗? 虽然此文档适用于 Google API,但它是 JS 应用程序的通用 OUath 解决方案:Using OUath2 for Client-Side Applications。我认为这对您的解决方案来说可能有点矫枉过正,但这是一个选择(我认为!)

以上是关于如何控制谁使用我的网络小部件的主要内容,如果未能解决你的问题,请参考以下文章

寻找 js(可能是 jQuery)时区(仅限)控制 UI 小部件

tkinter多次使用相同的小部件

如果正在使用我的小部件,如何查询 WidgetKit?

如何将日期/日历小部件添加到 django 表单?

网络调用后如何修改 UI 以填充子小部件

Flutter - 如何对齐(小部件)孙小部件与孩子相同