2011-03-18 78 views
2

從用戶輸入動態調用類中的方法是否存在安全問題?例如:動態調用PHP類方法

<?php 
    class A { 
     public function foo() { 
      return true; 
     } 
    } 

    $obj = new A(); 

    $method = $_GET['method']; 

    $obj->$method(); 

我知道,用戶將能夠調用內A任何方法,和我很好的那個。我只是好奇,如果可能有其他可能的安全問題。

+2

如果你有問題的方法,只是不要讓它們公開。除此之外,我想不出任何問題。出於同樣的原因,請小心繼承和繼承的方法。 – acm 2011-03-18 16:35:12

+2

您可能想要審覈允許調用的方法(通過白名單)......不僅僅是爲了測試公共方法(嘗試調用私有方法會導致錯誤),而是爲了防止用戶黑客調用__destruct – 2011-03-18 16:36:01

+0

它也是如果這些方法需要參數,那麼您將獲得樂趣,如果這些方法是用戶提供的,那麼您肯定需要進行某種形式的審查。 – 2011-03-18 16:38:04

回答

4

您的用戶將能夠嘗試調用在類的任何可能的方法 - 甚至嘗試調用不存在的方法(並得到一個致命錯誤)
如果你對這個很好......我想這是好的。

它看起來不太好,但我不認爲可以注入任何其他類型的代碼。


不過,我至少會檢查是否存在方法 - 使用method_exists()

+0

'method_exists'肯定會與其他一些檢查一起使用。謝謝。 – MitMaro 2011-03-18 16:42:29

1

是它可能是一個壞主意,也許你應該限制所允許的方法。也許可以在數組中定義允許的方法,如果$方法不在這個白名單中則會拋出異常。

此外,您還需要使用magic __call($ name,$ args)方法來允許調用這些用戶定義的方法。