2012-11-12 75 views
5

在採訪的問題,我得到以下問題限制人們使用PHP變量GET

的一個「你怎麼可以限制你的開發人員在您的自定義生成框架 使用$_GET變量。」

我們有自己的自定義生成框架,但在我們的分析框架,我們不能限制人們到位的$this->request->get$this->request->post使用$_GET$_POST

我們有訪問此變量的方法,但大多數時間人們使用$_GET$_POST而不是我們的方法。

你能給我答案嗎?

感謝

+1

爲包含$ _GET/$ _ POST的代碼創建存儲庫*拒絕*並指示違規方使用什麼技術:)(或者,不要拒絕,但責備/代碼審查:儘管相同的想法 - 檢測和更正。 ) – 2012-11-12 07:49:45

+0

無論採用什麼解決方案,開發人員總是可以通過'parse_str(getenv('QUERY_STRING'),$ _GET = array())'來規避它。 – eggyal

回答

6

在php.ini,從variables_order選項刪除GP字符。

或者,如果你想讓他們恨你一輩子,你可以複製超全局中的內容,然後將其設置爲每次嘗試與其進行交互拋出異常的類的實例:

class supaglobal implements arrayaccess 
{ 
    public function _construct(){} 

    function offsetExists($offset) { 
     throw new Exception("Don't use GET, bro"); 
    } 
    function offsetSet($property, $value){ 
     throw new Exception("Don't use GET, bro"); 
    } 
    function offsetUnset($property) { 
     throw new Exception("Don't use GET, bro"); 
    } 
    function offsetGet($property){ 
     throw new Exception("Don't use GET, bro"); 
    } 
} 

$approvedget = $_GET; 
$_GET = new supaglobal(); 
$abcd = $_GET["abcd"]; // throws exception 
$abcd = $approvedget["abcd"]; // A - OK 
+1

提到'$ this-> request-> get'和'$ this-> request-> post'可能使用'$ _POST'和'$ _GET'。所以通過刪除'G'和'P',這些屬性將返回'null'。 – Leri

+1

@PLB你說得對。查看更新的解決方 –

+0

漂亮的解決方法+1 – Leri