2009-08-28 19 views
5

Czy jest możliwe, aby tam przez wszelkiego rodzaju wartości $_GET lub $_POST który jest nie tablica lub ciąg?

Dla tych, którzy czytają kod lepiej, jest to w ogóle możliwe, aby uruchomić ten prosty skrypt na serwerze WWW i dostać go, aby rzucić wyjątek?

// crash-me.php 
<?php 

function must_be_array_or_string($value) { 
    if(is_string($value)) 
     return; 
    if(is_array($value)) { 
     foreach($value as $subValue) 
      must_be_array_or_string($subValue); 
     return; 
    } 
    throw new Exception("Value is " . gettype($value)); 
} 

if(isset($_GET)) 
    must_be_array_or_string($_GET); 

if(isset($_POST)) 
    must_be_array_or_string($_POST); 

Odpowiedz

1

Wierzę w przypadku wysyłania plików, pola 'error' i 'size' byłoby ints.

7

Z wyjątkiem przesyłania plików, wartości są zawsze ciągami lub tablicami.

+0

Przesyłanie plików nie występuje w '$ _POST' lub' $ _GET', należy sprawdzić '$ _FILES', aby uzyskać informacje o przesyłaniu plików (a nawet wtedy zawartość jest nadal tablicami i ciągami). – dcousineau

+0

@dcousineau: Jesteś pewien? Wierzę, że indeks "błąd" w '$ _FILES' zawiera liczby całkowite, takie jak' UPLOAD_ERR_OK'. –