Metodo di autenticazione semplice per proteggere l'API REST

7

Ho cercato disperatamente di trovare un metodo semplice per proteggere la mia API, ma non ne ho ancora trovato uno che funzioni. A differenza di molte API RESTful, la mia API non ha bisogno di accessi utente, token che scadono o altri metodi di autenticazione complessi (sebbene molto sicuri), il che rende la maggior parte delle esercitazioni là fuori inutilizzabili.

L'unico requisito che ho è che una richiesta POST per registrare un record nel mio database su una rotta dovrebbe essere protetta mentre una richiesta GET per accedere ai record su quella stessa route dovrebbe essere non protetta. I client che registrano i record sono attendibili e vorrei fornire le loro credenziali privatamente.

Ho provato a utilizzare questo metodo di autenticazione di base qui:

var basicAuth = require('basic-auth');

var auth = function (req, res, next) {
  function unauthorized(res) {
    res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
    return res.send(401);
  };

  var user = basicAuth(req);

  if (!user || !user.name || !user.pass) {
    return unauthorized(res);
  };

  if (user.name === 'foo' && user.pass === 'bar') {
    return next();
  } else {
    return unauthorized(res);
  };
};

Ma le richieste POST funzionavano ancora quando ho usato il nome utente e la password sbagliati.

Non so davvero più cosa cercare, perché pensavo che l'autenticazione di base come quella avrebbe funzionato.

EDIT: gestito per farlo funzionare dopo aver cambiato un paio di cose dopo app.post, che avevo trascurato.

    
posta Andy Morgan 17.07.2016 - 01:46
fonte

1 risposta

1

Se non si registra il GET RESTful che interroga i dati nel database e che i dati sono destinati a essere pubblici, è possibile esporre un GET HTTP e utilizzare la sicurezza integrata nel server Web per evitare che si verifichino dei danni durante tale operazione.

Per il POST RESTful, usa TLS, il contemporaneo di SSL, ma non implementarlo tu stesso. Puoi configurare un POST HTTPS su qualsiasi server web moderno con facilità. Il supporto del supporto tecnico per l'installazione del certificato sul lato server è generalmente supportato dalla CA. Poiché le persone in tutto il mondo implementano i POST HTTPS ogni giorno, il supporto per tale operazione semplifica la configurazione e la manutenzione rispetto a una semplice operazione di sicurezza.

Ciò che hai codificato non è sicuro, cosa che potresti non pensare sia importante.

Per esercitare la dovuta diligenza nel rispondere alla tua domanda, tieni presente che non è possibile fornire credenziali per persone al telefono o su un pezzo di carta senza utilizzare un protocollo sicuro come HTTPS. Affidarsi a testare il valore di una credenziale sul server lascia un vuoto di sicurezza che può portare a conseguenze indesiderate.

Gli aggressori possono facilmente identificare la password sul percorso e quindi distruggere il caos sul cliente / cliente / visitatore e dati. Anche se i dati non sono business critical, le scritture non protette potrebbero finire male. Qualcuno potrebbe, per un numero qualsiasi di ragioni, inserire nel proprio database un pornografico infantile o un segreto militare, che si intende lasciare aperto al pubblico. Non saresti in grado di dimostrare che tu o uno degli utenti fidati non l'hai messo lì.

    
risposta data 26.01.2017 - 02:50
fonte

Leggi altre domande sui tag