2010-04-26 17 views
5

soy un novato en la programación del lado del servidor, así que por favor, perdónenme si esto se vuelve complicado. Me contrataron para crear un servicio web que permita a los usuarios autenticados acceder a una base de datos. los usuarios deben ingresar un nombre de usuario y contraseña. He estado leyendo y leyendo sobre REST vs SOAP, y pensé que había establecido un diseño RESTful cuando me encontré con esta afirmación: "Los datos que deben ser seguros no deben enviarse como parámetros en URI". esto parece ser un gran demérito contra un enfoque RESTful. Soy consciente de que con https, la contraseña se cifraría para evitar la interceptación de hombre en el medio, pero eso deja los registros del servidor y el historial del cliente como posibles puntos de exposición. ¿Existe alguna solución RESTful para este problema, o necesito ir a SOAPy? cualquier consejo apreciado.¿Cómo puedo proteger los parámetros de contraseña en URI de servicio web RESTful?

+1

¿Por qué le gustaría pasar la contraseña en el URI, que es claramente texto sin cifrar? Si este es el caso, ¿por qué molestarse con una contraseña en primer lugar? –

+0

como dije, soy un novato. en la investigación de servicios web y REST vs SOAP, el consenso que parece estar surgiendo es que REST es mucho más simple y apropiado para la mayoría de los escenarios. al tratar de determinar lo que cae dentro de "la mayoría de los escenarios" y lo que no, pensé que encontré una excepción con la autenticación; a saber, que en un diseño RESTful, todo se pasó en el URI o en los encabezados, que son ambos vulnerables. así que solo estoy tratando de averiguar si esto es cierto, o si hay una manera segura y RESTANTE de autenticarse con nombre de usuario y contraseña. – adam

Respuesta

1

Use POST -type solicitudes para transmitir los datos necesarios e incluir la parte sensible como un campo publicado para que sea parte del cuerpo de la solicitud en lugar de un parámetro dentro del URI.

+0

No estoy seguro de cómo esto ayuda. ¿Podrías elaborar? POST no pasará los datos a través del URI, pero aún se pasará. HTTPS se encarga de encriptar los datos de principio a fin, pero no hace mucho si está almacenando la contraseña en cualquier lugar en texto sin formato. – Krisc

+1

La pregunta del OP se refiere a la transmisión de los datos, no al almacenamiento de los mismos en el servidor. La razón principal para no pasar datos seguros en un URI es que los URI a menudo son registrados por cosas * otras * que su aplicación individual, como los registros de solicitud del servidor web y el historial del navegador. Por el contrario, estos registros e historiales generalmente no * graban * campos POST. – Amber

+0

Si necesita registrar el campo POST, puede [cifrar el archivo de registro] (http://stackoverflow.com/questions/629755/creating-an-encrypted-log-file) –

0

Este es un problema con la configuración de su servidor web no con su aplicación. Las configuraciones erróneas pueden generar vulnerabilidades y este es un buen ejemplo de eso. Los servidores web también pueden registrar solicitudes POST y esto es común si su Web Application Firewall detecta un ataque. Me aseguraré de que el registro esté desactivado en apache porque probablemente no sea necesario para que su aplicación se ejecute correctamente.

Otro enfoque más común es utilizar una cookie para mantener la sesión. La cookie todavía debe protegerse con https durante toda su vida.

1

Creo que, para ser realmente RESTful, debe usar la autenticación HTTP (básica o resumida), ya que ser forzado a iniciar sesión primero no está en el espíritu de REST.

Me gustaría que esto sea confirmado (o refutado) por alguien que conoce bien el REST.

+1

En realidad, con REST, todo vale. 'estricto como el jabón, esto solucionaría su problema. Solo asegúrate de usar https. – rook

+1

Otra opción es usar certificados del lado del cliente. Configura su servidor para que solo acepte las solicitudes que se realizan con certificados que aprueba o que emiten las autoridades de certificación que aprueba. Esto puede no ser práctico en situaciones donde se requiere acceso público, pero en aquellas situaciones donde desea controlar la lista de clientes, es bastante seguro. – stand

+0

@stand cierto. Idealmente es * la * solución. Pero, como dices, no es muy "real" para el acceso público. – p4bl0

Cuestiones relacionadas