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.
Bueno, si no filtras los datos que recibes en las consultas
Por ejemplo:
$result = mysql_query("SELECT * FROM usuarios WHERE nombre='".$_GET['nombre']."'");
O lo filtras de manera cutre
Ejemplo:
$_GET['nombre'] = str_replace('OR 1=1','',$_GET['nombre']);
Seguramente tendrás un sqli.
Para evitarlo puedes hacer uso de funciones como
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:
$_GET['valor'] = (int)$_GET['valor'];
Saludos
Y... Claro... xDDD Tengo que revisarme toooooooooooooooooodo el codigo.... xD
pfffffffffffff....
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.
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:
<?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)
No es mala idea ^^ Me gusta esa propuesta :D
Tambien podria pasar el codigo por aqui xD
Y tanto se aburren los de arabia?
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.
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
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?
Para filtrar los datos que se reciben.
O eso creo
Pero esta bien usada como muestra mi ejemplo o cuando es recomendable usarla?
$sql = "insert into noticias values
(
null,
'".$_POST["titulo"]."',
'".$_POST["nota"]."',
'".$_POST["code"]."',
now(),
now(),
'".$_POST["cate"]."'
)";
Acá por ejemplo en una conexión?
Abrazo
si pasas el enlace de tu web no me importaría echar un vistazo a ver que encuentro
ok! De momento esta qui:
www.elzulo.site90.net
No esta con ningun script para filtrar ni nada ;) Prueba a ver y me dices ^^
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