Comunidad de diseño web y desarrollo en internet online

Inyecciones SQL

Citar            
MensajeEscrito el 17 Feb 2011 05:39 am
Cuando me entere de esto inmediatamente me puse a buscar y encontre que reemplazando la comita ( ' ) por la entidad se solucionaba. Ahora me encuentro con que inyectaban haciendo un... ?id=-1+union+select+1,2,3,4... yo me pregunto para que sirve filtrar la comilla si no hay ninguna :roll:
para evitar Inyecciones tengo esto:

Código PHP :

foreach( $_GET as $variable => $valor ){ 
        //anti-inyeccion sql
   $_GET [ $variable ] = str_replace ( "'" , "'" , $_GET [ $variable ]);
        //con esto hago que no se pueda comentar con html.
   $_GET [ $variable ] = str_replace ( "</" , "&lt;/" , $_GET [ $variable ]);

} 

realmente sirve?

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 17 Feb 2011 04:04 pm
Debes tener cuidado con # ya que puede ocasionarte inyecciones sql tambien.

Tu idea pues va bien encaminada pero deberias crear mejor una funcion que te limpie tus cadenas, por que tambien debes verificar tus POST, pero quiza en algunas ocasiones debas permitir algunos caracteres o a veces no, y mediante los parametros de una funcion puedes parsear tus strings de forma mas dinamica

Saludos

Por jOina

Claber

359 de clabLevel

2 tutoriales

 

Guadalajara, Mexico

firefox
Citar            
MensajeEscrito el 17 Feb 2011 05:02 pm
La protección de SQLInyection depende directamente de lo que haces, ya sea un logeo, agregar información, agregar un post!, en cada caso existen soluciones!

por ejemplo si estas validando un logeo y tu query es asi:

Código MySQL :

select id from tabla_usuarios where user = $_POST['user'] and password = $_POST['passw']


con solo ingresar comillas sencillas y un par de slashes estarias adentro, pero si sabes que tus usuarios no tienen estos caracteres pues lo quitas ya sea con un addslashes o un replace.

si lo que quieres es validar las entradas de un post pues deberias omitir todos los caracteres que te comprometan y permitir el uso de BBCode

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

chrome
Citar            
MensajeEscrito el 17 Feb 2011 05:21 pm
Gracias, me quedo asi entonces:

Código PHP :

foreach( $_GET as $variable => $valor ){ 
    reemplazar( "'" , "&apos;" , $_GET [ $variable ]);
    reemplazar( "</", "&lt;/" , $_GET [ $variable ]);
    reemplazar( "#", "&#35" , $_GET [ $variable ]);
}
foreach( $_POST as $variable => $valor ){ 
    reemplazar( "'" , "&apos;" , $_POST [ $variable ]);
    reemplazar( "</", "&lt;/" , $_POST [ $variable ]);
    reemplazar( "#", "&#35" , $_POST [ $variable ]);
}
function reemplazar ($filtrado, $reemplazo, $texto){
     $texto= str_replace ( $filtrado, $reemplazo , $texto]); 
}

si existe alguna otra vulnerabilidad diganme!

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 17 Feb 2011 07:47 pm

jpcw escribió:

La protección de SQLInyection depende directamente de lo que haces, ya sea un logeo, agregar información, agregar un post!, en cada caso existen soluciones!

por ejemplo si estas validando un logeo y tu query es asi:

Código MySQL :

select id from tabla_usuarios where user = $_POST['user'] and password = $_POST['passw']


con solo ingresar comillas sencillas y un par de slashes estarias adentro, pero si sabes que tus usuarios no tienen estos caracteres pues lo quitas ya sea con un addslashes o un replace.

si lo que quieres es validar las entradas de un post pues deberias omitir todos los caracteres que te comprometan y permitir el uso de BBCode


claro, yo nose bien como es BBcode, hice un "lenguaje" propio para poder poner negrita cursiva y links haciendo [b ]negrita[ /b], seguramente programé de más porque lo podia conseguir en otro lado pero ya esta echo :P

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 17 Feb 2011 09:34 pm
utiliza

mysql_real_escape_string($_POST['variable']);

Por rcarlos3

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Feb 2011 07:19 am
Si hay tienes razon, pero hay que recordar que no solo se puede hacer con lo $_GET, sino tambien con $_POST, lo que quiero decir esque tambien deverias agregar en reemplazar del $_POST codes de tipo sql como lo que puede ser

UPDATE,DELETE y esos mas, esto lo digo porque yo anteriormente mediante $_GET obtenia tablas y en un form de login de la web ponia un codigo sql y facilmente podia cambiar lo que deseara puesto que con el get obtenia informacion de la DB,tablas y demas y ya con un simple code sql podia ser hackeada con su form de login

Por s00rk

9 de clabLevel



Genero:Masculino  

Programador Lector Curioso

firefox
Citar            
MensajeEscrito el 19 Feb 2011 09:58 am
te recomiendo que para saber más del tema te metas en sitios especializados de criptografia como pueden ser los siguientes:

Manual básico de SQL injection
http://foro.elhacker.net/tutoriales_documentacion/tutorial_de_inyeccion_sql_sql_injection-t98448.0.html

Programita que detecta ciertas vulnerabilidades:
http://www.kriptopolis.org/scrawlr-detecta-sql-injection

Manual de SQL injection
http://www.unixwiz.net/techtips/sql-injection.html

Espero sirvan de ayuda

Por rosillo83

18 de clabLevel



 

Desarrollador Web PHP&MySQL

firefox
Citar            
MensajeEscrito el 21 Feb 2011 09:12 pm
muchas gracias, ya mejore mi inyeccion.php, andube probando inyecciones y no funcionan parece que va bien!

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Mar 2012 07:15 pm
Para resolver el SQL injection

lo que debemos hacer es hacer lo recomendado por los espertos y creadores de soluciones y es usar variables y evitar el sql puro en las aplicaciones y tener el codigo sql en la base de datos.
esto se logra teniendo procedimientos almacenados.

para algunos al inicio deben reorganizar su forma de pensar en cuanto al sql pero esto da garantia que lo que deseen agregar en el ataque se va como parte del valor y es imposible lograr el ataque
:D

Por perobcol

0 de clabLevel



 

msie
Citar            
MensajeEscrito el 26 Mar 2012 08:12 pm
En caso de números, puedes evitar inyecciones pasándolo a integer o double, según sea el caso..

Código PHP :

$ID = (int) $_REQUEST["id"];
$cantidad = (double) $_REQUEST["cantidad"];


Y no esta mal siempre rodear de comillas los numeros hacer los filtros en SQL

Código PHP :

$sql = "select nombre from personas where persona_id = '$id'"; // <-- En realidad $id es un numero

Por hersonHN

Claber

272 de clabLevel

3 tutoriales

Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.