• User Attivo

    Problema di accesso a valori di POST

    Salve,
    sto testando un nuovo mantainer e mi sono accorto che il modo con cui è stato settato PHP mi impedisce di accedere ad i valori del POST in modo diretto...mi spiego meglio.
    Se ho un campo in un form con nome 'nome_var' sono abituato ad acederci con '$nome_var' invece adesso devo accedervi con $_POST['nome_var'].

    Come si ovvia a questo inconveninete senza riscrivere migliaia di righe di codice?

    Tnx


  • User Attivo

    Il metodo che usi tu è vecchio e poco sicuro, ma veramente poco sicuro!
    Ti conviene prevedere una riscrittura di codice.


  • Moderatore

    Non credo puoi ovviarci... al massimo potresti aggiungere, anche in un file esterno che poi richiamerai, delle righe come queste:

    [php] $variabile = $_POST['variabile'];
    $variabile1 = $_POST['variabile1'];[/php]

    Fammi sapere... 🙂


  • User Attivo

    ehm...giusto per sapere...a che rischi vado incontro?

    una funzioncina di questo tipo equivale al suicidio?

    foreach ($_POST as $k => $v)
    $$k = $v;


  • User Attivo

    Io direi che è anche contro gli standard ^^
    Se non altro è un modo moooolto ma molto sbagliato di programmare.
    Perche se io vedo il tuo script, lo posso anche andare a buttare nel cesso e suicidarmi, perche non capirò mai cosa è quella variabile ^^

    E' anche questione di ordine e precisione oltre che di sicurezza


  • User Attivo

    Lo standard non è un problema che mi tange al momento, l'ordine e la precisione non penso si possano giudicare senza aver visto uno script. Vorrei piuttosto sapere quali sono le REALI problematiche di sicurezza.

    Cmq, utilizzando questa tecnica ho potuto comodamente modificare il modo di passare l'input (da form a url) a diversi script senza cambiare niente.

    Con la funzione menzionata sopra ho risolto il problema, ma vorrei che qualcuno gentilmente mi spiegasse quali sono i rischi che corro.


  • User Attivo

    che se ne $_POST ti ci infilano della merda ultraterrena ti vanno magari a fare delle query che ti pigliano le password o ti modificano a vanvera ^^
    invece nel modo che ti indicano puoi farci i controlli e circoscrivere i dati in entrata a solo quelli che vuoi


  • User Attivo

    @nedone said:

    Vorrei piuttosto sapere quali sono le REALI problematiche di sicurezza.

    Sul manuale c'è qualche esempio: http://se2.php.net/register_globals

    Se vuoi puoi usare la funzione extract, leggi bene l'avvertimento del manuale che è riferito proprio al tuo caso 😉


  • User Attivo

    Grazie a tutti.


  • Super User

    diciamo che se usi quel modo di programmare può succedere che una nave atterri direttamente sulla tua macchina, l'albero della nave si spezza e cade sul tuo motorino, la ruota anteriore del motorino si stacca e rotolando ti picchia contro lo stinco della gamba destra e rimani zoppo per un tempo variabile che va da 5 a 10 ore.

    :lol:

    i problemi di sicurezza non riguardano sql injection o problemi "dall'esterno" più che altro sono un problema di gestione delle variabili e di scope delle stesse.

    poniamo che da un form passi un campo che hai chiamato id

    nella pagina che accetta questi dati interroghi il db per estrarre una lista di valori e (per sbaglio) utilizzi la variabile id in modo temporaneo per memorizzare l'id del record che stai analizzando.

    in uno scenario del genere, estremamente banale (immagino però che la tua applicazione sia più complessa e di conseguenza sia più difficile individuare questo genere di problemi) rischi di sovrascrivere il valore passato come parametro con il metodo post scrivendoci il valore che viene preso dal db.

    Quando effettivamente ti serve recuperare il valore passato ti puoi trovare valori che non corrispondono a quello che ti aspetti.

    un utilizzo corretto (quindi usando l'array associativo $_POST) consente di scrivere codice più pulito, di più facile lettura da parte di altri programmatori, il che non fa mai male, e di ridurre il rischio di errori di programmazione.
    Già sono tantissimi i rischi di errore di programmazione, io ti consiglio di utilizzare tutti gli strumenti possibili messi a disposizione di php per evitare almeno gli evitabili.

    per farti un esempio php è un linguaggio non tipizzato, vuol dire che le variabili non hai la necessità di dichiararle ed inizializzarle (anche se quest'ultima fase è altamente consigliabile).
    Questo ti può consentire di memorizzare una stringa in una variabile che tu hai deciso essere per un intero.

    PHP non fornisce strumenti a livello di linguaggio per evitare questo genere di rischio di programmazione e quindi sei tu, programmatore, che devi prestare attenzione a non incapparci. Altri linguaggi come possono essere il c, c++ etc sono altamente tipizzati e aiutano in qeusto senso a restare sui binari.

    concludendo:
    concordo con gli altri nel sostituire tutti i punti del codice dove hai utilizzato il metodo deprecato che prevede che il file php.ini sia configurato con la variabile REGISTER_GLOBALS=1 (cosa che oramai non trovi più da nessuna parte se non in server dedicati dove l'ambiente te lo fai come serve a te).