gpt4 book ai didi

java - 我是否需要添加大量 "checks"以防止用户修改他们不应在 RESTful 应用程序中修改的数据?

转载 作者:行者123 更新时间:2023-12-02 03:21:26 25 4
gpt4 key购买 nike

例如,如果我托管一个用户可以上传视频的网站,他们应该能够修改标题、描述、缩略图等...但是是什么阻止他们修改当前 View 呢?上传时间?他们不应该能够更改的字段。他们不能使用像 Postman 这样的 REST 工具并简单地以 JSON 格式发送自定义请求来修改所有这些字段吗?如果他们愿意,他们可以将自己的观点设置为 999999999。

我的问题:我是否需要添加大量检查来防止这种情况发生?如果不是,必须采取什么措施来防止这种情况发生?

编辑

这是一个 Spring 示例,我用它来构建后端:

 @RequestMapping(value="/modify/{id}", method=RequestMethod.POST)
public ResponseEntity<String> modifyVideo(UserVideo modifiedVideo) {
UserVideo originalVideo = videoService.findOne(modifiedVideo.getId());

//Set the prohibited fields back to their original values (checks)
modifiedVideo.setTotalViews(originalVideo.getTotalViews);
...
//Map modifiedVideo to originalVideo once all prohibited fields are reset
}

最佳答案

除了确保用户经过身份验证(断言用户就是他们声称的人)和授权(断言用户被允许执行他们想要的操作)到),您必须断言只有可更新字段才会公开您的 API。如果不是所有字段都可以更新,则不要公开所有字段进行更新。

DTO 是实现这一目标的好方法,正如本文 answer 中已经提到的那样。 DTO代表Data Transfer Object 。创建此模式的目的非常明确:将数据传输到远程接口(interface),就像 Web 服务一样。

使用 DTO,您只能公开持久性实体的一组属性,这种方法将使您能够完全控制创建或更新资源时接收的属性。

为了避免将 DTO 映射到持久性实体或从持久性实体映射 DTO 的样板代码,您可以使用 mapping frameworks 。例如,看看 MapStruct ,它是基于注释的,用作 Maven 注释处理器。

为了给您的 DTO 提供更好的名称,请查看此 answer .

关于java - 我是否需要添加大量 "checks"以防止用户修改他们不应在 RESTful 应用程序中修改的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39558359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com