Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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 (php) [Seleccionar]
$result = mysql_query("SELECT * FROM usuarios WHERE nombre='".$_GET['nombre']."'");

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

Seguramente tendrás un sqli.

Para evitarlo puedes hacer uso de funciones como
Código (php) [Seleccionar]
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 (php) [Seleccionar]
$_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
Cita de: nobo en 17 Febrero 2012, 00:01 AM
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
Cita de: EFEX en 17 Febrero 2012, 14:08 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 (php) [Seleccionar]

<?php
foreach($_POST as $k => $v)
{
    
$_POST[$k] = mysql_real_escape_string($v);
}

foreach(
$_GET as $k => $v)
{
    
$_GET[$k] = mysql_real_escape_string($v);
}


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

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 (php) [Seleccionar]
$sql = "insert into noticias values
(
null,
'".$_POST["titulo"]."',
'".$_POST["nota"]."',
'".$_POST["code"]."',
now(),
now(),
'".$_POST["cate"]."'
)";


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
Cita de: 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?

CitarEscapa 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