Seguridad en servicos web

Estimados buen día, hice un servidor Rest y utilice JWT para poder ponerle algo de seguridad, sin embargo, quisiera saber si me pueden apoyar en alguna orientación.

1. Aplicar JWT es suficiente para hacer seguro mi servicio?

2. Que tecnología puedo utilizar para firmar cada petición para garantizar que la petición no halla sido modificada en el camino.

3. Para realizar el firmado de la petición es necesario generar certificados para firmar la petición? o como puedo hacerlo, ya que requiero realizar un formulario con X datos sensibles pero necesito realizar el firmado de los mismos, el formulario que pretendo realizar es de acceso publico, como podría proteger las peticiones en el?

4. En otro formulario que quiero implementar es para un registro, estoy implementando un captcha de google, sin embargo espero no ser muy exagerado, pero alguien podría mandar N peticiones a mi servicio directamente sin pasar por el formulario, entonces ¿Cómo puedo proteger esa url de ataques masivos y evitar que llenen mi tabla con información no deseada?

Muchas gracias espero me puedan orientar.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Seguridad, uno de los temas olvidados por muchos

Tratare de responder brevemente a tus preguntas:

1. JWT no es suficiente, sirve muy bien para la parte de autenticacion, ademas hay que verificar las politicas de cifrado, tiempo de vida del token y como lo guardas en el cliente (cookie, header, memoria), para la parte de authorizacion siempre vas a necesitar algo mas, una tabla de permisos, ldap, un json u otra cosa.

2. https para el canal (ni javamexico lo tiene), pero si hay virus en el cliente o es un windows de 100 pesos mexicanos fuera de la plaza de la computacion, pues dudo mucho que sea posible, en la empresa que yo estoy incluso la comunicaciones entre servidores en ambientes pre-productivos requiren tls.

3. Con CSFR token, con esto sabes que el que envia el fomulario sea el que lo pidio.

4. Eso esta bastante bien, puedes incluir un limitador de peticiones, si detectas mas de x peticiones en x tiempo para una misma ip pues solicita otra vez el captcha o deshabilita el servicio para la ip por x tiempo (considera si tus usuarios usaran vpns porque si si, vas a limitar a varios usarios).

Al final en seguridad no hay 100%, siempre hay riesgo y solo tienes 3 formas de solventarlo, aceptarlo, transladarlo o reducirlo. Para cada evento verifica cual es el impacto y con ese impacto decide si vas a invertir mucho tiempo en reducir el riesgo a su minimo posible o vas a esperar a que pase, sabiendo que no pasa mucho si el riesgo se hace un evento.

Finalmente recuerda que hay un desbalance en la fuerza, los crakers solo necesitan un hueco de seguridad para hacer destrozos y el hacker/desarrollador debe cubrir los posibles huecos de seguridad. Espero esto te ayude un poco.

Gracias por la orientacion

Muchas gracias por reponer a mis dudas, entonces voy a darle una estudiada a CSFR token, en el punto 2 olvide mencionar que su uso https, pero quería saber la opinión de ustedes para saber que más puedo usar para hacer más difícil que nos llegaran a acatar por ese lado.

Espero que alguien más me pueda seguir dando más opiniones para reforzar el conocimiento.

Muchas gracias betotto.

Sin estado

1. No, no es suficiente. Debes contar con autenticación (JWT) y autorización, puedes utilizar Spring Security/Apache Shiro para agregar autorización.
2. Si utilizas JWT y HTTPS ya estas firmando las peticiones, con JWT verificas que la persona que esta realizando la petición sea una persona autenticada y con HTTPS firmas el canal de comunicación (los datos viajan cifrados utilizando un certificado).
3. Esto lo puedes controlar con la configuración de los CORs (Header)
4. Configurando adecuadamente el servidor web (por ejemplo Apache o NGINX) puedes evitar ataques de denegación de servicios.