2012-11-12 12 views
5

W jednym z wywiadów na pytanie otrzymuję poniżej pytanieOgraniczanie ludzi za pomocą PHP GET Variable

„Jak można ograniczyć deweloperom w zwyczaj budowania ram korzystania $_GET zmienną”.

Mamy własne ramy zwyczaj budowania ale w naszym ram nie możemy ograniczać ludzi do korzystania $_GET lub $_POST zamiast $this->request->get lub $this->request->post.

Mamy metodę dostępu do tej zmiennej, ale ludzie przez większość czasu używają $_GET lub $_POST zamiast naszych metod.

Czy możesz dać mi odpowiedź na to?

Dzięki

+1

Utwórz repozytorium * odrzuć * dla kodu, który zawiera $ _GET/$ _ POST i poinstruuj stronę naruszającą, jakich technik użyć :) (Alternatywnie, nie odrzucaj, ale obwiniaj/sprawdzaj kod: ten sam pomysł - wykryj i popraw.) –

+0

Bez względu na to, jakie rozwiązanie przyjmiesz, programista zawsze będzie w stanie "parse_str (getenv (" QUERY_STRING "), $ _GET = array())" ominąć go. – eggyal

Odpowiedz

6

w php.ini, usuń G i P znaki z opcją variables_order.

Ewentualnie, jeśli chcesz je Nienawidzę cię na zawsze, można skopiować zawartość superglobalną, a następnie ustawić go do instancji klasy, która zgłasza wyjątek, gdy spróbujesz z nim kontaktować:

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

Wspomniane '$ this-> request-> get' i' $ this-> request-> post' prawdopodobnie używają '$ _POST' i' $ _GET'. Więc usuwając 'G' i' P' te właściwości zwrócą 'null'. – Leri

+1

@PLB Masz rację. Zobacz zaktualizowane rozwiązanie. –

+0

miłe obejście +1 – Leri

Powiązane problemy