Determina tutti i campi possibili nel modulo HTML

0

È possibile determinare, dal lato client, tutti i campi validi per un determinato processore di backend, anche se sono esclusi dalla pagina web che contiene il modulo?

Ad esempio:

Assumi un elaboratore di moduli con più moduli HTML che lo inviano. Un modulo ha solo 5 campi, un modulo più 'privilegiato' potrebbe avere 10. Niente impedisce al client di inviare tutti i 10 campi modificando il modulo a 5 campi, tranne che non conoscono i campi senza aver visto entrambi i moduli.

Quindi, in questo caso, lo sviluppatore dell'app Web sta tentando di controllare l'accesso a determinate funzioni escludendo specifici campi modulo da una pagina. Un utente può identificare quali campi sono disponibili, ma non mostrati, se hanno solo accesso alla versione limitata del modulo?

Se la risposta è "solo attraverso la supposizione", allora questo modello di "sicurezza" considera la sicurezza attraverso l'oscurità?

OP Edit - Speriamo di aggiungere un po 'di chiarezza.

Un'applicazione con cui lavoro è segmentata in più moduli disponibili per gli amministratori per varie funzioni. Agli amministratori può essere concesso l'accesso ai moduli su base individuale (ad esempio, a adminA può essere concesso l'accesso a modulo1 e modulo3 e non vengono concessi diritti al modulo2). L'applicazione consente quindi di gestire i diritti di amministrazione su un livello più granulare regolando i diritti di visualizzazione / modifica dei singoli elementi all'interno del modulo. Tuttavia, ho capito che il permesso di sola lettura è controllato (solo dal lato client) da campi modulo disabilitati e l'esclusione dei campi modulo. Conoscendo l'ID di un campo mancante, posso inviare e modificare i valori anche se il campo non è nella fonte della pagina. Posso sfruttarlo perché conosco il nome dei campi mancanti, ma quanto è vulnerabile l'applicazione allo sfruttamento da parte di individui che non sono a conoscenza dei nomi dei campi mancanti?

    
posta JG7 17.10.2018 - 03:13
fonte

3 risposte

1

Questo non è sicuro! È la sicurezza attraverso l'oscurità e non abbastanza da proteggere nulla di valore. Ci sono molti modi in cui un utente malintenzionato potrebbe indovinare i nomi dei campi:

  • Indovinare. Se scrivi un buon software, i tuoi nomi sono descrittivi e facili da indovinare. Se voglio eliminare qualcosa, perché non provare a impostare delete su 1 e vedere cosa succede?
  • Forza brutale.
  • Dai un'occhiata al codice sorgente, se disponibile.
  • Se un utente ha avuto accesso al livello di amministrazione, ma ottenerlo revocato, potrebbe aver salvato i nomi dei campi.
  • Controlla la cache del browser dei colleghi.

Prima di intraprendere qualsiasi azione, il server deve verificare che l'utente corrente disponga di sufficienti privilegi per eseguire tale azione.

    
risposta data 17.10.2018 - 11:17
fonte
0

Hai del codice HTML, che omette alcuni campi sensibili dei moduli, vero?

Non esiste una vera connessione tra come funziona la logica di backend e come viene visualizzato il frontend, quindi in teoria è impossibile per un utente conoscere i nomi di campo omessi basati solo sull'HTML.

Detto questo, l'approccio corretto è quello di convalidare la sicurezza sul back-end e non dovresti proteggere le cose semplicemente nascondendo dall'applicazione client .

Nascondendo i campi dei moduli e utilizzandoli come unica forma di sicurezza, questi nomi di campo diventano effettivamente segreti, simili alle password o alle chiavi private. Alcuni consigli comuni per informazioni segrete:

  • Genera in modo casuale dei segreti - dovrebbe essere effettivamente privo di significato. I nomi dei campi sono simili a "punti ferri batteria corretti" o "gbKtDAABylCGSg"?
  • I segreti devono essere strettamente sorvegliati dalla divulgazione a soggetti non autorizzati. Hai controllato il codice JavaScript, i messaggi di errore del backend, ecc., Per assicurarti che non rivelino i nomi dei tuoi campi?
  • I segreti non dovrebbero entrare nel controllo del codice sorgente, perché ciò solleva in modo significativo il rischio in caso di perdita di dati (cosa che accade a volte). (e in realtà, questo vale per qualsiasi situazione in cui hai sicurezza per oscurità)

Immagino che almeno 2 di queste misure, o forse tutte, non siano state fatte. Mentre è vero che un utente non può semplicemente magicamente scoprire quali siano i nomi dei campi mancanti (quindi questa potrebbe non essere una situazione "il cielo cade, aggiusti questo ieri"), gli utenti POSSONO indovinare i nomi comuni e l'autenticazione di backend dovrebbe essere sicuramente usato come meccanismo di sicurezza effettivo.

    
risposta data 17.10.2018 - 06:22
fonte
0

In generale: se un utente malintenzionato potrebbe violare il sistema semplicemente guardando il codice sorgente, allora sì, è "sicurezza attraverso l'oscurità" e non dovresti fare affidamento su di esso. È necessario convalidare sul server a cui l'utente ha accesso per utilizzare i campi che stanno inviando. Non hai il controllo su quale forma un pirata informatico utilizzerà per attaccare il tuo server.

    
risposta data 19.10.2018 - 03:32
fonte

Leggi altre domande sui tag