2008-09-25 8 views
7

Escribí una aplicación web PHP usando SQLite y sesiones almacenadas en filesystem.Protección de bases de datos y datos de sesión en un host compartido PHP

Funcionalmente fino y con un atractivo bajo mantenimiento. Pero, ahora necesita ejecutarse en un host compartido.

Todas las aplicaciones web en la carrera servidor compartido como el mismo usuario, por lo que los datos de sesión de mis usuarios es vulnerable, ya que es la base de datos, código, etc.

Muchos recomiendan almacenar las sesiones en DBMS como en MySQL esta situación. Así que al principio pensé que simplemente haría eso, y movería los datos de SQLite al MySQL también. Pero luego me di cuenta de que las credenciales MySQL deben ser leíbles por el usuario de la aplicación web, así que estoy de vuelta al punto de partida.

Creo que la mejor solución es usar PHP como CGI para que se ejecute como un usuario diferente para cada aplicación web. Esto suena genial, pero mi anfitrión no hace esto usa mod_php. ¿Hay algún inconveniente desde el punto de vista de un administrador para habilitar esto? (rendimiento, compatibilidad con versiones anteriores, etc.)? Si no, les pediré que lo habiliten.

De lo contrario, ¿hay algo que pueda hacer para proteger mi base de datos y los datos de la sesión en esta situación?

Respuesta

4

Mientras su código se ejecute como el usuario web compartido, cualquier cosa almacenada en el servidor será vulnerable. Cualquier otro usuario podría escribir un script PHP para examinar cualquier archivo legible en el servidor, incluidos sus datos y código PHP.

Si su proveedor de hosting lo permite, ejecutar PHP como CGI con un usuario diferente será de ayuda, pero espero que haya un rendimiento significativo, ya que cada solicitud requerirá un nuevo proceso para ser creado. (Podría ver a FCGI como una alternativa de mejor rendimiento.)

El otro enfoque sería establecer una cookie en función de algo que el usuario proporcione y usarla para cifrar los datos de la sesión. Por ejemplo, cuando el usuario inicia sesión, tome un hash de su nombre de usuario, contraseña (tal como la suministraron) y la hora actual, encripte los datos de la sesión con el hash, configure una cookie que contenga el hash. En la próxima solicitud, recuperará la cookie, que luego puede usar para descifrar los datos de la sesión. Sin embargo, tenga en cuenta que esto solo protegerá los datos de la sesión actual; su tabla de usuario, otros datos y el código seguirán siendo vulnerables.

En esta situación, debe decidir si la compensación del bajo costo del alojamiento compartido es aceptable teniendo en cuenta la seguridad reducida que proporciona. Esto dependerá de su aplicación, y puede ser que en lugar de tratar de encontrar una forma compleja (y posiblemente ni siquiera muy efectiva) de agregar seguridad, es mejor que simplemente acepte el riesgo.

1

No veo la seguridad como todo o nada. Hay pasos que puedes tomar. Proporcione al usuario de base de datos web solo los permisos que necesita. Almacenar contraseñas como hashes. Utilice el inicio de sesión abierto para que los usuarios proporcionen sus credenciales a través de SSL.

PHP en cgi puede ser más lento y es posible que algunos hosts simplemente no quieran admitir más de un entorno.

Es posible que tenga que seguir con su host por alguna razón, pero en general hay tantas disponibles que es un buen recordatorio para que las personas puedan comparar la funcionalidad y la seguridad, así como el costo. Me he dado cuenta de que muchas empresas están comenzando a ofrecer alojamiento de máquinas virtuales, una seguridad de servidor casi dedicada en términos de aislar su código de otros usuarios, a un costo razonable.

0

Un host compartido no es una forma de ejecutar un sitio web si es consciente de la privacidad y seguridad de sus datos en los sitios con los que comparte el servidor. Cualquier cosa accesible para su aplicación web es juego limpio para los demás; solo será cuestión de tiempo antes de que puedan acceder a él (suponiendo que tengan incentivos para hacerle eso).

0

"puede colocar sus variables de conexión de base de datos en un archivo debajo de la raíz web. Esto al menos lo protegerá del acceso web. Si también va a utilizar sesiones basadas en archivos, puede establecer la ruta de sesión en el directorio de tu usuario y otra vez fuera de la raíz web ".

No tengo una cuenta, así que no puedo menospreciar eso ... pero en serio ni siquiera es relevante para la pregunta.

Duh usted almacena cosas fuera de la webroot. Eso se aplica a cualquier escenario de alojamiento y no es específico del alojamiento compartido. No estamos hablando de protegernos de los de afuera aquí. Estamos hablando de proteger de otras aplicaciones en la misma máquina.

Para OP Creo que PHP como CGI es la solución más segura, como ya se sugirió. Pero como alguien más dijo, hay un golpe de rendimiento con esto.

Algo que podrías ver es mover tus sesiones y db a MySQL y usar safe_mode y/o open_basedir.

0

Resolvería el problema con un cambio de infraestructura en lugar de uno de código. Considere la posibilidad de actualizar a un servidor VPS. Hoy en día puedes conseguirlos muy económicos. He visto VPS's starting @ 10 $/mes.

Cuestiones relacionadas