Verifica che una richiesta sia interna

0

Ho un'app Web che emetterà solo un codice sicuro . Ha bisogno di passare questo a un back-end Python. Il modo logico per passare le cose tra JavaScript e Python è avere un server Flask in esecuzione. Quindi, JavaScript invierà una richiesta come http://example.com/test/?code=this_is_safe_code . Il codice sarebbe stato valutato.

Io non voglio che gli utenti esterni siano in grado di inviare il codice attraverso, però. Voglio che tutte le richieste fatte siano interne. Poiché so che il codice trasmesso internamente sarà un'espressione matematica sicura, mi sento a mio agio con eval . Tuttavia, se qualcuno dall'esterno ha inviato qualcosa come http://example.com/test/?code=__import__%28%22os%22%29.system%28%22echo%20DANGER%22%29 , Python eseguirà __import__("os").system("echo DANGER") . Che ovviamente non è sicuro.

Le chiamate JavaScript sono interamente client-side, non sto usando alcun back-end JS con cose come node.js .

Quali sono i metodi di sicurezza per consentire richieste interne da JavaScript ma richieste non esterne? Questo dovrebbe essere una sorta di certificato privato?

    
posta Luke Taylor 13.03.2016 - 22:52
fonte

1 risposta

2

Non puoi assicurarlo. Non c'è modo di garantire che la tua app web sia dall'altra parte di una connessione. Anche se si presentano metodi (convoluti) per provare a compilare un checksum e firmare le proprie richieste in JavaScript, un utente può semplicemente utilizzare il proprio JavaScript per firmare le proprie richieste.

Probabilmente questo può essere protetto cambiando il formato di ciò che si passa al server da Python free-form in qualcosa di meglio specificato. Ad esempio, forse si passa una serie di numeri N e operatori N-1. Il tuo server quindi convaliderà (usando una lista bianca) che i numeri sono numeri e gli operatori sono nella serie consentita di operatori matematici. Se questo è passato, è possibile ricostruire il codice Python ed eseguirlo.

Un'altra soluzione è l'esecuzione del codice JavaScript sul server e il trasferimento di tali dati direttamente in Python. In questo caso, è necessario convalidare l'input per il JavaScript in un modo simile a quello descritto sopra.

Riferimento: Foglio di verifica della convalida dell'input OWASP

    
risposta data 14.03.2016 - 00:09
fonte

Leggi altre domande sui tag