Foros del Web » Programando para Internet » PHP »

Como limpiar bien lo que recibo por post?

Estas en el tema de Como limpiar bien lo que recibo por post? en el foro de PHP en Foros del Web. hasta ahorita tengo esta funcion y lo que pongo para probar es esto... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Cdigo PHP: Ver original function cleanString ( $string ) { ...
  #1 (permalink)  
Antiguo 19/05/2013, 12:10
 
Fecha de Ingreso: agosto-2012
Ubicacin: M.
Mensajes: 2.031
Antigedad: 12 aos, 3 meses
Puntos: 52
Como limpiar bien lo que recibo por post?

hasta ahorita tengo esta funcion


y lo que pongo para probar es esto...

Cdigo PHP:
Ver original
  1. function cleanString($string){
  2.     $string=trim($string);    
  3.     $string=htmlspecialchars($string);
  4.     //$string=htmlentities($string);
  5.     //$string=htmlentities($string, ENT_QUOTES,"UTF-8");
  6.     $string=nl2br($string);
  7.     return $string;    
  8. }

esa forma me gusto por que puedo insertar codigo html y lo muestra tal y cual se inserta sin alterar nada. uso codificacion utf8 osea se envian los datos como el usuario los escribe y si escribe algo de html se guardan los datos de una manera y se visualizan de la forma que el usuario los escribio. hasta alli todo bien
pero quise probar poniendo esto.. y nisiquiera logran insertar.
creen que hace falta algo en mi funcion de tal manera que no altere lo que ya eh logrado.
el codigo es este.
Cdigo raro:
Ver original
  1. spacer.gifstLdd`dh`€Ÿ,Œ ZD€d˜˜\PKvh + PK    R< $ src.1231175687546.png.autoresize.png}XeT…
  2. V`@!D‰!†.BRRn‘”.…‡
  3. rJ(zЦ[(<aTŽ›J/!8# ”yRœ9…‡
  4. ›˜—Z$r9hšen™n†~$4
  5. €b‹jTd;•'t}Я[6‡4۵6 @‚+h…‡ i׵–aR‰73:F
  6. 0š‘;#8{ѴˆIt–šoF{pkj2TR|R…‡
  7. {CZa‰+& E Nj Zj[?F6*j‰%'b+…‡ MN  8ƒ#y‡’
  8. 0 šʻkœ̯J+ %`;L[›HLŽ
  9. ‡O‰
  10. Š")4,>2Ÿj_˜j_+k&?™mʩ$…‡
  11. y”Y[v?=|=7, 'r]–Á>    c…‡ eD˜s;71_LЁO-hpԮ#Xj#P…‡ š*›y;ž+~ )4S
  12. iE7lžvb];z;
  13. g ‘˜o„–q €‡`j,L{~ҳ'Uٻ0Av'm7šܶs…‡
  14. "
  15. &u“'._˜F1y!gxǮFt‡4o…‡ KFGo†]R
  16. Œ(†‹+žg; B‹tYL–ľW—e%…‡
  17. 5ce‹WIlKۿ!ը3?HZDk@(G-C…‡
  18. d'ee*m9dJj/hAb0{œ.@*i'}…‡
  19. ٫*–U‘   k*HM•!†™wqa"…‡ otfŽ}‘” w#j’=tVABYN0…‡
  20. eJc’eBWBfZ[*v…o=}:á'‰…‡
  21. ^_Ÿ8STœ.nrd{uŒ†^“…‡
  22. –IwiKZ,zhΫŒ*€6 GL…"Cf]f’q}F‰$4"8t
  23. Ql†K
  24. 'j/›+^NX. ˆ4V'Š=kzb”…‡
  25. ;R:/B=fjr   &ƒ‹d~1Pgv…‡ JQ‹‚œJgMqE;$n#1J—V—›|TB„‹…‡
  26. ?FˆˆR%„4o” }ƒša#OΩƒ{FœO%hE1W8ž-M4™Ž…‡ [€Ÿ2E„Y^VQ)BxI>;a]›–2…‡
  27. …j›gn? ‹& ƒ"T`WN;$ kLN{nC^߽U7aS!:uj(G…‡
  28. Ÿ2j?q
  29. w“s]{82z;1*OCkf8Œi…‡ ŒP'`9Ot,h—™96&f+}u5-  boo>—l½I3X8f#™‹hx *XCLK<^
  30. &ydv
  31. w>w O
  32. }}(1rZ*™͝H3uyA>>=1…‡ &ˆ   A”)qF’UJfYAW!/è‘i|…‡
  33. >–ޥ0S@,@ ’‹”(n€*c‰y

lo que se que es es el apostrofe. '
entonces lo que me queda es averiguar como filtrar el apostrofe

de antemano gracias


reedito.
aadi esto a la funcion cleanString

Cdigo PHP:
Ver original
  1. $string=str_replace("'","\'",$string);

ahora si agarra el apostrofe,
pero ahora como scapo la \


intente hacer esto

Cdigo php erroneo:
Ver original
  1. $string=str_replace("\","",$string);

pero no escapa ni para su sintaxys correcta.. osea no se puede hacer esto

echo "\";
como solucionarlo, seria lo unico me imagino


finalmente lo logre con este truco..

Cdigo PHP:
Ver original
  1. function cleanString($string){
  2.  
  3.     $string=trim($string);    
  4.  
  5.     $string=htmlspecialchars($string);
  6.    
  7.  
  8.     //$string=htmlentities($string);
  9.  
  10.     //$string=htmlentities($string, ENT_QUOTES,"UTF-8");
  11.  
  12.     //$string=htmlentities($string, ENT_QUOTES,"iso-8859-1");
  13.  
  14.     $string=nl2br($string);
  15.    
  16.  
  17.     $diag= "\'";
  18.     $diag=str_replace("'","",$diag);
  19.    
  20.     $string=str_replace($diag,"",$string);
  21.    
  22.     $string=str_replace("'","\'",$string);
  23.  
  24.     return $string;
  25.  
  26. }

no se si sea buena idea hacerlo pero funciona

no es probable que alguien use diagonales y apostrofes pero si a alguien se le ocurre...


y por cierto del 1 al 10 que tan vulnerable es mi sitio con esa validacion?

y que mejoras podria darle

REVIELVO A REEDITAR.
solo me funciono para la apostrofe pero para la diagonal invertida no la agarra
__________________
a veces creemos que es algo bsico pero al profundizar nos damos cuenta que estbamos tocando solo la cola de la culebra

ltima edicin por minombreesmm; 19/05/2013 a las 13:06
  #2 (permalink)  
Antiguo 19/05/2013, 13:57
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicacin: Montevideo-Uruguay
Mensajes: 633
Antigedad: 17 aos, 1 mes
Puntos: 80
Respuesta: Como limpiar bien lo que recibo por post?

En esta web tienes info sobre ataques XSS
https://www.owasp.org/index.php/XSS_...on_Cheat_Sheet

y aqui en el foro un compaero se tomo la tarea de escribir de seguridad en las aplicaciones web,
http://www.forosdelweb.com/f18/seguridad-web-1004102/

Saludos y espero te sirva.
__________________
"La imaginacin es ms importante que el conocimiento. El conocimiento es limitado, mientras que la imaginacin no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #3 (permalink)  
Antiguo 19/05/2013, 14:39
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigedad: 16 aos, 10 meses
Puntos: 20
Respuesta: Como limpiar bien lo que recibo por post?

Cdigo PHP:
<?php
error_reporting
(E_ALL);

function 
Filter($varToFilter)
{
    if(
is_array($varToFilter))
    {
        foreach(
$varToFilter as &$value)
        {
            if(
is_array($value))
            {
                
$value Filter($value);
            }
            else
            {
                
$value htmlspecialchars(addslashes(trim($value)));
            }
        }
        
        return 
$varToFilter;
    }
    else
    {
        return 
htmlspecialchars(addslashes(trim($varToFilter)));
    }
}

$array = array(=> array("<script>alert('ad')</script>""mauauasd", array("DADADSD")), 
               
=> "Value",
               
=> array(array(array("Last"))),
               
"something" => "2131");
            
$array Filter($array);        
print_r($array);

?>
Si lo haces con un array traverser creo que sera mejor asi directamente le das a la funcion $_POST como parametro y te filtra todo lo que hay dentro sea otro array o no

Saludos
  #4 (permalink)  
Antiguo 19/05/2013, 14:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicacin: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigedad: 16 aos, 7 meses
Puntos: 2534
Respuesta: Como limpiar bien lo que recibo por post?

La barra de escape es \ as que si quieres escapar la barra de escape debes escribirla dos veces.
Cdigo PHP:
echo "\\"
__________________
Y U NO RTFM? щ(дщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 19/05/2013, 15:31
 
Fecha de Ingreso: agosto-2012
Ubicacin: M.
Mensajes: 2.031
Antigedad: 12 aos, 3 meses
Puntos: 52
Respuesta: Como limpiar bien lo que recibo por post?

Muchas gracias compaeros, creo que efectivamente mi fuuncion cleanString es un bebe a comparacion de todo lo que se tiene que hacer. en especial si en mi pagina quiero que se incluya todo el texto y simbolo que el usuario quiera.

creo que me espera demasiado trabajo, tambien estaba viendo de como hacer los includes, y creo que tambien me dara mucho trabajo cuando quiera crear las urls amigables, que por cierto aun no he logrado que funcionen y ni siquiera eh incluido eso, pero bueno metere todo eso explicado en los enlaces en la funcion cleanString.
__________________
a veces creemos que es algo bsico pero al profundizar nos damos cuenta que estbamos tocando solo la cola de la culebra

Etiquetas: html, limpiar, recibo
Atencin: Ests leyendo un tema que no tiene actividad desde hace ms de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:47.