Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Vulnerabilità script AJAX

    Ho scritto questo script in AJAX:
    codice:
    function update (object, container) {
        if (object.length>0) {
            var url="./script/update.php?page="+object;
            XMLHTTP=switchBrowser(function () { setContent(container) });
            XMLHTTP.open("GET",url,true);
            XMLHTTP.send(null);
        }
        else {
            document.getElementById(container).innerHTML = "";
        }
    }
    
    function setContent (container) {
        if (XMLHTTP.readyState==4) {
            var element=document.getElementById(container);
            element.innerHTML=XMLHTTP.responseText;
        }
    }
    
    function switchBrowser (browser) {
        if (navigator.userAgent.indexOf("MSIE")!=(-1)) {
            var cat="Msxml2.XMLHTTP";
            if (navigator.appVersion.indexOf("MSIE 5.5")!=(-1)) {
                cat="Microsoft.XMLHTTP";
            }
            try {
                objectXMLHTTP=new ActiveXObject(cat);
                objectXMLHTTP.onreadystatechange=browser;
                return objectXMLHTTP;
            }
            catch(e) {
                alert("Errore");
            }
        }
        else {
            objectXMLHTTP=new XMLHttpRequest();
            objectXMLHTTP.onload=browser;
            objectXMLHTTP.onerror=browser;
            return objectXMLHTTP;
        }
    }
    update.php
    codice:
     
    <?php
        $page=$_GET['page'];
        include("../".$page);
    ?>
    Questo script comporta qualche vulnerabilità o problemi di sicurezza?

  2. #2
    Lo script javascipt non ha nessuna vulnerabilità. Piuttosto devi controllare la pagina php: se ad esempio questa si connette a un database devi evitare le sql injection...

  3. #3
    Attraverso il mio script AJAX la pagina php si connette solo ad altre pagine php ma non so se ci sono problemi...
    In locale potrebbero richiamare la pagina php con altri parametri?

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ajax non rende meno sicura l'applicazione,
    la sicurezza della parte in php potrebbe essere argomento di discussione
    ma e' il caso tu la proponga nel forum di competenza
    sposto

  5. #5
    Originariamente inviato da starcraftworld
    Attraverso il mio script AJAX la pagina php si connette solo ad altre pagine php ma non so se ci sono problemi...
    In locale potrebbero richiamare la pagina php con altri parametri?
    Se anche ci fossero vulnerabilità di certo potrei sfruttarle anche andando all'indirizzo http://www.example.com/script/update.php?page=value direttamente dalla barra degli indirizzi

  6. #6
    Ma la pagina in php per come è fatta costituisce una vulnerabilità?

  7. #7
    La pagina update.php no. E' la pagina che includi che potrebbe averne. Lo dico solo perchè non ho la possibilità di vederla

  8. #8
    La falla di sicurezza sta nel fatto che il tuo script non delimita in alcun modo il tipo di input ricevuto via GET.

    Di conseguenza un qualsiasi utente, semplicemente cambiando il valore di $_GET['page'], può modificare il comportamento del tuo script facendogli includere files diversi da quelli che hai previsto.
    Già solo a livello di grafica immagina il risultato se inserissi in $_GET['page'] il percorso alla index page del tuo sito.

    Se le direttive nel file php.ini lo permettessero (URL fopen wrappers abilitati), si potrebbe addirittura includere files esterni con dentro ciò che si vuole.

    Per evitare ciò, devi introdurre un livello di astrazione (abstraction layer), cioè un "filtro" che si interponga tra i dati ricevuti e le operazione che con essi vengono svolte.
    Puoi farlo anche con la sola programmazione procedurale, senza ricorrere alle classi.

    Innanzitutto, non puoi inserire un percorso nel value di un input del form, che può essere modificato con le conseguenze sopra citate.
    Ad esempio puoi associare ai percorsi possibili, dei numeri:

    codice:
    <form ...>
    	<input type="radio" name="abc" value="1">Torna alla home
    
    	<input type="radio" name="abc" value="2">Vai alle news
    
    	<input type="radio" name="abc" value="3">Vai dove vuoi...
    
    <input type="submit">
    </form>
    Codice PHP:

    <?php
    if (isset($_GET['page'])) { $page = (int)$_GET['page']; } else { $page 1; }

    if (
    $page == 1) { $inc "home.php"; }
    elseif (
    $page == 2) { $inc "news/daily.php"; }
    elseif (
    $page == 3) { $inc "../other.php"; }
    else { 
    $inc "home.php"; }

    include(
    $inc);
    ?>
    Assegna il valore di $_GET['page'] alla variabile $page, prevedendo anche il valore che quest'ultima avrà nel caso in cui $_GET['page'] non fosse definita (se volessi usare direttamente la variabile GET dovresti fare ogni volta la verifica if (isset($_GET['page'])) ... per evitare errori "notice", in tal modo risparmi tempo e codice).

    L'operatore di type casting (int) forza la variabile ad essere quello che tu ti aspetti, e cioè un numero (vedi guida sulla sicurezza in PHP).

    Fatto questo, supponendo che i casi da te previsti siano per esempio 3, stabilisci il valore del percorso, e con l'ultima riga anche un percorso di default se qualcuno avesse inserito via GET un valore non previsto.
    In tal caso riduci al minimo i comportamenti indesiderati.

    P.S. Potresti anche sostituire le istruzioni condizionali con uno switch.
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.