hackear - Protección de DB y datos de sesión en un host compartido de PHP
session id php (5)
Escribí una aplicación web PHP usando SQLite
y sesiones almacenadas en el filesystem
de filesystem
.
Esto es funcionalmente fino y de atractivo bajo mantenimiento. Pero, ahora necesita ejecutarse en un host compartido.
Todas las aplicaciones web en el host compartido se ejecutan como el mismo usuario, por lo que los datos de la sesión de mis usuarios son vulnerables, como lo es la base de datos, el código, etc.
Muchos recomiendan almacenar sesiones en DBMS
como MySQL
en esta situación. Así que al principio pensé que simplemente haría eso, y movería los datos de SQLite
a MySQL
también. Pero luego me di cuenta de que las credenciales de MySQL
deben ser leíbles por el usuario de la aplicación web, así que estoy de regreso al punto de partida.
Creo que la mejor solución es usar PHP
como un CGI
para que se ejecute como un usuario diferente para cada aplicación web. Esto suena genial, pero mi mod_php
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 sesión en esta situación?
"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 usar sesiones basadas en archivos, puede establecer la ruta de la sesión en el directorio de su usuario y de nuevo 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, guardas 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ía ver es mover sus sesiones y DB a MySQL y usar safe_mode y / o open_basedir.
Siempre que 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 impacto significativo en el rendimiento, ya que cada solicitud requerirá la creación de un nuevo proceso. (Podría ver a FCGI como una alternativa de mejor rendimiento).
El otro enfoque sería establecer una cookie basada en algo que el usuario proporciona, y usarla para cifrar datos de sesión. Por ejemplo, cuando el usuario inicie sesión, tome un hash de su nombre de usuario, contraseña (como la suministraron) y la hora actual, cifre 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.
Solucionaría el problema con un cambio de infraestructura en lugar de un código uno. 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.
Un host compartido no es una forma de ejecutar un sitio web si usted es consciente de la privacidad y seguridad de sus datos de 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).
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 quedarse con su host por algún motivo, pero en general hay tantos disponibles que es un buen recordatorio para que las personas puedan comparar funcionalidad, seguridad y costo. Me he dado cuenta de que muchas empresas están empezando 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.