si está usando eso en una terminal, ¿tiene en cuenta que ambas credenciales se almacenan en el historial de bash?
Francisco Tapia
15
Tal comando no es seguro porque otro usuario podría usar ps -efpara ver qué procesos se están ejecutando. Cuando curl -u username:password http://example.comaparece en la lista, su destino, nombre de usuario y contraseña se ven comprometidos.
No es seguro, porque cURL se predetermina a la autenticación básica donde el protocolo HTTP envía su contraseña en texto claro. Cuando especifica la username:passwordcadena, se convierte en una cadena BASE64 en el encabezado HTTP:
Cualquier persona que pueda interceptar su tráfico HTTP (su proveedor, cualquiera que acceda al mismo AP inalámbrico que usted, etc.) podrá recuperar la contraseña simplemente usando un convertidor BASE64 en línea .
El protocolo HTTPS mejorará las cosas al establecer una conexión cifrada antes de que se envíe este encabezado, evitando que se revele la contraseña. Sin embargo, esto solo se aplica si el usuario presta atención cuando se le solicita confirmar certificados desconocidos, autorizar excepciones de seguridad, etc.
Tenga en cuenta que los argumentos de comando pueden estar disponibles para que otros usuarios en la misma máquina los vean, por ejemplo ps -ef, / sistema de archivos proc, en su historial de bash y en su registro de terminal (gracias por el comentario de @ Lambert que lo señala). cURL en algunas plataformas intenta ocultar la contraseña, por lo que, por ejemplo ps -ef, es probable que vea un espacio en blanco en lugar de una contraseña. Sin embargo, en lugar de pasar la contraseña como un argumento de línea de comandos, es mejor que cURL solicite una contraseña directamente, como se explica en las preguntas frecuentes de cURL .
Incluso si está en una plataforma donde curl sobrescribe con éxito su propio argumento para ocultar datos ps, hay un período mientras se inicia antes de que se realice esa sobrescritura donde ese contenido es vulnerable.
Charles Duffy
¿Qué pasa con la autenticación de resumen? ¿Curl no usa eso por defecto?
rr-
2
La autenticación de @rr Digest es marginalmente mejor, ya que no evita los ataques de hombre en el medio, por lo que aún es mejor usar HTTPS.
Dmitry Grigoryev
1
@rr ¿Cómo afirmas que la mayoría de los navegadores no confían en StartSSL ? ¿Espera muchos usuarios de Windows 95 o Firefox 1.5?
La fusión con la respuesta de @Dmitry Grigoryev podría ser la más precisa.
Francisco Tapia
1
Sí, perdí por completo la gran parte del problema que debo admitir.
Dmitry Grigoryev
el comando podría ser parte de un script que solo el usuario pueda leer ...
Pete
2
Las líneas de comando de @Pete de los programas en ejecución (ya sea que se inicien desde un script o en una terminal) generalmente son visibles para todos los usuarios a través del pscomando y el /procsistema de archivos. Si el comando finaliza rápidamente, el riesgo se reduce, pero sigue ahí.
RBerteig
2
Se supone que las respuestas de @Pete no son exclusivas, se complementan entre sí. Entonces, está bien que la segunda respuesta omita la amenaza explicada en la primera, más bien, sería redundante repetirla. Y no llamaría falsa a la declaración porque no es verdad en todos los casos posibles.
Dmitry Grigoryev
1
Esto podría hacerse de una manera más segura usando el parámetro --netrc-file.
Crea un archivo con 600 permisos
Por ejemplo: vi / root / my-file
máquina ejemplo.com
iniciar sesión USERNAME
contraseña CONTRASEÑA
Guarde y cierre el archivo
Use lo siguiente para acceder a la URL con nombre de usuario y contraseña.
Es inseguro cuando se usa el esquema HTTP. Para hacerlo seguro, debe usar HTTPS.
Para ocultar que la contraseña no aparezca en el historial de comandos, solo proporcione el nombre de usuario. Curl solicitará la contraseña, si no se proporciona en el comando.
ps -ef
para ver qué procesos se están ejecutando. Cuandocurl -u username:password http://example.com
aparece en la lista, su destino, nombre de usuario y contraseña se ven comprometidos.Respuestas:
No es seguro, porque cURL se predetermina a la autenticación básica donde el protocolo HTTP envía su contraseña en texto claro. Cuando especifica la
username:password
cadena, se convierte en una cadena BASE64 en el encabezado HTTP:Cualquier persona que pueda interceptar su tráfico HTTP (su proveedor, cualquiera que acceda al mismo AP inalámbrico que usted, etc.) podrá recuperar la contraseña simplemente usando un convertidor BASE64 en línea .
El protocolo HTTPS mejorará las cosas al establecer una conexión cifrada antes de que se envíe este encabezado, evitando que se revele la contraseña. Sin embargo, esto solo se aplica si el usuario presta atención cuando se le solicita confirmar certificados desconocidos, autorizar excepciones de seguridad, etc.
Tenga en cuenta que los argumentos de comando pueden estar disponibles para que otros usuarios en la misma máquina los vean, por ejemplo
ps -ef
, / sistema de archivos proc, en su historial de bash y en su registro de terminal (gracias por el comentario de @ Lambert que lo señala). cURL en algunas plataformas intenta ocultar la contraseña, por lo que, por ejemplops -ef
, es probable que vea un espacio en blanco en lugar de una contraseña. Sin embargo, en lugar de pasar la contraseña como un argumento de línea de comandos, es mejor que cURL solicite una contraseña directamente, como se explica en las preguntas frecuentes de cURL .fuente
ps
, hay un período mientras se inicia antes de que se realice esa sobrescritura donde ese contenido es vulnerable.No es seguro Los parámetros de la línea de comando son visibles para todos los usuarios.
fuente
ps
comando y el/proc
sistema de archivos. Si el comando finaliza rápidamente, el riesgo se reduce, pero sigue ahí.Esto podría hacerse de una manera más segura usando el parámetro --netrc-file.
Por ejemplo: vi / root / my-file
máquina ejemplo.com
iniciar sesión USERNAME
contraseña CONTRASEÑA
Guarde y cierre el archivo
curl --netrc-file / root / my-file http://example.com
fuente
Es inseguro cuando se usa el esquema HTTP. Para hacerlo seguro, debe usar HTTPS.
Para ocultar que la contraseña no aparezca en el historial de comandos, solo proporcione el nombre de usuario. Curl solicitará la contraseña, si no se proporciona en el comando.
fuente
La respuesta corta es no ... pero ...
Si no hay opciones del lado del servidor, puede reforzar la seguridad.
Ninguno de estos es menos seguro que un navegador que utiliza HTTP.
fuente