Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.
[Required]
) pode provocar problemas quando um invasor comunica uma solicitação que contém menos dados do que o esperado.[Required]
. Isso pode provocar o comportamento inesperado do aplicativo.
public enum ArgumentOptions
{
OptionA = 1,
OptionB = 2
}
public class Model
{
[Required]
public String Argument { get; set; }
[Required]
public ArgumentOptions Rounding { get; set; }
}
[Required]
-- e se um invasor não comunicar esse submodelo, então a propriedade pai terá um valor null
, e os campos obrigatórios do modelo filho não serão confirmados pela validação de modelo. Essa é uma das formas de ataque under-posting.
public class ChildModel
{
public ChildModel()
{
}
[Required]
public String RequiredProperty { get; set; }
}
public class ParentModel
{
public ParentModel()
{
}
public ChildModel Child { get; set; }
}
ParentModel.Child
, a propriedade ChildModel.RequiredProperty
terá um [Required]
não confirmado. Isso pode produzir resultados inesperados e indesejáveis.
[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
, o que permite acesso de leitura e gravação.
results = query.execute(Database.SHARED);
results = query.execute(); //missing query mode
GC.Collect()
às vezes parece fazer com que o problema desapareça.GC.Collect()
é a coisa errada a se fazer. Na verdade, chamar GC.Collect()
pode causar problemas de desempenho isso for feito com demasiada frequência.System.gc()
às vezes parece fazer com que o problema desapareça.System.gc()
é a coisa errada a se fazer. Na verdade, chamar System.gc()
pode causar problemas de desempenho isso for feito com demasiada frequência.