【问题标题】:Restrict web api to web server [duplicate]将 Web api 限制为 Web 服务器 [重复]
【发布时间】:2013-04-26 19:47:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php javascript ajax database json


    【解决方案1】:
    1. 在用户访问您的网站时建立会话
    2. 在应答任何 AJAX 调用之前检查会话

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

    【讨论】:

    • 这将如何阻止任何用户访问 json 结果?我只想让我的网络服务器访问它。
    • 设置它,以便只有您的服务器拥有会话。随机的人可以整天访问它,并且会被拒绝。
    • 如何给服务器会话并通过 ajax 调用“发送”它?
    【解决方案2】:

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

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

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

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

    希望你能从中挑选一些。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2017-09-15
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2013-01-06
      相关资源
      最近更新 更多