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

时间:2014-12-24 12:30:09

标签: javascript ruby-on-rails api request

我在js中有一个简单的自动完成脚本,它接受用户输入的内容,将其发送到服务器,服务器检查类似于它的数据。工作得很好。

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

但是由于该服务器端点是公开的,我不希望用户滥用它并让它通过强力实施所有内容

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

2 个答案:

答案 0 :(得分:0)

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

对于nginx:

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

答案 1 :(得分:0)

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

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

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