Comunidad de diseño web y desarrollo en internet online

Ayuda con consultas en a BDD con PHP

Citar            
MensajeEscrito el 15 Sep 2010 06:53 am
Hola me a surgido el siguiente problema e hecho una web, que la verdad esteticamente me a quedado hermosa. pero en el tema de seguridad HORRIBLE.

Todas mis consultas para darle una idea las genero haci.

[code][php]$consulta = "SELECT * usuario WHERE usuario='".$user."' AND pass='".$pass."'";
$res = mysql_query($consulta);[/php][/code]

Osea me hacen un terrible injection. Como puedo hacer mucho mas seguras mis consultas? y me podrian dar un ej:?.
Gracias de antemano.

Por sodyack

40 de clabLevel



 

Ninguno

msie8
Citar            
MensajeEscrito el 15 Sep 2010 12:10 pm

Por nax_hh

Claber

168 de clabLevel

1 tutorial

 

Reus

firefox
Citar            
MensajeEscrito el 15 Sep 2010 04:20 pm
E leido y aun con mysql_real_escape_string siguen siendo poco seguras las consultas? con que otras propiedades puedo hacer mas seguras mis consultas?

Por sodyack

40 de clabLevel



 

Ninguno

opera
Citar            
MensajeEscrito el 15 Sep 2010 04:54 pm
Ahora, perdón mi estupida pregunta, porque no creaste un config.php en la raiz y listo, en ves de hacer consultas directas a la bd, ?.
Es una animalada eso!.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 16 Sep 2010 10:24 am
Tu dices crear un solo php con consultas y pasarles array?..

Por sodyack

40 de clabLevel



 

Ninguno

opera
Citar            
MensajeEscrito el 16 Sep 2010 11:55 am

Digitalrosario.com escribió:

Ahora, perdón mi estupida pregunta, porque no creaste un config.php en la raiz y listo, en ves de hacer consultas directas a la bd, ?.
Es una animalada eso!.


porque un sistema de usuarios no se pueden guardar todos los usuarios en un config.php

eso si es una animalada :S


Al tema, con esa función yo creo que la seguridad es suficiente... a ver que te dicen..

Por nax_hh

Claber

168 de clabLevel

1 tutorial

 

Reus

firefox
Citar            
MensajeEscrito el 17 Sep 2010 02:40 am
Gracias nax_hh, boy a agregar eso en mis consultas, otra cosa mas, Ademas uso str_replace() para remplazar algunas simbologias.

Por sodyack

40 de clabLevel



 

Ninguno

opera
Citar            
MensajeEscrito el 17 Sep 2010 02:55 am
Hola, ademas me fijo que no tengo seguridad en mis GET como en mis POST.

Ej: Haci los uso.

$id = $_GET['id'];

Con esto queda bien seguro los datos que ingresan?

$id = addslashes(strip_tags(htmlspecialchars(htmlentities($_GET['id']))));

Gracias de antemano.

Por sodyack

40 de clabLevel



 

Ninguno

opera
Citar            
MensajeEscrito el 17 Sep 2010 03:58 am
hola sodyack! como va ?

Cuando hablas de seguridad a la hora de proteger las consultas (para evitar posibles injects), lo que plantea nax_hh es muy usado y seguro.

mysql_real_escape_string lo que hace (casi repitiendo lo que dice php.net) es "escapar las comillas que se encuentren en el parámetro que le pasas a la función".
Por eso (y solo a modo de estar seguros) es recomendable el uso de mysql_real_escape_string a la variable que te llega en un request (ya sea POST o GET).

puedes estar seguro que al usar mysql_real_escape_string de esta forma ya no tendrás problemas en cuanto a los posibles injects.

Ahora bien, lo que preguntas en tu último mensaje, ya no es solo un tema de seguridad estrictamente hablando, sino que es un tema de semántica a la hora de guardar un determinado valor en la base.

básicamente lo que haces en esta línea:

Código PHP :

$id = addslashes(strip_tags(htmlspecialchars(htmlentities($_GET['id']))));


1) con htmlentities dejas el valor de $_GET['id'] pero con sus caracteres convertidos a entidades html ( las "&" las pasa a "&aamp;", las "ñ" las pasa a "ñ", etc).
2) luego htmlspecialchars actúa de igual forma que htmlentities (solo que convierte algunos caracteres).
3) enseguida, con strip_tags estas intentando quitar todos los tags. Pero cuidado, al utilizar anteriormente htmlentities reemplazaste todos los "<" y ">" por sus caracteres html ( "&lt;" y "&gt;" ). así que no quitarás ningún tag.
4) al aplicar addslashes estás agregando "\" para escapar los caracteres (aunque puede parecer que esta función hace lo mismo que mysql_real_escape_string, es ampliamente recomendado que se use esta última en lugar de addslashes)

http://www.php.net/manual/es/function.addslashes.php

como ves, analizando, algunos de estos pasos no son necesarios. de hecho, si te pones a pensar. Quizá el mismo campo ID en la base, sea numérico, por lo que con un simple "is_numeric($_GET['id'])" bastaría para verificar si el valor que está en "$_GET['id']" es del tipo que esperas.

Una última recomendación .. y quizá ya de paso ampliando ( y siendo quizá algo más certero) es bueno que siempre tiendas a centralizar tus querys. Si bien hay consultas puntuales que son para determinado lugar del site, es bueno comiences a usar clases para (entre muchísimas cosas) que puedas manipular los elementos en tu programación y hagas cambios más rápidos a la hora de hacer modificaciones como estas.

saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 17 Sep 2010 05:06 am
Ok, gracias por la info, respesto al $_GET['id'], Era solo un ej de como hacia las consultas. No necesariamente es eso lo que necesito cuidar. Pero gracias por la respuesta.

Por sodyack

40 de clabLevel



 

Ninguno

opera

 

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