0

我有一个 Web 应用程序,它由一个 JavaScript 前端和一个用 PHP 构建的后端组成,其中前端向后端的 URL 发出一些 AJAX 请求,例如:api.examplesite.com?q=some_query结果以 JSON 格式返回。

任何知道此 URL 的人都可以直接调用它并获得相同的结果。

使第三方无法访问此 URL 但仍适用于我的应用程序的最佳做法是什么?

4

4 回答 4

2

任何可用于 AJAX 调用的 URL 都可用于公共 Web。要保持它“私有”,您可以将其绑定到用户会话或令牌,您将在主页上启动它并在 AJAX 调用中持续存在。

此外,如果“some_query”是一个实际的 SQL 语句,那么这对于 AJAX 调用来说被认为是非常糟糕的做法。您的 SQL 应该只在服务器端直接可用,而不是任意客户端。

于 2012-08-13T14:05:23.317 回答
-1

实际上没有办法做到这一点。您的应用程序是客户端,因此它需要从服务器获取响应。这意味着它无论如何都可以被客户端拦截。

您可以使用加密来防止截获数据的人能够读取它。您可以在客户端应用程序中使用对称密码和硬编码某些密钥(这不好,因为如果密钥被泄露,则可以解密来自所有客户端的所有流量),或者您可以使用 SSL/TLS 与服务器(如果您传输敏感信息,我认为这是最好的解决方案)。

于 2012-08-13T14:08:39.767 回答
-1

客户端必须能够请求 URL 才能使用它。但是,您可以检查请求是否是使用 ajax 发出的,然后相应地返回信息:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
    AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
   // I'm AJAX!
}

查看此以获取更多信息

于 2012-12-25T18:33:45.687 回答
-3

为了安全起见,您可以在执行查询之前尝试强制使用数字类型或引用字符串。

例如

$number = (int) $number;
$string = htmlspecialchars($string);

哦,对了,答案是:没有办法让它无法访问。

于 2012-08-13T14:08:35.137 回答