Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/12/2014, 10:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Signo de pesos contenido en una variable

Eso es para algún experimento tuyo y no para algo que valla a ser puesto en producción verdad?

¿Que pasaria si en el formulario alguien pusiera rm -rf directorio? te borraría un directorio del disco!

O peor aun, podría crearse un usuario nuevo o cualquier cosa!

Eso es totalmente inseguro y peligroso!

NUNCA o salvo condiciones muy particulares, debes enviar datos provenientes del usuario a la consola, y solo debe hacerse si no hay ninguna otra vía posible para resolverlo.

Llegado el caso, los argumentos deben ser debidamente escapados con escapeshellarg y escapeshellcmd.

No entiendo el porque de una pagina puente, no tiene sentido, tampoco es necesario usar la shell para guardar datos en un archivo, tampoco es necesario entrecomillar las variables para que sean interpoladas si no les vas a anexar ningún contenido.

Ademas tienes varios problemas adicionales.

Código PHP:
Ver original
  1. <?php
  2.    /*/
  3.     * Esta tecnica de extraer las variables, carece de sentido.
  4.     * Se usaba cuando $_POST se llamada $HTTP_POST_VARS, con lo cual, para ahorrar espacio se ponia:
  5.     * $post_variable = $HTTP_POST_VARS["variable"];
  6.     * Ahora ya no hace falta.
  7.     * Ademas de que debes validar cada entrada del usuario, minimamente, hay que verificar su existencia.
  8.    /*/
  9.    $usuario1 = $_POST['usuario1'];
  10.    $pass1 = $_POST['pass1'];
  11.    
  12.    /*/
  13.     * session_start debe ser la primer linea del archivo si o si, eventualmente, puede no serlo,
  14.     * pero en tal caso, debes estar 100% seguro que antes de que se llame, no se halla producido
  15.     * ninguna salida al navegador.
  16.     * Si $_POST['usuario1'] o $_POST['pass1'] no estubiera definida, php arrojaria un notice, con lo cual
  17.     * no se podria iniciar la session. Una cadena de errores por un simple detalle.
  18.    /*/
  19.    
  20.    /*/
  21.     * No hay razon para interpolar, esta tecnica solo se usa para anexar contenido de forma comoda
  22.     * tu no estas anexando nada, no tiene sentido.
  23.    /*/
  24.    $_SESSION["usuario1"] = "$usuario1";
  25.    $_SESSION["pass1"] = "$pass1";
  26.  
  27.     /*/
  28.      * "Inicio sesion y guardo los valores en la variable ya que esta pagina es unicamente un puente a la verdera pagina que hara el trabajo llamada procesar.php"
  29.      * ¿Que sentido tiene un script puente que realiza una copia de variables?
  30.     /*/
  31.  
  32.     session_start ();
  33.     /*/
  34.      * Lo mismo que antes, no validas nada, ni siquiera la existencia.
  35.      * Tampoco tiene sentido copiar la variable.
  36.     /*/
  37.     $usuario1 = $_SESSION["usuario1"];
  38.     $pass1 = $_SESSION["pass1"];
  39.  
  40.     /*/
  41.      * "Generamos el fichero usuario.txt donde almacenaremos provisoriamente los datos"
  42.      * ¿Esta es la mejor forma que se te ocurrio para guardar un texto en un archivo?
  43.      * Ademas estas metiendo variables que vienen de un formulario directamente en la consola! eso es muy peligroso!
  44.      * Tambien es peligroso crear archivos con el nombre de una variable introducida por el usuario.
  45.      * ¿Porque provisoriamente? No me digas que este es otro script puente que guarda los datos aca para que otro venga los lea y los borre.
  46.      * Si no pones seguridad de lectura sobre el directorio, cualquiera podria entrar y obtener la clave solo sabiendo el nombre de usuario.
  47.     /*/
  48.     $texto = shell_exec("echo $usuario1 $pass1 $usuario1.txt");

La forma correcta seria tener UN SOLO archivo para procesar el formulario, con algo asi:
Código PHP:
Ver original
  1. <?php
  2.     /*/
  3.      * Aca agregar validaciones que no arrojen ninguna salida al navegador ni generen errores.
  4.     /*/
  5.     if(empty($_POST["usuario1"]) || empty($_POST["pass1"]))
  6.     {
  7.         die("datos invalidos");
  8.     }
  9.  
  10.     session_start();
  11.     $_SESSION["usuario1"] = $_POST["usuario1"];
  12.     $_SESSION["pass1"] = $_POST["pass1"];
  13.    
  14.     file_put_contents(md5("algo_secreto".$_SESSION["usuario1"]).".txt", "$_SESSION[usuario1] $_SESSION[pass1]");
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios