我在js中有一个简单的自动完成脚本,它接受用户输入的内容,将其发送到服务器,服务器检查类似于它的数据。工作得很好。
$(".name_autocomplete").autocomplete({
serviceUrl: '/names',
onSelect: function (suggestion) {
$(this).value = suggestion;
}
});
但是由于该服务器端点是公开的,我不希望用户滥用它并让它通过强力实施所有内容
是否有办法(在客户端或服务器端)限制该网址的请求仅来自该特定网页上的网站,而不是curl
之类的内容?
答案 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
您可以控制原始域并决定允许哪个域访问,哪个域不允许访问。