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"); Código PHP: Ver original function cleanString ( $string ) { ...
  #1 (permalink)  
Antiguo 19/05/2013, 12:10
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 14 años, 2 meses
Puntos: 52
¿Como limpiar bien lo que recibo por post?

hasta ahorita tengo esta funcion


y lo que pongo para probar es esto...

Código 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.
Código raro:
Ver original
  1. spacer.gifs÷t³°Ldd`dh`€ÅŸ,Œ ZD€d˜˜\¬PKv½h« + PK    R< $ src.1231175687546.png.autoresize.png}XeT…
  2. ·V`@�!¤Dé‰!†.éîîBRRén�®‘”.�…‡
  3. rJ(zЦ[Ø(<aTŽ›×JäÄ/!Ý8#ç ”ÂyÊþR볜9…‡
  4. É›£˜îã—Z$rù9hÚeªn™·Ån÷ã†~$4
  5. €b‹jTûñ�d¹;¸•'tí}Я[6‡4ùÛµ6 @‚+h…‡ i×µí–aR‰¨×à73:F�¸
  6. °0ší‘;Ü#8®{Ñ´øˆIàÅt–šñoFá{pkj2á·TR|R…‡
  7. {CZa‰+& E úNÈñ�¾ãj Zª½øj[?Fëù6µÇîä*¿§³òj½‰%'b÷æ±òÅ+…‡ MNÒö  à8³ƒÖ#Øy‡’÷
  8. 0Ú šÊ»kœÌ¯©J+ Ã%`£ñïÒ;L�[›HÆLàŽ
  9. ¡ó�‡O´úÀÒ‰
  10. ¹éŠÒ")4ñÇÒ,¯>æ2Ÿj_˜j_+k&?µ™m·Ê©$ù…‡
  11. y”Yí[v?=Ë|=Ö7àÚÍ, «ê'r]–ÖÃ�>    c¿èÀ±…‡ eòöÂD˜s;71ÅÇ_LÐ�æè»O-±hpÊåÔ®íø�#Xj#¸PÎ…‡ š²Êñ«ÌÌ*›y;ž+~� ÒèæÉÂÛ)á¼Ìþö4S
  12. iE7ålñ·žvéÄb¤]ì;z¦;
  13. ¨
  14. g ‘̘¸o¶âú´„–q €‡Âð`j°ì¬,L{~Ò³'UÁñ½ýÙ»0Av'm»ÁÒ7ÀšÜ¶s…‡
  15. "£
  16. &u“¯'._ì˜F1©y!ÊgxÅÇ®ÂÏF£¼�óÕtú‡4o…‡ K¥ÜFêG¿o†Ô]ÖR
  17. Œ(ú†‹+žgå¥; ôB½å‹tùÁYLÿ–ľ¨Wó—e%¯�…‡
  18. 5áíceï‹WIlKíÛ¿!Õ¨3?ÖHZD�k@(«G÷-çÀC…‡
  19. d'¦©ee*m9°ùdJj¸Ò/hAñb0{í¨œ.@*ëi'¾}…‡
  20. Ù«µÜÞ*Û–½¥ÉU‘   k¢*HM•!£†Ê÷�þ™wqa¡ÿ"ð…‡ ÀõotfŽÀË}‘”ÁÐêôÙ ñwß#jÎ’=tV¥AºØBYÑN0…‡
  21. ¸eJc’çeBWBfþîZ²¥[¦*Æåv…où=}Óâ:×á'ÿ‰…‡
  22. ^°Õô³åÏ_Ÿý8STœÈ.¡nârd{u¿ŒÁý†«^“…‡
  23. ×–ÐøIwÔiK»Z¼»,zhΫ±Œ*µ€þ6 GçL…ª"¥¥¹Cf]®ÆfÎ’ûq©}Fú¢‰Ê$´4"8Ëýtõ
  24. ÓQlý†K×îå¢Äì
  25. '®äªçj/›¬+ã^NXÊ. ì¨Êˈ4íV¤'Š=közb”…‡
  26. ;çR:çÿÃÜ/äB=f¾j©r   Ô&øƒÁ‹æ�d~Ø1§Pgvÿ…‡ ªJQ‹�‚œJgãMÍÙqE;§$níþ#1J—V—›|TèÀBÞ„û‹…‡
  27. ó×?Fˆˆ¿Rý%¾×„4Âo”�ð� }ƒša¨#ßOΩ¼ƒþ{FœO%åh¦Eåì«Þ1W8ž-½M4™ÙŽ…‡ [€Ÿ®2E„Y^VQ¨õ¬)BxI¾¡ûþ>ó;ôaÉûôàß]›ùì–2…‡
  28. …jø›g�§²í÷n? ¹‹ý¬& ƒ¢"TÉ`�ö¼ÔWN;$ kôLN{nÊÈá¢CÙ^ß½êÊÓþU7¤ÁðaÛæS�!¥à:uj°(G…‡
  29. ÀŸ2j?q±
  30. w“ÉÒs]ÇØ{8º¢Ä2zØô;1Ò*OçõCkf§¥8Œ¦Éi…‡ ÙŒP'ÎóÜ`9OÌt¢,h�ó¼—™96&f+ø}u5-  £«ÊÌboo>—làñ½¿I3ÓÀÜX8ÿf#™‹hx *ÖXì�CLK<^
  31. &yòdþÒ×Öv¢àß
  32. w>ÇÃðw �¢O
  33. }}ñ(ì÷Õ1´½rÚZ¿ßó*™Í�H3uyÊA>¡>Ìã=1…‡ &ˆ   A�Ì”)qÐF×’UJfÙÀYAØÕßÿW®!/èÿ´‘ýi|…‡
  34. >–Þ¥©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.
añadi esto a la funcion cleanString

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

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


intente hacer esto

Código 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..

Código 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 básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición 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
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 19 años, 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 compañero 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 imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación 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
Antigüedad: 18 años, 9 meses
Puntos: 20
Respuesta: ¿Como limpiar bien lo que recibo por post?

Código 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(1 => array("<script>alert('ad')</script>", "mauauasd", array("DADADSD")), 
               
2 => "Value",
               
3 => 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
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 18 años, 6 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.
Código 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
Ubicación: M.
Mensajes: 2.031
Antigüedad: 14 años, 2 meses
Puntos: 52
Respuesta: ¿Como limpiar bien lo que recibo por post?

Muchas gracias compañeros, 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 básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Etiquetas: html, limpiar, recibo
Atención: Estás leyendo un tema que no tiene actividad desde hace más 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 11:55.