Play 框架 2 (Java) 表单数据绑定与嵌套允许字段

2023-12-12

考虑以下模型:

public class Contact {

  @Required
  public String name;

  @Valid
  public List<Information> informations;

  }

  public static class Information {

    public String securedField;

    @Required
    public String email;

    @Valid
    public List<Phone> phones;

    public static class Phone {

      @Required
      @Pattern(value = "[0-9.+]+", message = "A valid phone number is required")
      public String number;
    }

  }

}

我不想要Information securedField受到影响批量分配漏洞。所以我决定设置 allowedFields 数组Contact Form.

我所知,播放表单基于Spring DataBinder,那么是否可以处理集合字段?我不想写这样的东西:

  • name
  • 信息[0].电子邮件
  • 信息[0].电话*
  • 信息[1].电子邮件
  • 信息[1].电话*
  • etc

以下不起作用:

  • name
  • 信息.电子邮件
  • 信息.电话*

我应该延长现有的Spring DataBinder and Form类和覆盖bind这种情况下的方法?


这是一个可以说更简单的解决方案。如何定义一个额外的约束,如果 POST 数据包含任何内容,该约束将触发验证失败informations[%d].securedField values?

import javax.validation.constraints.Null;

public static class Information {

    @Null
    public String securedField;

    ...

}

我认为这样你可以调用默认值bindFromRequest方法而不是接受表单字段名称白名单的方法,并且仍然可以免受大规模分配攻击。

不可否认,这种方法的一个缺点是,如果发生协同的大规模分配攻击,它最终会泄露内部字段的名称。然而,如果它们的名字相当平淡、毫无意义,比如securedField(无意冒犯!),我不确定攻击者如何利用这些信息。

Edit

如果您想允许根据当前用户类型分配字段,也许 Bean 验证组可以提供帮助:

import javax.validation.constraints.Null;

public class Contact {

    public interface Administrator {}

    public interface User {}

    ...

    public class Information {

        @Null(groups = User.class)
        public String securedField;

        ...

    }

}

控制器代码

...
final Form<Contact> contactForm;
if (currentUser.isAdministrator()) {
    contactForm = form(Contact.class, Administrator.class).bindFromRequest();
} else {
    contactForm = form(Contact.class, User.class).bindFromRequest();
}
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play 框架 2 (Java) 表单数据绑定与嵌套允许字段 的相关文章

