天天看點

《Java編碼指南:編寫安全可靠程式的75條建議》—— 指南4:確定安全敏感方法被調用時參數經過驗證

本節書摘來異步社群《java編碼指南:編寫安全可靠程式的75條建議》一書中的第1章,第1.4節,作者:【美】fred long(弗雷德•朗), dhruv mohindra(德魯•莫欣達), robert c.seacord(羅伯特 c.西科德), dean f.sutherland(迪恩 f.薩瑟蘭), david svoboda(大衛•斯沃博達),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

當應用程式代碼調用安全敏感方法時,必須驗證被傳遞到方法中的參數。特别是,null值可能會被某些特定的安全敏感方法解讀為良性參數,導緻覆寫程式預設設定。盡管安全敏感方法應該是防禦式編碼,但是用戶端代碼也必須驗證參數。如果不這樣做,就會導緻特權更新,可以執行任意代碼。

下面的違規代碼示例展示了一個雙參數方法doprivileged(),它的第二個參數是一個通路控制上下文。這段代碼的功能是從以前儲存的上下文中恢複特權。

if (accesscontrolcontext == null) {

 throw new securityexception("missing accesscontrolcontext");

}

accesscontroller.doprivileged(

 new privilegedaction() {

  public void run() {

   // ...

  }

 }, accesscontrolcontext);<code>`</code>

必須徹底了解安全敏感方法,并驗證它們的參數,以防止意想不到的參數值(如空值)導緻的極端情況。如果有意想不到的參數值被傳遞給安全敏感方法,那麼有可能會導緻程式可以執行任意代碼,還有可能會導緻特權更新。