Funcionalidad:
-Limpiar carácteres que no estén dentro del rango [0-9] [a-z] [Espacio] en el contenido de las variables.
Mejoras con respecto a la versión anterior:
-Funciona con las extensiones de comando deshabilitadas. (cmd.exe /e:off)
-Ya no es necesario hacer, if defined variable call :clean variable.
-Toda esta función ha sido respuesta al artículo de sirdarckcat: Vulnerabilidades en programas BATCH (buscarlo en google).
código de la función.
Código:
:CLEAN
::deja solo caracteres dentro del rango a-z 0-9 y espacio en el contenido de las variables.
::version 2.0
::Recibe un parametro con el nombre de la variable que se quiere filtrar su contenido.
::Ejemplo:
::call :clean nombreDeMiVariable
::autores: Matt Alvariz , Carlos
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@SET "V=%*"
@SET "S=!%V%!"
@IF NOT DEFINED S EXIT /B 1
@SET "V="
:LOOP
@FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
) DO @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
@SET "S=!S:~1!"
@IF DEFINED S GOTO :LOOP
@(ENDLOCAL & SET %*=%V%)
@SETLOCAL ENABLEEXTENSIONS
@EXIT /B 0
Ejemplo en acción:
login.cmd
Código:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET /A "I=3"
SET "PWL=ByeWorld"
SET "P=PWL"
:START
@ECHO OFF
CLS
echo.*===============================================================
echo.Bienvenido a Telnet Server de Microsoft.
echo.*===============================================================
IF !I! LEQ 0 EXIT
SET /A "I-=1"
SET "INPUT="
SET /P "INPUT=Password:"
CALL :CLEAN INPUT
@FOR /F %%_ IN ("!P!") DO @IF NOT "!INPUT!"=="!%%_!" (
GOTO :START
)
ECHO.BIENVENIDO.
PAUSE
EXIT /B
:CLEAN
::deja solo caracteres dentro del rango a-z 0-9 y espacio en el contenido de las variables.
::version 2.0
::Recibe un parametro con el nombre de la variable que se quiere filtrar su contenido
::autores: Matt Alvariz , Carlos
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@SET "V=%*"
@SET "S=!%V%!"
@IF NOT DEFINED S EXIT /B 1
@SET "V="
:LOOP
@FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
) DO @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
@SET "S=!S:~1!"
@IF DEFINED S GOTO :LOOP
@(ENDLOCAL & SET %*=%V%)
@SETLOCAL ENABLEEXTENSIONS
@EXIT /B 0