Mi sono imbattuto in quella che chiamerei una "cattiva" codifica javascript (provengo da un mondo di KnockoutJS / Angular / Web API) in cui i servizi WCF sono esposti a javascript dagli URL di produzione, ovvero "productionserver.com .WCFService.WCFfunction (parametro, parametro) "
Ecco un pezzo di codice reale (con alcune modifiche, ovviamente)
www.blah.com.blahService.DoesEmailExist(mail, function (response) {
//blah code
}
E, ecco la funzione WCF invocata:
public bool DoesEmailExist(string email)
{
try
{
if (!string.IsNullOrEmpty(BusinessObjectWrapperToCreateQuery,"SELECT Id FROM TheTableToQuery WHERE Email = :Email ", email)))
{
// user exists
return true;
}
}
catch (Exception Ex)
{
LogSomeStuff(Ex);
return false;
}
return false;
}
Non c'è nulla che controlli la sessione dell'utente o la validità della richiesta, cioè "sei tu chi dici di essere"?
Ho iniziato a integrare con una terza parte, BrainTree (in realtà abbastanza legittimo, in termini di sicurezza), per acquisire informazioni / indirizzo / data di nascita del conto bancario.
Una soluzione intenzionale era quella di mettere questo su SSL, ma non sono sicuro che sia completamente corretto.
La soluzione che ho in mente è:
- Inserisci la pagina su SSL
- Genera un nonce ogni volta che un utente carica la pagina per raccogliere dati costituiti da valori hash come: nome utente, bollo orario binario corrente, IP, ecc. e un valore salt.
- Ogni richiesta richiede il nonce generato e solo se l'hash ricreato sulla parte del server è uguale a quello inviato dal client, ritengo che la richiesta sia valida.
- Ditch WCF per Web APi su SSL e richiesta POST da parte del corpo
Questo potrebbe funzionare, tuttavia, non sono un fan degli endpoint non protetti esposti tramite javascript.
Sono riluttante a dire che questo sito nella sua attuale configurazione sarà sempre sicuro, ma non conserverò nessuna di queste informazioni a livello locale e lo rinvierò a Braintree.
Modifica
Quello che sto cercando è un parere più istruito su:
- La mia soluzione a proposito è solida?
- Le mie preoccupazioni riguardo all'attuale JS / WCF non sono sopra il SSL?
- Vale la pena il mio tempo per rendere una sezione di un sito incredibilmente sicura con molti altri problemi di sicurezza altrove?