检查请求是否来自网络而不是手动

check that requests come the web and not manual

本文关键字:网络 请求 是否 检查      更新时间:2023-09-26

我在js中有一个简单的自动完成脚本,它获取用户键入的内容,将其发送到服务器,服务器检查与之相似的数据。 工作很棒。

$(".name_autocomplete").autocomplete({
        serviceUrl: '/names',
        onSelect: function (suggestion) {
            $(this).value = suggestion;
        }
    });

但是由于该服务器端点是公共的,我不希望用户滥用它并让它通过蛮力吐出所有内容

有没有办法(在客户端或服务器端)限制对该 url 的请求仅来自该特定页面上的网站,而不是来自 curl 之类的内容?

最简单的

选择是删除没有用户代理字符串的连接(类似于属于已知机器人的用户代理字符串)。当然,如果你的用户足够聪明地使用 curl,他们可能知道如何使用它使用虚假的用户代理(默认情况下 curl 不会发送用户代理字符串),所以这只会阻止随意忙碌的人。

对于 nginx:

if ($http_user_agent ~ (agent1|agent2) ) {
  return 444;
}

也许HTTP-Access-control可以帮助您与设置良好的用户代理结合使用:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

您可以控制源域并决定允许访问哪个域,不允许访问哪个域。