Quiero crear un cliente que se conecte a mi servidor y use la API del servidor. Puede considerar esto como una aplicación bancaria porque la seguridad de los datos es lo más importante. Dado que los usuarios o piratas informáticos intentarán violar la seguridad del software para entrar en el flujo y ver qué está sucediendo, también debemos proteger todo de los usuarios. Simplemente, quiero tomar precauciones contra estas situaciones (pero no limitadas):
-
Ataques de ingeniería inversa: nadie debe ver mi código fuente. Si alguien lo ve, puede entender el algoritmo y aprender cómo funciona la API. Dado que la API no es pública, nunca debe suceder. ¿Es confuso un proceso irreversible y la mejor manera de ocultar el código fuente real? Además, ¿cómo puedo asegurar mis variables que se pueden descargar de la memoria en el tiempo de ejecución? ¿Cuál es la mejor manera de asegurar la configuración local o los archivos creados en Windows?
-
Clientes piratas: ¿Cómo puedo evitar que otros softwares utilicen mi API? Si alguien obtiene el código fuente, modifíquelo o cree el suyo, esta será una situación incómoda. ¿Hay una manera de limitar el acceso del servicio a mis propios clientes originales, no modificados? (¿Control de hash? ¿Certificados de cliente? ¿Firma de ensamblaje tal vez?)
-
Canal de datos & seguridad de los datos: el software debería poder ejecutarse en todas las redes que se conectan a Internet, por lo que parece que tengo que usar solicitudes web y amp; Respuestas para comunicar clientes con servidor. Creo que el canal de datos se puede asegurar con https fácilmente. ¿Debo preferir un certificado pagado (como Verisign) o crear mi propio certificado (firmado por mí) es suficiente? también quiero asegurar los datos en sí, creo que un público y amp; El par de claves privadas para cada cliente será suficiente para la identificación y la comunicación. ¿Es un buen enfoque? También estoy pensando en conectar a esos clientes con un Proxy HTTP, ¿puede aumentar la seguridad?
Sé que mi software está funcionando en suelo enemigo en el que no debo confiar y que no hay nada que un usuario no pueda hacer con él. Pero quiero asegurar esto tanto como pueda. Nadie puede hacerlo completamente seguro, pero quiero hacer todo lo posible para aumentarlo.