Descubrí lo que yo llamaría un código "desagradable" de javascript (provengo de un 'mundo' de KnockoutJS / Angular / Web API) en el que los servicios WCF están expuestos a javascript por las URL de producción, es decir, "productionserver.com .WCFService.WCFfunction (parámetro, parámetro) "
Aquí hay un código real (con algunos cambios, por supuesto)
www.blah.com.blahService.DoesEmailExist(mail, function (response) {
//blah code
}
Y, aquí está la función WCF invocada:
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;
}
No hay nada que verifique la sesión del usuario o la validez de la solicitud, es decir, '¿eres quien dices que eres'?
Comencé a integrarme con un tercero, BrainTree (realmente legítimo, en términos de seguridad en realidad), para capturar la información / dirección / fecha de nacimiento de la cuenta bancaria.
Una de las soluciones propuestas fue poner esto sobre SSL, pero no estoy seguro de que sea totalmente correcto.
La solución que tengo en mi mente es:
- Poner la página en SSL
- Genere un nonce cada vez que un usuario carga la página para recopilar datos que comprenden valores de hash, como: nombre de usuario, marca de tiempo binario actual, IP, etc., y un salt.
- Cada solicitud requiere el nonce generado, y solo si el hash recreado en la parte del servidor es igual al enviado por el cliente, considero que la solicitud es válida.
- Ditch WCF para Web APi sobre SSL y solicitud POST por parte del cuerpo
Esto podría funcionar, sin embargo, no soy un fanático de los puntos finales no protegidos expuestos a través de JavaScript.
Dudo en decir que este sitio en su configuración actual siempre estará seguro, pero no almacenaré ninguna de esta información localmente, y la aplazaré a Braintree.
Editar
Lo que busco es una opinión más educada sobre:
¿Es mi solución propuesta sólida?
¿Mis preocupaciones con el JS / WCF actual no sobre SSL son una preocupación?
- ¿Merece la pena dedicar tiempo a hacer que una sección de un sitio sea increíblemente segura con muchos otros problemas de seguridad en otro lugar?