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()
會帶來效能問題。