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.
[Required]
) pueden dar lugar a problemas si un usuario malintencionado comunica una solicitud que contiene menos datos de los esperados.[Required]
. Esto podría producir un comportamiento inesperado de la aplicación.
public enum ArgumentOptions
{
OptionA = 1,
OptionB = 2
}
public class Model
{
[Required]
public String Argument { get; set; }
[Required]
public ArgumentOptions Rounding { get; set; }
}
[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.
public class ChildModel
{
public ChildModel()
{
}
[Required]
public String RequiredProperty { get; set; }
}
public class ParentModel
{
public ParentModel()
{
}
public ChildModel Child { get; set; }
}
ParentModel.Child
, la propiedad ChildModel.RequiredProperty
tendrá un [Required]
no confirmado. Esto puede producir resultados no esperados y no deseados.
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:nil
reply:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"Auth was OK");
}
}];
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "", reply: { (success, error) -> Void in
if (success) {
print("Auth was OK");
}
else {
print("Error received: %d", error!);
}
})
SHARED
, que permite tener acceso de lectura y escritura.
results = query.execute(Database.SHARED);
results = query.execute(); //missing query mode
GC.Collect()
a menudo parece lograr que el problema desaparezca.GC.Collect()
es el método incorrecto. De hecho, llamar a GC.Collect()
puede provocar problemas de rendimiento si se realiza con demasiada frecuencia.System.gc()
a menudo parece lograr que el problema desaparezca.System.gc()
es el método incorrecto. De hecho, llamar a System.gc()
puede provocar problemas de rendimiento si se realiza con demasiada frecuencia.