Very short snippet: come identificare le chiamate Ajax in PHP

Quando si costruisce un Gateway Ajax, cioè un file che viene richiamato dall’oggetto XmlHTTPRequest Javascript, si può involontariamente creare un tunnel per intrusioni non gradite. Essendo infatti un file come gli altri, posizionato sul nostro server, risulta raggiungibile anche dalla barra indirizzi del browser. Fortunatamente esiste un modo semplice per identificare il tipo di richiesta:

1
2
3
4
5
if (@isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
    // Chiamata dall'oggetto HTTPRequest (Ajax)
} else {
    // Non fare nulla o mostra un alert
}

In questo modo abbiamo impedito le chiamate dalla barra indirizzi del browser. La chicciola (@, at) non è strettamente necessaria, tuttavia, se gli header sono stati già inviati alla pagina, si potrebbe ottenere uno spiacevole Warning.

4 commenti a: “ ”

  1. 08 apr, 2010 Michele:

    A me questo script non funziona … le chiamate ajax rimangono come “in stallo” …

  2. 08 apr, 2010 Giovambattista Fazioli:

    @Michele: probabilmente dipende dalle tue impostazioni Server, in particolare quelle di PHP. La variabile $_SERVER['HTTP_X_REQUESTED_WITH'] viene impostata automaticamente dall’ambiente server quando riceve una richiesta dall’oggetto XmlHTTPRequest. Prova a verificare le tue impostazioni, anche perchè a me funziona… :)

  3. 08 apr, 2010 Michele:

    @Giovambattista Fazioli: Scusa la mia ignoranza, ma non so come verificare questa impostazione :(

  4. 08 apr, 2010 Giovambattista Fazioli:

    @Michele: se non puoi chiedere al tuo amministratore del server, verifica bene lo script che hai usato, forse il problema è nel codice e non nel server. Prova con un semplice controllo sulla $_SERVER['HTTP_X_REQUESTED_WITH'] o, se possiedi FireFox con FireBug, alla verifica dei dati inviati e ricevuti sulla rete.

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL