È fondamentale che l'API REST restituisca esattamente lo stesso contenuto del database NoSQL?

2

In passato, mi è stato insegnato che lo schema del database è fondamentale e non deve essere esposto in alcun modo in modo che gli utenti non possano iniettare il sistema e rubare qualcosa da esso. Tuttavia, la maggior parte dei casi che ho sentito riguardano le funzioni di accesso che un hacker prova ad agire come un altro utente, per ottenere il suo privilegio sul sistema. Non sono sicuro che la situazione rimanga la stessa quando il database di back-end cambia in NoSQL.

Se lo schema è ancora cruciale e dovrebbe rimanere segreto, dovremmo usare sempre chiavi diverse tra risposta API e database? Ad esempio, product_name e db_prod_name . E dovremmo sempre rendere la struttura diversa tra risposta API e database NoSQL? Cosa succede se restituiamo direttamente il record JSON dal database NoSQL all'API?

L'argomento Va bene rivelare i nomi delle tabelle del database? dovrebbe essere diverso per me dato che la mia domanda riguarda il database NoSQL , come AWS DynamoDB e MongoDB. Suppongo che la strategia di difesa possa essere diversa a causa delle caratteristiche tra SQL e NoSQL diverse.

    
posta user1802604 31.07.2018 - 11:40
fonte

1 risposta

2

In primo luogo, mantenere uno schema segreto non è una parte utile di qualsiasi posizione di difesa. Per i DB SQL, la prevenzione dell'iniezione SQL comporta una serie di tecniche, vari bit di configurazione del database, l'uso di istruzioni preparate, la disinfezione di input non attendibili, il tutto praticato da progetti open source, il cui schema SQL è pubblico. Allo stesso modo, sebbene i DB senza schemi non abbiano schemi fissi, le tecniche correlate si applicano quando i dati non fidati vengono mantenuti. In entrambi i casi, mantenere lo schema segreto non è necessario se si utilizzano quelle altre tecniche e, in caso contrario, la segretezza probabilmente non aiuterà.

La ragione per mantenere schemi e nomi di campo separati tra database e API ha a che fare con la gestione delle modifiche.

La tua applicazione consuma il tuo database. Altre applicazioni, non sotto il tuo controllo, consumano la tua API.

È relativamente facile cambiare lo schema e conformare la tua applicazione ad esso. È difficile, doloroso e in molti casi inaccettabile forzare la violazione delle modifiche sui consumatori della tua API.

Quindi, crea una superficie dell'API che abbia un senso per i tuoi clienti, quindi mantieni come dettaglio dell'implementazione il tuo schema interno e i dettagli del database. All'inizio questo sembra uno sforzo inutile, ma il percorso di successo per le API implica stabilità per i vostri clienti. Investi subito.

    
risposta data 31.07.2018 - 16:42
fonte

Leggi altre domande sui tag