Validar variables de entorno

Iniciado por carlitos.dll, 13 Mayo 2008, 06:17 AM

0 Miembros y 1 Visitante están viendo este tema.

carlitos.dll

Tengo la siguiente pregunta:
En batch para windows ¿cómo puedo validar las variables de entorno?

Ejemplo:

@echo off
:box
set /p nombre="Ingrese un nombre:"
echo Usted ingresó:
echo %nombre%
:verify
set resp=
set /p resp="¿Está bien?[s/n]":
if "resp"="s" (echo Muy bien & exit)
if "resp"="n" (goto box)
goto verify


Si cuando pide que ingrese un nombre, ingreso lo siguiente:
juan &echo loquesea >>C:\hola.txt

y al imprimir mediante echo la variable de entorno:
muestra por pantalla juan
y luego escribe loquesea en el archivo C:\hola.txt


Por ello, mi pregunta es: ¿como podriamos validar las variables de entorno?





leogtz

Hola Carlitos.dll no entiendo muy bien tu pregunta, pero si puedo decirte que esas no son variables de entorno, son simples variables.

Y pues mmmm algo de lo que medio entendi es que para evitar que ciertos caracteres como & > < "" sean tomados como parte del code, puedes usar antes este caracter ^.

Disculpa, es que no entendi bien  :-(

Bueno saludos man.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

carlitos.dll

#2
gracias RockoX, a lo que me refiero es a limpiar el contenido de una variable para que no contenga comandos:
En el ejemplo logré limpiarlo hasta cierto modo eliminando ciertos caracteres (despues del = y antes del % final no hay nada, por lo que se borra ese caracter) no todos, aunque peor es nada.

@echo off
:box
set /p nombre="Ingrese un nombre:"
set nombre=%nombre:>=%
set nombre=%nombre: =%
set nombre=%nombre:&=%
set nombre=%nombre:^=%
set nombre=%nombre:<=%

Aqui el orden de limpieza si importa, en este caso el caracter con mayor prioridad es el > para que no se pueda redireccionar, luego el espacio, etc. No es completamente optimo para mi gusto, porque no pude filtrar el or |

asi: si en la variable alguien ingresa codigo, se ejecuta.
ejemplo:
set /p nombre="Ingrese un nombre:"
e ingreso:
carlos & echo. | net user Admin *
o
carlos & echo. | format E: /Q

Primero se limpia el > no tiene
Despues el espacio, pero en windos no importan los espacios:
asi sigue quedando el mismo codigo, y cuando filtro el & se alcanza a ejecutar el codigo al leer, debido a que no se pudo filtrar el or |, si ese or hubiese sido & el comando habria perdido sentido.


No logre lo que esperaba, pero al fin y al cabo, algo es algo.
Gracias RockoX por responder.

No_NICK

#3
 

  La manera mas facil de hacer esto es:


       

set /p nombre="Ingrese un nombre:"

:: aqui filtras lo que el usuario ingreso
for /F "tokens=1" %%a in ('echo %nombre%') do set nam=%%a

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

echo la variable es
echo %nam%



      Saludos xD

...

~[uNd3rc0d3]~

yo sigo sin enteder bien tu pregunta...para empezar como ya te dijeron no tiene nada que ver con las variables de entorno, eso es otra cosa aparte que son variables predefinidas como %windir% %homepath% etc

segun lo que entendi vos queres que el usuario ingrase una cadena al programa y lo que queres hacer es depurar algunos comando para evitar exploits del tipo inyectivos

lo que hiciste esta bien y tenes mucha razon en que se ese or hubiese sido and no tendria sentido.... pero quizas puedas leer la cadena que el usuario intrudusco desde un archivo de texto con for, la analizas ahi y la filtras, despues la mostras....

nos vemos

leete las reglas asi todos estamos mejor ;)

Freeze.

¿Como hacer para que la variable no se ejecute?

A eso se refiere él ;)