Un API es un contrato entre un autor de llamada y un receptor de llamada. Las formas de abuso de API más comunes los produce el autor de llamada cuando no consigue atender su fin de este contrato. Por ejemplo, si un programa no consigue llamar chdir() después de llamar chroot(), se viola el contrato que especifica cómo cambiar el directorio de origen activo de una forma segura. Otro buen ejemplo de un abuso de manual es esperar que el receptor devuelva una información de DNS de confianza al autor de llamada. En este caso, el autor de llamada abusa el API del receptor haciendo determinadas suposiciones sobre su comportamiento (que el valor de retorno se puede usar con fines de autenticación). También se puede violar el contrato entre el autor de llamada y el receptor desde el otro lado. Por ejemplo, si un codificador envía SecureRandom y devuelve un valor no aleatorio, se viola el contrato.
ASP.NET MVC Bad Practices: Optional Submodel With Required Property
El marco ASP.NET MVC intentará enlazar parámetros de solicitud en las propiedades del modelo, incluidos los submodelos.
Si un submodelo es opcional, es decir, el modelo principal tiene una propiedad sin el atributo
[Required]
, y si un usuario malintencionado no comunica ese submodelo, la propiedad principal tendrá un valor null
y los campos requeridos del modelo secundario no estarán confirmados por la validación del modelo. Esta es una forma de ataque con cantidad reducida de operaciones POST.Tenga en cuenta las siguientes definiciones de clases de modelos:
public class ChildModel
{
public ChildModel()
{
}
[Required]
public String RequiredProperty { get; set; }
}
public class ParentModel
{
public ParentModel()
{
}
public ChildModel Child { get; set; }
}
Si un usuario malintencionado no comunica un valor para la propiedad
ParentModel.Child
, la propiedad ChildModel.RequiredProperty
tendrá un [Required]
no confirmado. Esto puede producir resultados no esperados y no deseados.