API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。
[Required]
属性)可能导致问题。[Required]
验证属性。这可能产生不可预期的应用程序行为。
public enum ArgumentOptions
{
OptionA = 1,
OptionB = 2
}
public class Model
{
[Required]
public String Argument { get; set; }
[Required]
public ArgumentOptions Rounding { get; set; }
}
[Required]
属性 -- 如果攻击者没有传送子模型,那么父模型将有一个 null
值并且子模型要求的字段将不会由模型验证声明。这是发布中攻击的一种表单。
public class ChildModel
{
public ChildModel()
{
}
[Required]
public String RequiredProperty { get; set; }
}
public class ParentModel
{
public ParentModel()
{
}
public ChildModel Child { get; set; }
}
ParentModel.Child
属性的值,那么 ChildModel.RequiredProperty
属性将有一个未声明的 [Required]
。这可能产生无法预期和不良后果。
[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
查询模式,该模式允许读取和写入访问。
results = query.execute(Database.SHARED);
results = query.execute(); //missing query mode
GC.Collect()
的调用似乎可以使问题迎刃而解。GC.Collect()
并非什么好方法。事实上,过于频繁地调用 GC.Collect()
会带来性能问题。System.gc()
的调用似乎可以使问题迎刃而解。System.gc()
并非什么好方法。事实上,过于频繁地调用 System.gc()
会带来性能问题。