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<?php
/*/
* Esta tecnica de extraer las variables, carece de sentido.
* Se usaba cuando $_POST se llamada $HTTP_POST_VARS, con lo cual, para ahorrar espacio se ponia:
* $post_variable = $HTTP_POST_VARS["variable"];
* Ahora ya no hace falta.
* Ademas de que debes validar cada entrada del usuario, minimamente, hay que verificar su existencia.
/*/
$usuario1 = $_POST['usuario1'];
$pass1 = $_POST['pass1'];
/*/
* session_start debe ser la primer linea del archivo si o si, eventualmente, puede no serlo,
* pero en tal caso, debes estar 100% seguro que antes de que se llame, no se halla producido
* ninguna salida al navegador.
* Si $_POST['usuario1'] o $_POST['pass1'] no estubiera definida, php arrojaria un notice, con lo cual
* no se podria iniciar la session. Una cadena de errores por un simple detalle.
/*/
/*/
* No hay razon para interpolar, esta tecnica solo se usa para anexar contenido de forma comoda
* tu no estas anexando nada, no tiene sentido.
/*/
$_SESSION["usuario1"] = "$usuario1";
$_SESSION["pass1"] = "$pass1";
/*/
* "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"
* ¿Que sentido tiene un script puente que realiza una copia de variables?
/*/
/*/
* Lo mismo que antes, no validas nada, ni siquiera la existencia.
* Tampoco tiene sentido copiar la variable.
/*/
$usuario1 = $_SESSION["usuario1"];
$pass1 = $_SESSION["pass1"];
/*/
* "Generamos el fichero usuario.txt donde almacenaremos provisoriamente los datos"
* ¿Esta es la mejor forma que se te ocurrio para guardar un texto en un archivo?
* Ademas estas metiendo variables que vienen de un formulario directamente en la consola! eso es muy peligroso!
* Tambien es peligroso crear archivos con el nombre de una variable introducida por el usuario.
* ¿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.
* Si no pones seguridad de lectura sobre el directorio, cualquiera podria entrar y obtener la clave solo sabiendo el nombre de usuario.
/*/
$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<?php
/*/
* Aca agregar validaciones que no arrojen ninguna salida al navegador ni generen errores.
/*/
if(empty($_POST["usuario1"]) || empty($_POST["pass1"])) {
}
$_SESSION["usuario1"] = $_POST["usuario1"];
$_SESSION["pass1"] = $_POST["pass1"];
file_put_contents(md5("algo_secreto".$_SESSION["usuario1"]).".txt", "$_SESSION[usuario1] $_SESSION[pass1]");