asp.net 在方法之间共享DTO类是否会造成有关“额外”属性的漏洞?

vltsax25  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(100)

我正在创建一个API,其中有两个方法。第一个是Register方法:

[HttpPost("register")]
public async Task<ActionResult<User>> Register(UserDto request)
{
  // User validation
}

第二种是Login方法:

[HttpPost("login")]
public async Task<ActionResult<User>> Login(UserDto request)
{
  // User validation
}

下面是我的DTO类:

public class UserDto
    {
        public string Username { get; set; } = string.Empty;
        public string Password { get; set; } = string.Empty;
        public string Name { get; set; } = string.Empty; 
        public string Lastname { get; set; } = string.Empty;
        public string PhoneNumber { get; set; } = string.Empty;
    }

主要问题是我需要每个方法的不同属性。在REGISTRATION方法中,我需要所有字段:用户名,密码,姓名,姓氏,电话号码)。而在LOGIN方法中,我只需要用户名和密码字段。
我担心在方法之间使用相同的DTO类会导致系统漏洞(这是可行的,但可能会暴露不需要的额外字段)。我是否需要创建另一个DTO类,其中只包含每个方法所需的字段?是否有其他方法可以实现这一点?

knpiaxh1

knpiaxh11#

可以使用的另一种方法是将公共属性移动到基类,然后在需要时继承基类。对于示例,可以将UserName和Password移动到基类。

public class UserBaseDto
{
   public string Username { get; set; } = string.Empty;
   public string Password { get; set; } = string.Empty;
}

public class UserDto : UserBaseDto
{
   public string Name { get; set; } = string.Empty; 
   public string Lastname { get; set; } = string.Empty;
   public string PhoneNumber { get; set; } = string.Empty;
}

但是,除非绝对必要,否则最好避免在DTO中使用继承。如果确实需要使用继承,请尽量使基类保持简单,以便任何更改都不会对派生类产生太大影响

相关问题