【问题标题】:Allow REST api access only by personal webiste (not other requests servcices)仅允许个人网站访问 REST api(不允许其他请求服务)
【发布时间】:2021-05-03 18:35:36
【问题描述】:

我知道之前有人问过这个问题,但我没有找到可行的解决方案,我在我的 Django 应用程序中实现了 CORS 以限制域访问,并且还使用了 CSRF 令牌用于针对不安全的 HTTP 方法进行安全数据传输,但我仍然可以通过邮递员或其他 HTTP 服务向 API 发出请求,我该如何避免这种情况?

注意: 我的应用不使用具有 oAuth 系统的用户等等,它向数据库发出 POST 请求以获取令牌(特定于应用术语),而不管发出请求的人是谁,但是我只希望我的网站提出这样的请求,而没有更多,该怎么做?

【问题讨论】:

  • 你能分享你遇到问题的代码吗?例如,它可以是您的 views.py。
  • 如果您从网站的后端发送请求,我建议您使用安全令牌,我的意思是创建一个属于您网站的安全令牌,并在每次请求时将其发送到 API。如果您从网站的前端发送请求,可能无法避免不需要的请求。此外,您可以使用防火墙规则来限制请求来源。
  • 这是CORS,你不需要做任何事情,默认就可以了

标签: django ajax cors backend csrf


【解决方案1】:

跨域资源共享(CORS)是一种机制,允许从提供第一个资源的域之外的另一个域请求网页上的受限资源。

您可以将 CORS 视为在前端请求的后台运行的标准,仅由网络浏览器强制执行。因此,如果您想使用不是浏览器的 HTTP 客户端(例如 curl)进行请求,则根本不需要进行 CORS 验证。

所以底线: 如果您想阻止其他非浏览器 HTTP 客户端向您的 API 发出请求,您需要自己考虑解决方案。

例如:

创建一个middleware,检查传入请求是否来自您在应用设置中拥有的可信来源列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 2021-04-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多