1. ¿Buscando un Banco para abrir tu primera cuenta de ahorros? Revisa nuestro comparativo de cuentas cero mantenimiento haciendo clic aquí.
    Ocultar anuncio

¿Quién sabe PHP: sesiones, transferencia de ficheros, permisos server?

Publicado en 'Webmasters' por big_ed, 8 Ago 2019.





  1. big_ed

    big_ed Miembro maestro

    Registro:
    8 Ene 2019
    Mensajes:
    402
    Likes:
    9
    Temas:
    93




    Buenas tardes.
    Pongo un caso hipotetico para que se entienda claramente:

    Tengo una web llamada www.ED.com
    Tengo tambien un fichero llamado SESION.php (en local)
    En este fichero SESION.php tengo diseñado con código un formulario de sesion, que, una vez logueado en él, habilita un botón, que al hacerle click genera otro fichero llamado NUEVOFICHERO.php (en la misma carpeta donde se encuentra mi fichero SESION.php).
    Esto funciona perfectamente en LOCAL (en mi pc, en mi localhost). Pero ¿y si subo este fichero SESION.php a mi servidor www.ED.com? Es decir, si me voy a la carpeta PUBLIC HTML de mi servidor web y pego el fichero SESS.php...Me generaria una seccion web llamada www.ED.com/SESION.php, y al entrar ahi estaria mi formulario para loguearme, y una vez logueado , estaria el boton generador de ficheros ¿pero que pasaria al presionar el boton? ¿Me generaria el fichero "NUEVOFICHERO.php" en mi PUBLIC HTML, asi de facil, o me denegaria el acceso el servidor?
     


  2. G_Pisfato

    G_Pisfato Miembro maestro

    Registro:
    15 Nov 2015
    Mensajes:
    666
    Likes:
    80
    Temas:
    5
    Fíjate qué permisos tienes en tu servidor local en el que todo funciona bien, si lo replicas en el "remoto" debería ser así de fácil.
     
  3. big_ed

    big_ed Miembro maestro

    Registro:
    8 Ene 2019
    Mensajes:
    402
    Likes:
    9
    Temas:
    93
    Pero ¿cómo se cambian los permisos de un servidor web?
    O sea en local lo hago via consola como root.. ¿pero y en la web que, debo llamar al proveedor para que me facilite esa info, o seria como alterar algo en un archivo tipo el php.ini?
     
  4. G_Pisfato

    G_Pisfato Miembro maestro

    Registro:
    15 Nov 2015
    Mensajes:
    666
    Likes:
    80
    Temas:
    5
    Si tienes accesos con SSH, puedes cambiar los permisos desde ahí.
    Si te refieres a esos servidores Web que gestionan con algo similar a cPanel, pues por ahí deberían estar las opciones; sin embargo lo más probable es que ya estén con permisos las carpetas.
    El usuario tal vez es www-data.
     
  5. Borlocho

    Borlocho Miembro maestro

    Registro:
    16 Ene 2015
    Mensajes:
    377
    Likes:
    114
    Temas:
    11
    Tu proveedor no te ha dado acceso vía FTP?
     
  6. big_ed

    big_ed Miembro maestro

    Registro:
    8 Ene 2019
    Mensajes:
    402
    Likes:
    9
    Temas:
    93
    Es logico lo que dices, lo mas probable es que los permisos ya esten habiles, porque de lo contrario no podria ni siquiera subir el fichero SESS.php a PUBLIC HTML...Todo PUBLIC HTML debe tener permisos de escritura.

    Pero aun asi se me hace dificil de creer que tan facil sea. ¿Como es posible que yo pueda crear un boton en mi web que le permita a cualquier usuario visitante destruir el contenido de mi carpeta PUBLIC HTML? ¿entiendes lo que quiero decir? Que como puede ser tan simple algo tan peligroso.

    Yo lo que quiero hacer es , en una seccion de mi pagina web, habilitar un formulario de sesion, para que solo la persona con la clave pueda loguearse y pasar a un panel, donde se encuentre ese boton que crea un fichero en el PUBLIC HTML.

    ¿Entonces el unico filtro de seguirdad seria la Session? Es decir tendria que poner todas mis fuerzas en crear una sesion robusta?

    Si pero lo que yo quiero hacer es que una persona sin conocimiento de la web pueda subir un fichero a mi PUBLIC HTML, logueandose primero en un formulario de sesion disponible en una pestaña de mi pagina web.
    No se si este sea el procedimiento adecuado, porque nunca lo he hecho.
     
  7. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,247
    Likes:
    883
    Temas:
    75
    Lo normal es que el usuario con el que se ejecuta el servidor web (apache, nginx, otro) y que es el que ejecuta tus php pertenece a un grupo y es dueño del directorio publico, el usuario que te dan para subir archivos pertenece al mismo grupo ejemplo www-data en apache, por lo que los permisos para escribir rwxrwx--- (usuario+grupo) deben estar puestos a nivel del directorio para que cualquier codigo ejecutado pueda leer y grabar sobre el mismo.

    Si vas a subir archivos solo valida al usuario (usuario/password vs tu backend) y rediriges a la pagina donde va a subir y esta pagina que solo valide que este en sesion (via cookie, token, etc), y el directorio donde se va a depositar el archivo que tenga permisos de escritura para el usuario/grupo del servidor web.
     
  8. big_ed

    big_ed Miembro maestro

    Registro:
    8 Ene 2019
    Mensajes:
    402
    Likes:
    9
    Temas:
    93
    A ver si te entiendo: Si yo puedo crear y eliminar manualmente ficheros en mi PUBLIC HTML, significa que tambien puedo hacerlo a traves del codigo? es decir, si copio un fichero programado en mi PUBLIC HTML, y luego ese fichero lo abro en mi servidor web, es decir en www.ed.com/mifichero.php y en esa pagina hay un boton que me genera ficheros en el PUBLIC HTML, por logica lo crearia sin problema, de la misma manera como cree manualmente el fichero ?

    si creo manualmente un directorio donde se van subir las imagenes se supone que ya tendra todos los permosos no?

    El mejor metodo PHP para subir ficheros es FILES[]?? trasladarlos desde el ordenador al servidor con move_uploaded_file?
    ¿cuales son los otros metodo para subir?
    INSERT INTO en el caso de base de datos y FILES en el caso de ficheros...con eso basta o debo aprender algo mas?

    Pregunta aparte:
    ¿solo existen dos formas de almacenar datos (texto, imagenes, pdfs, etc): Con ficheros y con bases ?
     
  9. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,247
    Likes:
    883
    Temas:
    75
    Si, si el directorio tiene permisos para usuario y grupo del usuario que ejecuta a nivel de sistema operativo el servidor web. La excepcion es cuando el servidor por cosas de politicas de hosting maneje un modulo o esquema de seguridad fuera de lo que el usuario quiera hacer.

    Se crea con los permisos del usuario con el que te logueaste y que ejecuta el comando (mkdir). Si no tiene los permisos correspondientes haces uso de chown o chmod.

    No uso php, pero el manejo normal en cualquier lenguaje es leer del http request el multipart-form, grabar el archivo a un directorio temporal y de ahi moverlo a un directorio final o grabarlo en BD, hay otros lenguajes donde se puede hacer stream de la data directo del request a BD.

    Todo archivo es binario, el contenido es el que puede tener un formato (ascii, utf, zip, pdf, etc), en base de datos los campos tienen su propio tipo de datos, si se va a grabar un archivo en base tiene que ser con el tipo de campo binario que maneje el motor de base de datos que estes usando (blob, binary, etc)