Livello extra sicuro per le chiamate cURL

0

Sto cercando di capire come aggiungere un ulteriore livello di sicurezza alle mie chiamate cURL WebApp che vanno al mio motore API.

Ho una WebApp che invia dati a un motore API che ho creato.

La mia API avrà accesso al filesystem e quindi deve essere abbastanza sicura in modo che non ci sia modo che qualcuno possa eseguire uno script sul server.

L'idea che dovevo proteggere ulteriormente si ha un salt su WebApp e lo stesso sul motore API, la WebApp invierà il cURL con un timestamp con hash e il timestamp reale, più qualsiasi altra richiesta, esempio:

<?php

$hash = "1h2k3jklh";
$tstamp = time();
$hashed_tmstamp = md5($tstamp . $hash);

$data_to_send = [
    'time' => $tstamp,
    'auth' => $hashed_tmstamp,
    'foo'  => "bar"
];

Sul lato API controllerò se auth è uguale al timestamp inviato hash con l'hash API (che è lo stesso di WebApp).

In questo modo se auth viene copiato e inviato con una nuova richiesta avrà sempre esito negativo come aggiornamenti data / ora. Ho fatto un piccolo esempio grafico per capire meglio.

C'èunpunto,se"l'uomo nel mezzo" può copiare il auth può anche copiare time e può inviare richieste sempre con lo stesso tempo e auth.

Quindi mi sto chiedendo come risolvere questa parte perché sul lato API non ho un DB da controllare con "hash già usato".

Sono in dubbio sto probabilmente cercando di reinventare la ruota e di sicuro questo tipo di cose è già stato controllato / gestito.

L'unico punto è che voglio il "metodo standard", ma sto cercando di aggiungere ulteriore sicurezza in modo che un possibile hacker non sappia cosa c'è dall'altra parte.

Qualche consiglio? Inoltre, qualche idea migliore?

    
posta Mr.Web 02.08.2018 - 22:26
fonte

1 risposta

3

Io andrei esattamente nella direzione opposta. Metti il codice su github, consenti a chi lo biforca, invia richieste di pull, cambia il codice. Si evolve. Se hai commesso un errore critico, qualcuno lo noterà e ti informerà

E usa TLS. C'è una grande comunità dietro di esso, ci sono degli errori, ma sono così oscuri per la maggior parte del tempo che noi comuni mortali non abbiamo bisogno di essere preoccupati. Errori di configurazione, errori di programmazione, errori logici e iniezioni di codice sono molto più diffusi e sfruttabili dei bug TLS.

Se desideri implementare la protezione di riproduzione, utilizza un incremento percentuale dinonce. In questo modo il server dovrà solo salvare un valore, l'ultimo nonce utilizzato, e il client dovrà incrementarlo prima di ogni richiesta. Non ha bisogno di incrementare di uno, può essere incrementato di qualsiasi valore. In alcune API che uso, il nonce è Epoch (più millisecondi).

Citando Antoine de Saint Exupéry:

It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to remove.

Le API sono pensate per essere semplici. Non aggiungere alcun meccanismo se non è necessario. L'aggiunta di componenti aumenta la complessità, riduce le prestazioni ed è un'altra cosa che devi aggiornare di volta in volta. Mantenere solo le parti essenziali riduce questo onere.

    
risposta data 02.08.2018 - 23:03
fonte

Leggi altre domande sui tag