首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在服务器端识别唯一的客户端?

如何在服务器端识别唯一的客户端?
EN

Stack Overflow用户
提问于 2022-11-01 12:44:12
回答 1查看 60关注 0票数 0

我是后端新来的,以前从没和它合作过。

我想添加到我的应用身份验证系统:客户端请求服务器提供唯一的ID,服务器生成大约5-6个符号ID并返回给客户端。用户可以使用这个ID,这样其他人就可以通过这个ID找到他的设备。经过一些延迟(比如几个小时),服务器将删除唯一的ID,因此客户端必须请求另一个ID来继续使用服务器服务。

对于我的应用程序,这应该是舒适的方式-没有任何oauth系统。但是,如果有人想要更改客户端代码,以便同一个客户端向服务器发送数千个请求,以便为其创建唯一的ID,该怎么办?对于服务器的数据库来说,这听起来很不安全,它可以被同一个设备的假ID填充。

我的问题是-如果这个用户在拒绝此请求之前已经请求ID,那么是否有可能像服务器检查那样使创建ID的请求更安全?也许我可以检查一下客户端IP / MAC地址之类的东西?模拟问题的最佳实践是什么?

关于更详细的上下文,我使用Spring、Android和Retrofit。对不起,我不是说英语的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 14:24:38

基本上,您是在问服务器是否可以以一种能够正常工作的方式识别客户机的机器(总是或大多数情况下)。

答:不,没有办法。

您能得到的最好的是(假设的)客户端IP地址,您可以从Socket对象、HTTPRequest对象或其他任何东西中获得。但是,如果客户端通过代理或NAT服务器或Tor / Onion路由器连接,则IP地址将是该地址的IP地址。

那么解决方案是什么呢?

没有什么能阻止一切形式的虐待,但以下是一些可能会有所帮助的想法:

  1. ,您可以简单地引入一个延迟,即在响应每个令牌请求之前等待(例如)5秒。这将限制单个客户端(例如)每分钟12个令牌,这将减少数据库条目的数量。(但这是有缺点的,DDOSer可以利用这个优势。)

基于(观察到的)客户端IP地址的

  1. 速率限制;例如,如果您在一分钟内看到(例如)10个令牌请求,则忽略来自该IP的所有进一步请求(例如) 10分钟。

  1. 保存数据库条目的时间较短.

  1. 只是使用一个更大的数据库。如果您有千兆字节的数据库存储,每秒数百或数千个令牌并不是很多。特别是如果要删除旧条目.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74276152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档