Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: nobo en 16 Febrero 2012, 22:42 pm



Título: inyeccion SQL y como evitarla....
Publicado por: nobo en 16 Febrero 2012, 22:42 pm
Como puedo saber si mi pagina tiene inyeccion SQL y como  puedo hacer para evitarlo??

Es decir como puedo dar algo mas de seguridad a mi web y ponerlo algo mas dificil?

Gracias a todos.



Título: Re: inyeccion SQL y como evitarla....
Publicado por: #!drvy en 16 Febrero 2012, 23:16 pm
Bueno, si no filtras los datos que recibes en las consultas

Por ejemplo:

Código
  1. $result = mysql_query("SELECT * FROM usuarios WHERE nombre='".$_GET['nombre']."'");

O lo filtras de manera cutre
Ejemplo:
Código
  1. $_GET['nombre'] = str_replace('OR 1=1','',$_GET['nombre']);

Seguramente tendrás un sqli.

Para evitarlo puedes hacer uso de funciones como
Código
  1. mysql_real_escape_string($_GET['nombre']);

Y otras cosas como por ejemplo, si sabes que vas a recibir una variable numerica (entero), usar (int) que convierte cualquier carácter a entero.
Ejemplo:
Código
  1. $_GET['valor'] = (int)$_GET['valor'];


Saludos


Título: Re: inyeccion SQL y como evitarla....
Publicado por: nobo en 17 Febrero 2012, 00:01 am
Y... Claro... xDDD Tengo que revisarme toooooooooooooooooodo el codigo.... xD

pfffffffffffff....


Título: Re: inyeccion SQL y como evitarla....
Publicado por: EFEX en 17 Febrero 2012, 14:08 pm
Y... Claro... xDDD Tengo que revisarme toooooooooooooooooodo el codigo.... xD

pfffffffffffff....

O haces eso o cada mes al sitio te lo tumban abajo por algún grupo de arabia saudita.


Título: Re: inyeccion SQL y como evitarla....
Publicado por: s00rk en 17 Febrero 2012, 22:34 pm
O haces eso o cada mes al sitio te lo tumban abajo por algún grupo de arabia saudita.

Tambien podria crear otro archivo llamado nose anti.php, algo asi:

Código
  1. <?php
  2. foreach($_POST as $k => $v)
  3. {
  4.    $_POST[$k] = mysql_real_escape_string($v);
  5. }
  6.  
  7. foreach($_GET as $k => $v)
  8. {
  9.    $_GET[$k] = mysql_real_escape_string($v);
  10. }
  11.  

Y ya si su pagina principal incluye a las otras como modulos o asi puede poner en su pagina principal un
include_once("anti.php");
y ya, sino agregar eso a cada pagina y ya con eso podria funcionar n_n (creo hehehe)


Título: Re: inyeccion SQL y como evitarla....
Publicado por: nobo en 19 Febrero 2012, 11:07 am
No es mala idea ^^ Me gusta esa propuesta :D

Tambien podria pasar el codigo por aqui xD

Y tanto se aburren los de arabia?


Título: Re: inyeccion SQL y como evitarla....
Publicado por: K1ll1ng M4ch1n3 en 19 Febrero 2012, 12:54 pm
Una vez que hayas escapado las variables para evitar las inyecciones, puedes usar SqlMap (http://sqlmap.sourceforge.net/) para verificar que la página ya no es vulnerable.

Tienes un tutorial básico en http://amperis.blogspot.com/2008/11/rulando-sqlmap.html

Saludos.


Título: Re: inyeccion SQL y como evitarla....
Publicado por: nobo en 20 Febrero 2012, 00:47 am
Perfecto eso queria... Saber si habia algun scaner "fiable" ;)

Muchas gracias !! :D

EDITO:

Me da esto:

[01:03:42] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
[01:03:43] [WARNING] Cookie parameter 'PHPSESSID' is not dynamic
[01:03:47] [WARNING] GET parameter 'cat' is not injectable with 0 parenthesis
[01:03:49] [WARNING] GET parameter 'cat' is not injectable with 1 parenthesis
[01:03:53] [WARNING] GET parameter 'cat' is not injectable with 2 parenthesis
[01:03:55] [WARNING] GET parameter 'cat' is not injectable with 3 parenthesis

  • shutting down at: 01:03:55


Título: Re: inyeccion SQL y como evitarla....
Publicado por: Zomtrixbiesroot en 22 Febrero 2012, 02:51 am
Amig@s perdón que me meta en el tema pero estoy metiéndome en la POO y de paso en la seguridad en php :D

entonces leyendo el tema me intereso saber que hace mysql_real_escape.

yo tengo esta consulta:

$sql = "select * from noticias where id_noticia=".mysql_real_escape_string($_GET['id']);

Ahi que estaria evitando?

Cuando es recomendable usar dicha función y que hace?


Título: Re: inyeccion SQL y como evitarla....
Publicado por: nobo en 22 Febrero 2012, 09:44 am
Para filtrar los datos que se reciben.

O eso creo


Título: Re: inyeccion SQL y como evitarla....
Publicado por: Zomtrixbiesroot en 22 Febrero 2012, 12:01 pm
Pero esta bien usada como muestra mi ejemplo o cuando es recomendable usarla?

Código
  1. $sql = "insert into noticias values
  2. (
  3. null,
  4. '".$_POST["titulo"]."',
  5. '".$_POST["nota"]."',
  6. '".$_POST["code"]."',
  7. now(),
  8. now(),
  9. '".$_POST["cate"]."'
  10. )";

Acá por ejemplo en una conexión?

Abrazo


Título: Re: inyeccion SQL y como evitarla....
Publicado por: Tyrz en 22 Febrero 2012, 13:16 pm
si pasas el enlace de tu web no me importaría echar un vistazo a ver que encuentro


Título: Re: inyeccion SQL y como evitarla....
Publicado por: nobo en 22 Febrero 2012, 13:39 pm
ok! De momento esta qui:

www.elzulo.site90.net

No esta con ningun script para filtrar ni nada ;) Prueba a ver y me dices ^^


Título: Re: inyeccion SQL y como evitarla....
Publicado por: #!drvy en 22 Febrero 2012, 14:42 pm
Amig@s perdón que me meta en el tema pero estoy metiéndome en la POO y de paso en la seguridad en php :D

entonces leyendo el tema me intereso saber que hace mysql_real_escape.

yo tengo esta consulta:

$sql = "select * from noticias where id_noticia=".mysql_real_escape_string($_GET['id']);

Ahi que estaria evitando?

Cuando es recomendable usar dicha función y que hace?

Citar
Escapa caracteres especiales en la cadena no escapada, teniendo en cuenta el conjunto de caracteres actual de la conexión para que sea seguro usarla en mysql_query(). Si se van a insertar datos binarios, esta función debe ser usada.

mysql_real_escape_string() llama la función de la libreria de MySQL mysql_real_escape_string, la cual antepone backslashes a los siguientes caracteres: \x00, \n, \r, \, ', " y \x1a.

Esta función siempre debe (con pocas excepciones) ser usada para hacer los datos seguros, antes de enviar una consulta a MySQL.
http://php.net/manual/es/function.mysql-real-escape-string.php

Si es un id (numero), Puedes usar la función (int) que convierte cualquier cosa a entero.

Saludos