首页 文章

保护REST API用户创建的最佳实践

提问于
浏览
1

我目前正在开发一个iphone / android项目,通过REST API调用移动对话java后端服务器 .

Java后端使用Spring及其身份验证系统(带有JSESSION ID令牌)完成

我不是安全方面的专家,但我可以看到,如果没有正确实施,可能会有很多问题 .

我最关心的一个问题是用户创建 . 当应用创建用户时,它只是向(url.com/rest/create)发出POST请求

如何避免服务器端恶意用户将此URL放入循环并创建数千个用户?

保护API调用的常见最佳做法是什么? Spring Authentication令牌足够吗?

谢谢!

2 回答

  • 1

    实际上不可能阻止客户端对您的服务器进行多次调用 . 恶意用户可以创建向您的服务器发送请求的脚本或应用程序 .

    解决方案是验证和授权对服务器的调用 . 您为某些用户(例如管理员)提供了创建用户的权限 . 您信任这些用户以正确的方式行事 . 在服务器上调用API之前,您的用户需要进行身份验证 . 然后,在服务器端检查用户是谁以及他/她可以做什么 .

    如果您仍然担心特权用户不行为,您可以为每个用户分配允许他们执行的操作的配额 .

  • 1

    高科技解决方案(尽可能多的框架功能)将是

    • 首先:在要保护的实体上有一个创建者和创建日期字段(我建议使用Spring-Data-JPA审计) .

    • 秒:创建一个自定义 spring 方法(或web)表达式方法,该方法能够检查当前用户在(例如)最后10分钟创建的项目数量,如果这个项目超过(例如)20,则返回false (或使它们成为方法的参数) .

    然后你可以使用该表达式保护你的方法(或url)( @PreAuthorize("createsNotExeced(10, 20)")

    但这是高科技的解决方案 - 当人们想要学习 spring 安全时,实施它们会非常紧迫 . (并且您需要添加一些缓存,但这也是一个Spring功能) .


    低技术解决方案是:在用户会话中放置时间戳列表,并在用户创建新项目时向该阵列添加新项目 . 当最后一个(例如)20个时间戳记在最后(例如)10分钟内时,则抛出TooMuchHeavyUseRuntimeException或其他东西 .

相关问题