【发布时间】: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