$ _GET iniezione attraverso l'URL?

1

Sto costruendo un sito web e mi chiedevo cosa sarebbe successo se avessi lasciato il mio comando $_GET non autorizzato in alcuni casi semplici come questo:

<?php
if (isset($_GET['example'])) {
    $object_name = $_GET['example'];
}else{
    header( 'Location: ./index.php');
    exit();
}
echo $object_name;
?>

Dove sto prendendo qualche input per l'url www.example.com/file.php?example=30 C'è qualcosa che potrei sostituire 30 con quello mi darebbe accesso al codice di scrittura direttamente sul back-end del sito web, o altre cose brutte?

Inoltre, se non avessi la stampa lì, ma invece passassi quella variabile a qualcosa di più complicato, c'è qualche rischio di lasciarla non sana? Qual è il miglior metodo di igiene? Vorrebbe htmlentities() fermare tutto?

    
posta Anders 13.02.2017 - 21:44
fonte

3 risposte

4

Ciò che il tuo esempio in pratica fa è riprendere ciò che gli dai. Ciò significa che un utente malintenzionato potrebbe creare un collegamento con un determinato contenuto nell'URL e chiunque farà clic sul link verrà visualizzato il contenuto scelto dall'attaccante.

Quindi, come può essere usato, oltre a moderarti in modo imbarazzante? Dipende dal tipo di contenuto. Poiché non viene specificato nient'altro, suppongo che sia text/html . Se un utente malintenzionato può pubblicare HTML, può anche pubblicare script che verranno eseguiti nel browser come se fossero di origine. Ciò a sua volta significa che lo script potrebbe ad es. rubare i cookie di autenticazione, le password del registro delle chiavi o eseguire azioni per conto della vittima. Quello che hai qui è un primo esempio di riflesso XSS , e questo è molto , molto male.

Ma l'hacker potrebbe eseguire il codice sul back-end, cioè il server? No, non direttamente. La risposta è inviata al cliente, dopo tutto. Ma questo potrebbe essere usato come un trampolino di lancio per l'escalation di privelige che potrebbe facilmente portare a rimuovere l'esecuzione del codice se c'è qualche tipo di debolezza in qualsiasi webapp che stai usando, ad es. consente agli amministratori di modificare il codice PHP.

Quindi come si disinfetta? Questa è una domanda a cui rispondere in generale, ma lasciatemi dire almeno questo: htmlentities() ti proteggerà in alcuni casi ma non tutti . Per capire quando è utile e perché, leggi its documentaiton e foglio cheat di prevenzione XAS di HOWASP .

Come indicato nella risposta di Tom , fare altre cose con i dati non pubblicitari porterà ad altri problemi, ad es. SQL injection se lo si utilizza nelle query SQL.

    
risposta data 14.02.2017 - 10:22
fonte
2

È problematico ciò che accade a quella variabile più avanti nel codice.

Se viene utilizzato per una query SQL, potresti essere vulnerabile per un'iniezione SQL.

Se si fa eco alla variabile, è possibile aggiungere script all'url che viene eseguito in quel momento.

Suggerirei htmlspecialchars () per servizi igienico-sanitari PHP e mysqli_real_escape_string / preparare le istruzioni per l'igienizzazione per le query DB

    
risposta data 13.02.2017 - 21:50
fonte
0

Non fidarti dell'input dell'utente. Secondo il tuo codice non hai adattato il valore di $ _GET. Quindi è altamente vulnerabile e può portare a molti tipi di vulnerabilità come LFI, RFI, RCE.

    
risposta data 15.02.2017 - 09:33
fonte

Leggi altre domande sui tag