随机推荐

  • 如何使用 BulletSpan 创建空项目符号段落?

    我想创建一个空的项目符号段落 但没有成功 这是我的代码 EditText contentET EditText findViewById R id content contentET setText abc n123 n Spannable
  • 如何删除firebase中的特定节点?

    我连接了 firebase 并在其中保存了数据 但我无法删除 firebase 中的特定条目 我尝试通过下面写的方法删除 但这不起作用 final FirebaseDatabase database FirebaseDatabase ins
  • 如何检查 JSON 文件中的“key”是否正确填充了“已知”值

    我正在尝试检查是否有特定的key仅分配了一组values 该值被列为enum在打字稿中 请注意 我确实想检查values直接像下面解释的那样 但想检查一下enum type 检查键 值是否为 JSON 我需要检查仅使用已知区域json fi
  • 在 Azure DevOps 中创建新的 Kubernetes 服务连接时,您似乎没有有效的 Azure 订阅

    我正在尝试创建一个新的Kubernetes 服务连接 for Azure 开发运营 但是当我尝试创建它时出现错误 您似乎没有有效的 Azure 订阅 我尝试了几种方法来解决该问题 但没有效果 这是我解决问题的方法 我只是去了Azure 开发
  • 将 BufferedInputStream 转换为图像[重复]

    这个问题在这里已经有答案了 我无法将我的斑点变成缓冲图像以便我可以使用它 我从使用 inputstream 上传的数据库中获取了一个 blob jpg 图像 我注意到在我的数据库中它存储为 BufferedInputStream 我得到的斑
  • 多重拆分并分配order_id

    我有一些需要针对每个组件进行分析的地址字符串 SQL 小提琴演示 CREATE TABLE Table1 ID int address varchar 41 INSERT INTO Table1 ID address VALUES 1 ca
  • ggplot2/gis 在多边形区域内绘图

    出于复制目的 请考虑以下数据 library rgdal library ggplot2 library rgeos download file http spatialanalysis co uk wp content uploads 2
  • Django 应用程序不可见

    我第一次尝试使用以下方式部署 Django 应用程序mod wsgi with Apache on a Ubuntu 12 04虚拟机 我一直在关注几个教程 特别是艾曼 法哈特博客 this 优秀的 YouTube 视频当然还有 Djang
  • 在 HTML5 中使用 null 实体(例如 �)是否有效?

    我相信空实体 x0 在 XML 中正式无效 但是我在处理HTML的时候就遇到过 也许代表一种零宽度字符 但是它是有效的标记吗 浏览器会崩溃吗 不 它不是有效的 HTML5 您可以通过验证器运行以下片段轻松地看到这一点 例如W3C s 这将导
  • 在 Windows 上设置 Eclipse C++ 编译器,无需自动安装或更改系统路径

    我试图在 Eclipse 上安装 C 编译器而不更改 Path 变量 因为我不能 机器的权限有限 Eclipse 显然运行良好 它抱怨的是构建运行不正常 我注意到的第一件事是库文件 stdio h 出现 未解决的包含 警告 我在 Eclip
  • 尝试在某些设备上播放 mp3 ActivityNotFoundException

    我从尝试播放 mp3 文件的 Galaxy Ace 设备收到崩溃报告 来自服务器的音频始终为 mp3 这是我的代码 Intent intentaudio new Intent intentaudio setAction Intent ACT
  • 绑定到 DataGridView.Datasource 时加载 DataTable 缓慢

    我搜遍了所有地方 但我无法弄清楚这一点 我正在开发一个 Winforms UI 该 UI 正在提取需要在 DataGridView 中显示的大量行 我已经阅读了有关限制行数和分页的所有内容 但我绝对没有好的方法可以做到这一点 基本上 我正在
  • 斯坦福大学对 Python NLTK 的通用依赖关系

    有什么方法可以使用 python 或 nltk 获取通用依赖项吗 我只能生成解析树 Example 输入句子 My dog also likes eating sausage Output Universal dependencies nm
  • 如何在ios7中使用ALAssetLibrary获取所有照片?

    我无法像苹果 iPhone 在 ios8 中那样即时获取照片 我已经使用 PHAsset 和 Photos framework 实现了 ios8 现在 当我在 ios7 设备中运行相同的代码时 它不会返回任何内容 所以 我使用 ALAsse
  • 无法连接 EA 中活动图中的活动

    您好 我目前遇到 EA 中活动图的问题 我正在尝试描述一个代码 当我添加启动控制节点和活动节点时 我无法通过控制流连接它们 当我尝试将两个活动与控制流连接在一起时 会发生同样的问题 我收到以下错误 请求的连接不符合 UML 有人可以就此提供
  • 如何使用 ExoPlayer IMA 扩展在特定点展示广告?

    我在用ExoPlayer 2 7 3带有 IMA 扩展名 我必须以一定的时间间隔展示广告 我已经成功地整合了AdsLoader and AdsMediaSource 我正在接收并展示广告 但广告只出现在电影的开头 如何让广告在我想要的时间点
  • 使用 openxml 创建 powerpoint 的示例

    在哪里可以找到使用 OpenXML 在 ppt 文件中插入文本和图像的 Hello World 我无法生成简单的模板 在开发 PowerPoint 模板之前 请阅读此内容中的presentationML 结构PDF 请参阅以下链接以使用 O
  • 如何在 Tkinter 中将点击事件绑定到 Canvas? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我只是想知道是否有任何可能的方法使用 Tkinter 将单击事件绑定到画布 我希望能够单击画布上的任意位置并将对象移动到其中 我能够做出动作 但我还没有找到将点击绑定到画布的方法
  • 在数据框中使用向量的打印方法

    考虑以下向量x x lt c 6e 06 75000400 743450000 340000 4300000 我想打印x以百万计 所以我编写了一个 print 方法并将一个类分配给x print million lt function x
  • Play 框架 2 (Java) 表单数据绑定与嵌套允许字段

    考虑以下模型 public class Contact Required public String name Valid public List