我目前正在开发一个iphone / android项目,通过REST API调用移动对话java后端服务器。
使用Spring及其身份验证系统(带有JSESSION ID令牌)
完成Java后端我不是安全方面的专家,但我可以看到,如果没有正确实施,可能会有很多问题。
我最关心的一个问题是用户创建。 当应用创建用户时,它只是向(url.com/rest/create)
发出POST请求如何避免服务器端恶意用户将此网址放入循环并创建数千名用户?
保护API调用的常见最佳做法是什么? Spring Authentication令牌是否足够?
谢谢!
答案 0 :(得分:1)
实际上不可能阻止客户端多次调用您的服务器。恶意用户可以创建向您的服务器发送请求的脚本或应用程序。
解决方案是验证和授权对服务器的调用。您为某些用户(例如管理员)提供了创建用户的权限。您信任这些用户以正确的方式行事。在您的服务器上调用API之前,您的用户需要进行身份验证。然后,在服务器端检查用户是谁以及他/她可以做什么。
如果您仍然担心特权用户没有表现,您可以为每个用户分配允许他们执行的操作的配额。
答案 1 :(得分:1)
高科技解决方案(尽可能多的框架功能)将是
然后,您可以使用该表达式(@PreAuthorize("createsNotExeced(10, 20)")
)
但这是高科技解决方案 - 当人们想要学习弹簧安全时,实施它们会非常紧张。 (并且您需要添加一些缓存,但这也是一个Spring功能)。
lowtech解决方案是:在用户会话中放置时间戳列表,并在用户创建新项目时向该阵列添加新项目。当最后一个(例如)20个时间戳记在最后(例如)10分钟内时,则抛出TooMuchHeavyUseRuntimeException或其他东西。