【问题标题】:HTTP request through code only. Possible or not? [closed]仅通过代码的 HTTP 请求。可能与否? [关闭]
【发布时间】:2021-09-19 21:33:15
【问题描述】:

我希望只能通过 JavaScript XHR / Jquery Ajax / Node Axios / Curl / 的 HTTP 请求访问 URL 的响应,你懂的。例如,假设您向给定的 URL 端点发出 RESTful API 请求。我希望这个给定的端点只能通过 HTTP 请求通过代码访问。换句话说,我不希望人们通过浏览器访问 URL 的内容。

【问题讨论】:

  • 使用一些身份验证,然后
  • 您请求的东西需要某种级别的身份验证...即使您在代码开头检查字符串,例如: if ($_GET['code'] == "TOKEN_OR_JUST_A_STRING ") {运行我的代码}——当然,使用令牌会给你带来更好的安全性,但对于对 http 请求开放的服务就是这样......除非你使用 IP 地址的白名单。
  • 没有办法 100% 保护这样的 API。您可以检查不同的标头,例如X-Requested-With,但这很容易被欺骗,并且不会通过除 Ajax 之外的任何其他方式默认设置。甚至浏览器请求实际上也是“仅通过代码”(浏览器也通过代码获取页面)。但老实说,如果您允许任何人通过 cURL 访问它,为什么还要麻烦呢?它不会更安全或任何东西。
  • 最简单的方法是检查变量$_SERVER['REQUEST_METHOD'] 包含的内容。当通过浏览器访问一个 URL 时,它将包含GET
  • 只是让您知道,无论您在这里做什么,任何人都可以打开像 Postman 这样的任何程序,并直接从该应用程序发出任何类型的请求,而无需编写任何代码。同样,您永远无法知道该请求是如何提出的。您的服务器只知道发出请求的客户端告诉您什么。

标签: javascript python php


【解决方案1】:

如果 API 需要例如自定义标头 (X-Called-By=not a browser),则不太可能有人会使用浏览器意外导航到该内容。

但是,这不会增加系统的安全性。如果您想保护 API 免受非预期用户的影响,请使用身份验证和授权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多