Incorporando in modo sicuro un widget che invia moduli ai nostri server su siti Web di terze parti?

0

Vorrei creare un widget javascript che gli sviluppatori di terze parti inseriscono nella loro pagina aggiungendo:

<script type="text/javascript" src="https://test.com/widget.js" async></script>

Lo script inietta il widget del modulo di raccolta e-mail in un tag div sul sito web dello sviluppatore. Quando un utente invia il modulo, invia una richiesta POST a un endpoint ospitato sul nostro server. Utilizziamo recaptcha per convalidare tutte le richieste.

Ci sono alcune implicazioni di sicurezza:

  • Un cattivo attore può inviare spam all'endpoint con indirizzi email errati.
  • Poiché il widget è incorporato nella pagina dello sviluppatore, possono utilizzare il widget per scopi illeciti e avere il nostro nome su di esso.

Come posso risolvere i problemi di sicurezza che derivano da un widget incorporabile? Tutte le richieste passano attraverso HTTPS. Recaptcha è usato per aiutare contro spam / abuso. Forse posso usare un'intestazione di codice sito / referrer per convalidare che la richiesta proviene da un sito Web attendibile?

Un'altra opzione è usare un iframe ospitato sul mio sito Web per mostrare il widget.

    
posta jake 28.03.2018 - 18:42
fonte

1 risposta

0

Il fatto che tu lo stia incorporando come widget non è poi così rilevante per la maggior parte degli aspetti di sicurezza. La maggior parte degli attacchi verrebbero indirizzati direttamente all'endpoint, ignorando in tutto il modulo, il widget e il browser. Ad esempio, avresti bisogno del captcha, non importa se fai un widget o meno, perché lo spam viene inviato con script automatici e non eseguito attraverso i browser.

Tuttavia, è possibile limitare le origini in grado di inviare richieste ai propri endpoint da un browser. Questo avverrà utilizzando CORS , consentendo solo alcune origini nell'intestazione Access-Control-Allow-Origin .

Il trucco per far funzionare questo è che la richiesta non deve essere "semplice", cioè deve attivare un preflight. Una forma ordinaria POST è semplice, quindi non lo farà. Dovresti cambiare il verbo, o richiedere che un'intestazione specifica sia presente nella richiesta o qualcosa del genere. Vedi il link sopra per ciò che è considerato "semplice" e cosa no.

Si noti, tuttavia, che è il browser ad applicare la politica CORS. Un utente malintenzionato può comunque inviare qualsiasi richiesta desideri utilizzando, ad es. ARRICCIARE. Si noti inoltre che, anche se non si crea un widget, chiunque può semplicemente creare un modulo da inserire nel proprio endpoint sulla propria pagina Web.

    
risposta data 28.03.2018 - 23:30
fonte

Leggi altre domande sui tag