Jump to content

Sicurezza - Chiamata ajax a controller di un modulo


Madsex

Recommended Posts

Ciao a tutti,

ho creato un modulo con un suo front controller a questo front controller vorrei accedere tramite una chiamata ajax.

Ho seguito tutti i dettami della documentazione ed in effetti la chiamata ajax funziona.....clicco sul bottone creaato, parte il mio script js che effettua la chiamata ajax alla url predisposta precedentemente attraverso Media::addJsDef nel file principale del modulo.....non vi tedio con i vari script perchè di fatto funziona.

Mi sono fatto alcune domande e ho fatto anche delle prove in merito ma non so dove sbaglio a livello concettuale prima di tutto.

Mi sono chiesto: se chiamo questa url, che di fatto stà nel codice sorgente delle pagine del sito, direttamente da browser che succede?

La risposta è : niente, perchè il controller si aspetta una chiamata POST e alla fine si visualizza una pagina bianca....poco male diciamo.

Seconda domanda, se però guardando meglio il codice in pagina comprendo la action che scatena il metodo, potrei effettuare una curl da qualunque server.....faccio una prova ed in realtà è proprio così. Con una curl POST direttametne sul controller mi si restituiscono i risultati che avrei avuto con la chiamata ajax.

Ora mi domando. Siccome la chiamata che stò andando a far, crea record nel DB e fa una serie di altre cose.........come posso proteggermi da chiamate esterne al mio server (come minimo) ?

Spero di aver spiegato bene il dubbio, se serve posto gli script php e js.

Grazie in anticipo per qualunque suggerimento.

 

Link to comment
Share on other sites

Ciao,

credo che dovresti assicurarti che il tuo codice non possa essere chiamato direttamente da fuori e dovresti usare il controllo sul "security token" generato direttamente da Prestashop, proprio per cercare di migliorare la sicurezza.

Qui trovi un link che può esserti utile per migliorare la sicurezza del tuo modulo:
https://build.prestashop-project.org/howtos/module/Common-mistakes-while-coding-module/

Buona giornata,
Federica

Link to comment
Share on other sites

Ciao,

grazie per l'interesse in primis.

Il mio problema è proprio li. Immaginavo di dover utilizzare qualche cosa per non far effettuare le chiamate dall'esterno e mi sono prodigato cercando di capire come fare ma nulla sembra funzionare.

Se puoi mi daresti una manina ? Spero che mi sfugga qualchec osa, posto un po' di codice per farti capire meglio:

Questo è il controller nel mio modulo sotto la cartella front:

<?php
class GccustomizationAjaxrequestModuleFrontController extends ModuleFrontController
{

    public function initContent()
    {

        $this->ajax = true;

        parent::initContent();

        if (!$this->isTokenValid()) {
            // Ooops! Token is not valid!
            die('Token is not valid, hack stop');
        }

    }

    public function displayAjaxFuntionTest()
    {

        $a = array("test" => "cioneeeee");
        echo json_encode($a);
    }
}

Chiaramente ho un file js che effettua una chiamata Ajax in POST (con jQuery quindi nulla di trascendentale) e questa chiamata funziona tranquillamente l'unica accortenza è quella di inserire nell'action la parte di metodo che mi serve chiamare, quindi nel mio caso Functiontest. Ovviamente dovrei passare anche un token ma se pure lo genero, questo è identico ad altri token che vedo stampati nel codice da altri moduli, quindi francamente non capisco l'utilità di avere tutti sti token uguali che uno può prendere facilmente dal codice e piazzarseli in una chiamata ajax.

Come vedi nel controller ho inserito anche l'ipotetica if di controllo che dovrebbe fermare tutto e invece non funge.

Hai qualche dritta per risolvere? Io non trovo grandi info in merito se non quelle che ho usato e sembrano non funzionare.

Grazie

 

 

 

Link to comment
Share on other sites

Ciao,

non so esattamente che tipo di modulo stai creando, quindi non posso darti consigli specifici. In ogni caso, in generale, la gestione del token di sicurezza dovrebbe essere questa:

- generi il token nel form che passa i dati allo script js (se per la generazione del form usi l'apposito Helper di PS ti basterà settare $helper->token)
- passi il token allo script js in modo che venga incluso tra i dati della chiamata Ajax
- controlli la validità del token nel metodo che riceve i dati Ajax (nel tuo caso FunctionTest)

Buona giornata,
Federica

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...