Tenemos un sitio web, donde cada usuario tiene que iniciar sesión para acceder a un área privada. Dentro del área privada, hay información sobre el usuario, un perfil, que incluye información confidencial (domicilio, datos bancarios, etc.)
Naturalmente, seguimos las mejores prácticas aquí (hash fuerte, SSL con los algoritmos correctos, verificación de contraseñas débiles, etc.).
También ofrecemos una base API en OAuth para terceros. De esta manera, el usuario sabe a qué puede acceder una aplicación registrada, la aplicación no tiene que almacenar las credenciales del usuario, podemos limitar lo que la aplicación obtiene ... todos los beneficios habituales. Por ejemplo, la API puede leer la información del perfil, pero la información confidencial se borra u omite.
El problema es: tenemos una aplicación de terceros que decidió que el uso de la API no era bueno; en su lugar, solicita las credenciales, las almacena (en texto plano ...), y luego se autentica utilizando un POST. Y lee la información del usuario haciendo raspado de pantalla. En realidad, solo utiliza la información "pública", pero también puede acceder a la información confidencial que no nos gustaría revelar.
No estoy especialmente preocupado de que la aplicación filtre la información del usuario (creo que lo hizo de esta manera porque es descuidada / perezosa, no maliciosa), pero aún así es un comportamiento menos deseable. Y me hizo preguntarme: ¿hay alguna manera de manejar esta situación desde la raíz?
Quiero abordar el problema de la manera más efectiva, y estoy empezando a preguntarme: ¿hay una manera de permitir que el usuario inicie sesión SOLAMENTE a través de su página? ¿Para evitar que alguien más se autentique usando solo un POST? Según mi conocimiento, puede hacer que sea difícil hacerlo (usar identificaciones únicas en la página / encabezados, usar hashing del lado del cliente (Javascript), etc.) pero no hay manera de estar 100% seguro de la publicación. viene de "tu página". Pero no soy un experto en seguridad, por lo que me puede estar perdiendo algo. Y, en cualquier caso, ¿cuál es la mejor manera de mitigar el problema, haciéndolo poco práctico (pero con poca o ninguna carga para el usuario, sin captcha, lo que no solucionará el problema)?
EDITAR: para que quede claro: no estoy hablando de soluciones para "prevenir" el raspado de la pantalla. Ya tenemos mitigaciones para que sea difícil (y otros para que sea aún más difícil en la línea) que harán que esta aplicación en particular desista. Estoy hablando del proceso de inicio de sesión: ¿qué puede hacer para asegurarse de que el nombre de usuario y la contraseña provienen de su propio formulario? Uno de los "puntos de venta" de OAuth es que le da sus credenciales a alguien (google, twitter) en el que confía; de hecho, se le redirige a un formulario en el dominio "confiable". ¿Además de mirar la url, la procedencia de las credenciales se impone de alguna manera? Si es así, ¿cómo?