tipos - ¿Está bien almacenar la contraseña en texto plano en una variable php o php constante?
variable global php (8)
A menos que el sitio en sí esté comprometido y ahora también lo están todas las contraseñas a las que accedieron (¿su DB, quizás?).
Según la pregunta, ¿es seguro almacenar contraseñas en páginas php como
$password = ''pa$$w0rd'';
Si los usuarios no pueden verlo, es seguro, ¿no?
EDITAR: Algunas personas en realidad sugirieron usar hash, sin embargo, habría un problema con la contraseña de conexión del servidor de la base de datos, ¿no?
A veces solo tiene que ser fe para una aplicación de correo donde solo puedes iniciar sesión con la contraseña simple y no con un hash. Y si su aplicación no tiene problemas de seguridad, no debería afectarlo.
Creo que la mayoría de las veces la contraseña de texto plano sería la contraseña de la base de datos ya que MySQL, por ejemplo, no aceptará el hash para la autenticación.
Como se mencionó antes, la mejor solución es mantener el archivo de configuración PHP con contraseña fuera de la raíz web.
Si le preocupa que alguien pueda ver su contraseña mientras visualiza el archivo, simplemente puede hacerlo ilegible para humanos utilizando el funciton de base64.
Consulte esta publicación para obtener detalles e incluso una pequeña utilidad para Windows, Linux y Mac que lo hace más fácil.
Depende de cómo definas ''seguro''.
Tiene razón en que un usuario general no lo verá.
Sin embargo, definitivamente es una mala práctica; si su sitio está comprometido, ¿a qué más darán acceso estas contraseñas? Diría que, como mínimo, debes almacenar un hash de la contraseña, no el texto plano.
Dependiendo de cómo se defina la seguridad, cualquier enfoque tiene sus aspectos positivos y negativos.
Si realmente desea almacenar una contraseña en su fuente, podría ser una buena idea hacer algo por el estilo:
Archivo: config.php
if( ! defined(''IN_CODE'') ) die( ''Hacking attempt'' );
define( ''PASSWORD_HASH'', ''098f6bcd4621d373cade4e832627b4f6'' );
Archivo: index.php
define( ''IN_CODE'', ''1'' );
include( ''passwd.php'' );
if( md5($password) == PASSWORD_HASH )
...
El texto plano nunca es una buena idea, siempre almacene un hash de la contraseña que desea almacenar.
Además, intente separar define así desde su archivo fuente principal.
La respuesta corta es tanto No, como Depende.
Casi nunca es una buena idea almacenar las contraseñas en texto sin formato, especialmente en una ubicación accesible desde la web, si no por otra razón que una configuración incorrecta del servidor o un eco en el lugar incorrecto podría exponerlo al mundo.
Si DEBES guardar una contraseña, (lo cual es posible) podrías tratar de almacenarla fuera de la raíz web, por ej. /var/www/public_html/
Pon aquí tu codez
/var/www/includes/
Pon tus contraseñas aquí
Incluso mejor que eso sería hacer que el sistema para el que necesita la contraseña (por ejemplo, un contenedor de base de datos) devuelva un objeto ya instanciado. así que, en lugar de solicitar $databasepassword
, solicita un objeto PDO y almacena sus clases de base de datos fuera de webroot.
Depende de qué vectores de ataque harían que alguien tenga acceso a ese texto de contraseña, y si es necesario que ya estén dentro de tu sistema de archivos, de ser así, probablemente estés jodido de todos modos.
Además, si es la contraseña para el contenido de suscriptor de supa-secrit, meh, todo lo que ha perdido son algunas tarifas de suscripción, si es su base de datos, puede tener un problema, si sus datos de banca en línea, son buenos para usted.
¿Qué tan valioso es lo que protege la contraseña?
Mientras su instalación PHP funcione como debería, esto no es menos seguro que cualquier otro método. Preferiría el nombre constante (definir) sobre la variable. Además, puede considerar almacenar un hash de la contraseña, en lugar de una contraseña simple. Esto evita robar sus contraseñas, incluso si el sitio está en peligro.
En cuanto a ser una mala práctica, depende. Si necesita almacenar solo una contraseña, este enfoque está bien. Almacenarlos fuera de la raíz del documento puede dar una falsa sensación de seguridad adicional; la raíz del documento no es más absoluta que cualquier otra configuración del servidor.
Por lo general, no pueden verlo. Pero si ocurre algo malo en el servidor, existe una gran posibilidad de que el servidor devuelva el código php en texto sin ejecutarlo y, por lo tanto, el usuario verá toda la fuente de ese archivo y también su contraseña.
Guardaría la contraseña en algún lugar donde no esté en la raíz del documento (no se puede abrir en el navegador) y luego abriré ese archivo con php y leeré el contenido (contraseña). O si tiene múltiples contraseñas / usuarios, los almacenaría en la base de datos para un acceso rápido.
Si desea utilizar el método de archivo, el diseño del directorio debe ser similar a esto (depneds en el servidor)
/public_html/index.php
/password.txt
$myFile = $_SERVER[''DOCUMENT_ROOT''] + "/../password.txt";
if file_exists($myFile) {
$fh = fopen($myFile, ''r'');
$password = fgets($fh);
fclose($fh);
} else die("No password file");
if ($user_input == $password) {
...... Authentication succeeded ..........
......your relatively protected code .....
} else die("Wrong password");
Si desea aún más seguridad en lugar de almacenar la contraseña como texto en ese archivo de texto. Duele es hash y luego cuando quiere compararlo con la entrada del usuario generar hash de la entrada del usuario y compararlo con el hash de la contraseña que cargó desde el archivo de texto
sha1($user_input) == $password_from_txt