¿Cuál es la mejor manera de asegurar sus recursos web cuando proporciona API como servicio web?

4

Aquí está la condición: Tengo una API de servicio web que planeo vender como servicio. La salida de la API contiene la URI de algunos recursos (por ejemplo, imágenes, videos) que deberían ser accesibles para ese tipo que usa la API.

Exponer el URI como está, parece una mala idea, ya que solo pueden visitar ese recurso y navegar.

  

¿Qué probé?

Passsword selectivo que protege los recursos URI de la configuración del servidor apache. Pero esto evitaría que todos los clientes muestren esos recursos.

  

¿Qué están haciendo los demás?

Acabo de ver cómo Facebook estaba haciendo esto y parece que tienen algún tipo de URL cifrada para los recursos de imagen.

El siguiente es un ejemplo que obtuve de Barack Obama's FB página :

https://scontent.fblr1-1.fna.fbcdn.net/v/t1.0-9/14925612_10154300250296749_7922327253356496348_n.png?oh=54935f1f517c995295580b55a9a058a0&oe=5925CCFC

¿Cómo logro este nivel de seguridad? ¿Cuáles son las prácticas estándar y cómo debo implementarlas? ¡Cualquier pista sería apreciada!

    
pregunta Sudip Bhandari 23.02.2017 - 07:46
fuente

5 respuestas

0

Claramente, el problema para mí era la lista de directorios. Así que deshabilitar el listado de directorios resuelve mi problema.

He aquí cómo hacerlo:

abre el siguiente archivo:

/etc/apache2/apache2.conf

Encuentra las siguientes líneas

<Directory /var/www/>
# You uncomment the line below to enable the directory listing in Apache
#   Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
  

Permitir el acceso a archivos pero proteger con contraseña la lista de directorios

Proteja su contraseña contenido del servidor apache

Uno de mis otros requisitos era que quería permitir el acceso a los archivos cuando se colocaba correctamente en la URL (desde el código XML de salida de API). (es decir, la regla anterior para la protección con contraseña funcionará solo para el directorio y se puede acceder a los archivos)

Lo logré agregando la siguiente regla:

<Files ?*>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

que efectivamente dice que se puede acceder a los archivos.

Aquí está la documentación de la lista de directorios de apache

    
respondido por el Sudip Bhandari 01.03.2017 - 09:47
fuente
3

Normalmente, una API estará protegida por una clave de API o un secreto de API que normalmente se envía en los encabezados. Sin embargo, con la amplia aceptación de OAuth, los desarrolladores parecen usar este método, que puede establecer el tiempo para actualizar un token de OAuth, que es una forma mucho mejor.

Si aún necesita más protección para su API, (que supongo que algunos bancos o relacionados con el pago), normalmente el cliente envía una cadena cifrada al servidor, el servidor la decodifica, luego envía la respuesta nuevamente en un cifrado cadena.

Así que la persona con la clave solo puede descifrar la cadena.

De hecho, puedes mezclar el método secreto API con el cifrado de cadena API para un método más sólido.

    
respondido por el Arun Code 23.02.2017 - 09:15
fuente
1

Lo que describe es un caso de uso común para los recursos que se almacenan en una base de datos o que se generan dinámicamente. En ese caso, no hay una URL permanente para el recurso, sino solo las generadas dinámicamente.

En ese caso, cuando recibe una solicitud válida, la aplicación lee el archivo y escribe directamente el contenido del archivo en la respuesta que se envía al cliente. Por ejemplo, en JavaEE, un servlet procesará la solicitud, se asegurará de que sea válida, leerá el archivo y copiará directamente el contenido a la corriente de salida Response .

Si necesita más detalles sobre cómo hacerlo, puede intentar preguntar en el sitio SO: no olvide demostrar que ha investigado un poco y mi consejo es que primero escriba un código ...

    
respondido por el Serge Ballesta 23.02.2017 - 11:29
fuente
1

No entiendo la idea de navegar a través de ¿te refieres a la lista de directorios o al acceso a otros archivos a través de esa ubicación de uri? Si ese es el caso, puede desactivar las listas de directorios y otros accesos a archivos, fácilmente a través de apache config o .htaccess o si está pensando que su uri original puede dar una idea de la estructura de su proyecto. Puede volver a escribir su url utilizando mod_rewrite fácilmente en un archivo .htaccess .

    
respondido por el Abhishek Gurjar 23.02.2017 - 12:17
fuente
1

Si los archivos que necesita proteger son archivos estáticos grandes y quiere beneficiarse de los servidores web que están optimizados para servir archivos estáticos en lugar de que su servidor de aplicaciones sirva los archivos estáticos grandes, querría ver X-SendFile / X-Accel-Redirect es compatible con muchos servidores web populares.

En un breve resumen, estos encabezados le permiten hacer que su servidor web realmente sirva los archivos, pero que su aplicación autentique la solicitud para decidir si el acceso está permitido o incluso para servir archivos diferentes a diferentes usuarios. Al usar estos encabezados, puede, por ejemplo, redirigir al usuario a una página de error prohibido oa la página de autenticación si el usuario no tiene acceso o no está conectado cuando intenta acceder a la URL del archivo estático. Si el usuario ha iniciado sesión y se le permite acceder al archivo, todo lo que debe hacer es configurar el encabezado para que sirva el archivo que desea que el usuario obtenga y cuando el servidor web procese la respuesta de su servidor de aplicaciones, reemplazará a cuerpo de respuesta con el archivo señalado por el encabezado.

    
respondido por el Lie Ryan 23.02.2017 - 14:02
fuente

Lea otras preguntas en las etiquetas