【问题标题】:Restrict ajax calls from outside of node app限制来自节点应用程序外部的 ajax 调用
【发布时间】:2017-07-10 19:33:08
【问题描述】:

我想限制我的应用程序以外的 AJAX 调用。我不希望我的 AJAX 请求在从我的应用程序外部调用时发送响应,即使 AJAX 调用的 url 被复制并粘贴到浏览器中也是如此。我正在使用 node、express 和 mongodb。

【问题讨论】:

  • 您可以检查请求的域或放入某种形式的授权。
  • @George 是的,我当然可以这样做,但想象一下我只是复制请求 url 并在浏览器本身中打开它的场景,然后它仍然会成功响应。我也想避免这种情况。 “进行某种形式的授权”什么样的身份验证?

标签: javascript jquery ajax node.js express


【解决方案1】:

我所做的是在我的 ajax 调用中添加一些标头:

// javascript
$.ajax({
    type: 'POST',
    dataType: 'json',
    headers: {"Content-Type": "application/json", "app-ver": 1.5}
})
.

// php
$client_ver = floatval($_SERVER['HTTP_APP_VER']);

// I also check $_SERVER['CONTENT_TYPE'] to be: 'application/json'
// and post method. (ask me I'll add)

if ( $client_ver != 1.5 )
{
    echo '{}';
    exit();
}

编辑: 另一种方法是与您的应用程序创建一个“会话”,这意味着成功登录后的每个请求都必须携带一个令牌(至少) 并让您的应用程序附加许多只能由您的服务器识别的唯一标头键值,并且没有任何两个请求是相似的(例如:在标头中包含时间,并使用 REST 命令对其进行哈希处理,并让服务器对其进行检查确保它是一个独特的命令,而不仅仅是被操纵。 * 你必须知道你的会话创建算法并且它必须是独一无二的,或者如果你不知道怎么做,我建议你研究一下。

【讨论】:

  • 感谢您的回答,但是引荐来源网址和标头欺骗很容易做到,我该如何避免呢?
  • 谢谢@Mac。我在我的应用中实现了相同的功能,现在运行良好。
【解决方案2】:

如果您的应用程序在用户的机器上运行(例如 JavaScript Web 应用程序),则无法阻止有人从您的应用程序外部进行调用。您可以通过在每个请求中使用 nonce 来增加难度,但即便如此,也有人可以构建自己的应用来模仿您的应用并以正确的顺序进行调用。

简而言之:您永远无法完全信任客户,也无法防止有人欺骗客户。您需要重新检查您的要求。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2017-06-22
  • 2013-02-25
相关资源
最近更新 更多