0

目前,当我想通过 ajax 从我的数据库中获取数据时,我使用一个外部 php 文件,它只使用 mysqli 从数据库中获取数据并回显结果并将数据发送到 ajax。

我现在想将其更改为更有效的解决方案。我想我会先更改它,以便 php 文件为将来的项目输出 json 数据并更轻松地进行数据管理。但我不希望其他人能够直接访问这些数据,而不是通过我的网站。而且由于您可以通过检查网站来查看 ajax 连接,因此很容易找到。

我不希望它成为每个人都可以访问原始 json 数据并从中构建自己的应用程序/网站的地方。

还有哪些其他解决方案?只有我的网络服务器应该能够访问它。

4

2 回答 2

1
  1. 当用户访问您的网站时建立会话
  2. 在应答任何 AJAX 呼叫之前检查会话

请注意,这不是防爆的,而只是一个起点。

于 2013-05-02T15:05:29.567 回答
0

没有办法向允许使用请求它的文档的用户隐藏 json 数据。换句话说:如果通过允许的方式(使用您的站点正常方式)到达浏览器,您不能真正否认对数据的检查。但是,您可以使吸血变得困难。如果您使提取过程比构建自制数据库所需的时间更长,那么您就赢了。

  1. 减少您在一个请求中发送的数据量:发送的数据量不要超过实际显示的数据量。
  2. 将数据拆分为分页列表和详细视图。因此,为了访问完整的数据,leecher 必须提出很多请求。然后,您可以限制呼叫/期间/用户(使用会话)。
  3. 如果您的项目允许,请确定用户。有许多方法可以减少不需要的注册。此外,您可以使数据访问限制(以上)更有效(您可以将计数器连接到用户)。
  4. 您可以使用基于密钥的加密。您可以在这里找到一个可能的解决方案:简单的 Javascript 加密,PHP 使用共享密钥解密显然,浏览器会解密数据,因此您需要将密钥发送给它。这意味着:该过程将是可重复的,但是比简单的检查需要更多的时间。您可以更改加密的参数以使其更加困难。

您可以执行一些额外的步骤来使脚本化窃取更加困难。但是,这些不会使浏览器检查更加困难:

  1. 检查您从请求标头中获得的引荐来源网址。它应该与您文档的网址匹配。
  2. 如果 X-Requested-Width 标头未设置为 'XMLHttpRequest' ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'),则不要发送任何内容。这是安全的,所有浏览器都在 ajax 请求上发送它。
  3. 您可以向 ajax url 添加一个唯一的一次性参数。您可以使用简单的“脚本”标签 (var param='uniqparam123';) 通过 PHP 传递参数(或整个 url)。您将需要一个快速的解决方案来临时存储发送的密钥一段时间。一旦收到 ajax 请求,您可以匹配键,从列表中删除,然后将数据发送出去。

希望你能从中挑选一些。

于 2013-05-02T16:43:10.197 回答