elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [F][bat] Pequeño Filtro - by xassiz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [F][bat] Pequeño Filtro - by xassiz  (Leído 3,080 veces)
xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
[F][bat] Pequeño Filtro - by xassiz
« en: 31 Agosto 2009, 22:28 pm »

Bueno, pues hice un pequeñito filtro que no ocupa nada, perfecto para cualquier menu:

Código:
for %%a in ("^","&","<",">","|") do (set "op=!op:%%~a=^%%~a!")

Limpia los caracteres especiales ^, &, <, >, |..


Como vemos hace falta setlocal enabledelayedexpansion, un pequeño ejemplo usado en una "mini calculadora":

Código:
@echo off

:: Mini calculadora creada por xassiz para explicar el uso
:: de un pequeño filtro de variables.

setlocal enabledelayedexpansion
:ini
cls&echo.
set "op="&set/p "op= Escribe tu operacion: "
for %%a in ("^","&","<",">","|") do (set "op=!op:%%~a=^%%~a!")
if not defined op (goto:ini)
set "res="
set/a "res=%op%">nul 2>&1
cls&echo.
echo. Operacion: %op%&echo. Resultado: %res%
pause>nul
goto:ini

Podemos inyectar:

Código:
mira&que>bueno<es|este^filtro

Que no dara ningun error:

Salida:

Código:
  Operacion: mira&que>bueno<es|este^filtro
  Resultado:


bytes ;)


En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [F][bat] Pequeño Filtro - by xassiz
« Respuesta #1 en: 2 Septiembre 2009, 06:05 am »

está bastante bueno, eso si podrías añadir la coma.
Y siempre asignar con las comillas, mira lo que pasa con la variable z por no encerrarla: con el texto: &calc
Código:
@echo off

setlocal enabledelayedexpansion enableextensions
:prompt
set "t="
set /p t=Texto:
if not defined t (goto :prompt)
for %%a in ("^","&","<",">","|",",") do (set "t=!t:%%~a=^%%~a!")
if not defined t (goto :prompt)

set "v=%t%"
set z=%t%

echo.t=%t%
echo.v=%v%
echo.z=%z%
goto :prompt


Es decir, tu filtro está muy bueno, pero debes indicar esto de las asignaciones para que no haya problemas.
Pero, aún da problemas por ejemplo en un if:

Código:
setlocal enabledelayedexpansion enableextensions
:prompt
set "t="
set /p t=Texto:
if not defined t (goto :prompt)
for %%a in ("^","&","<",">","|",",") do (set "t=!t:%%~a=^%%~a!")
if not defined t (goto :prompt)

if "%t%"=="texto" (echo.Escribio texto)

goto :prompt

si escribes una comilla, se produce un error.

Para el uso que le estás dando, es un buen filtro, pero si utilizas las variables para otras cosas, como dentro de un if, no es un filtro completo.

En todo caso este tema ya está solucionado, básicamente usando expansión retardada en la mayoría de los casos no necesitas escapar ningún carácter.

Mira, como queda así:

Código:
@echo off

:: Mini calculadora creada por xassiz para explicar el uso
:: de un pequeño filtro de variables.

setlocal enabledelayedexpansion
:ini
cls&echo.
set "op="&set/p "op= Escribe tu operacion: "
set/a "res=!op!"
cls&echo.
echo. Operacion: !op!&echo. Resultado: !res!
pause>nul
goto:ini


Te recomiendo leas el artículo de las inyecciones batch, ahí expliqué prácticamente todo.
http://foro.elhacker.net/scripting/inyecciones_batch-t263688.0.html


« Última modificación: 2 Septiembre 2009, 06:47 am por 0x0309 » En línea

xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
Re: [F][bat] Pequeño Filtro - by xassiz
« Respuesta #2 en: 2 Septiembre 2009, 15:11 pm »

Si, las comillas si las entiendo, ya viste que las use en mi codigo ^^

Tu manual tambien lo leyera, y tu antiguo articulo tambien ::)

Pero aun no me quedo muy claro el porque de !variable! en vez de %variable% para evitar inyecciones =/


Gracias 0x0309 ;)


PD: Que diferencia hay a poner los dos setlocal a quitar enableextensions?
En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines