Re: [PHP-ES] do while + mysql

[email protected] (@ndrés) Fri, 4 Apr 2014 12:39:05 -0600
Newsgroups php.general.es
Message-ID <CAF399UabePThqgtXzBare=ZiMS0nNVCBDMQN0PDwAZbWrYhu6g@mail.gmail.com>
Lucas: Estoy de acuerdo, Por eso dije que "muchísimo más expuesto". Nunca
dije que fueran la solución a todos los problemas de seguridad.

MVC es una muy buena idea, mucho mejor que sólo una consulta a un SP.  Lo
ideal en MVC es que la capa que accesa a datos los valide y la BD los
revalide con SPs. En otras palabras MVC es mejor que nada y MVC+SPs es aún
mejor.

E igualmente hay muchas cosas que pueden mejorar la seguridad/escalabilidad
de la aplicación.Por ejemplo, estamos asumiendo que el servidor de bases de
datos es uno sólo y que siempre está arriba. Nada de lo que hemos
mencionado hasta el momento ataca ese problema, y para eso hay otras
soluciones como servicios de colas (WebSphere, MSQ,etc), MYSQL_Proxy, etc.
Tampoco hemos hablado nada de balanceo a nivel del servidor de aplicación,
ni de seguridad.

En fin, mi primer comentario iba en el sentido de que hacer una consulta
directa desde la capa de aplicación es mala idea y sugería SP por varias
razones. Pero que hay muchas otras capas/servicios que una aplicación ideal
debería tener es algo muy cierto. Cuáles son las que debe tener también
depende de muchos otros factores que tampoco estamos considerando como
presupuesto, el objetivo de la aplicación, etc.


2014-04-04 9:29 GMT-06:00 Lucas Crisman <[email protected]>:

> Andres: la capa de datos tambien puede ser creada sobre PHP y ser mucho mas
> flexible ante ataques que los stored procedures sin la necesidad de ellos.
> Tanto ataques SQL Injection como XSS siguen siendo posible realizar con
> stored procedures. La verdad no coincido en el hecho de que "hacer una
> consulta directa a la BD es mala idea", existen muchas formas de abstraer
> codigo para encargarse de cada capa (vistas, controladores, modelos, etc),
> pero nada asegura que utilizando stored procedures estés asegurándote te
> ataques ni separando las capas de la aplicación de la mejor manera.
>
> Saludos
>
>
> El 3 de abril de 2014, 18:54, Alexis Saucedo <[email protected]
> >escribió:
>
> > Muchisimas gracias a todos por su tiempo, voy a tenerlo en cuenta.
> >
> > Un saludo!
> >
> >
> > El 31 de marzo de 2014, 16:49, @ndrés <[email protected]> escribió:
> >
> > > Su sitio queda muchísimo más expuesto a ataques como SQL injections y
> > XSS.
> > >
> > > Ud le está dejando la corroboración de los datos a la capa de
> > > presentación. Si el día de mañana quisiera migrar de PHP a otra
> > tecnología
> > > (ej Ruby) tiene que migrar todo el código de acceso a datos. Lo mismo
> > pasa
> > > si quisiera cambiar de BD, tiene que reescribir y probar la capa de
> > > presentación.
> > >
> > > Seguridad, mantenibilidad y claridad. Por esas tres razones es mala
> idea.
> > >
> > >
> > > 2014-03-28 16:48 GMT-06:00 El Ale... <[email protected]>:
> > >
> > > muchisimas gracias a todos por u tiempo me sirvio bastante! andres por
> > que
> > >> decis q no es una buena idea?.
> > >>
> > >> Saludos!
> > >>
> > >>
> > >> El 27 de marzo de 2014, 3:06, @ndrés <[email protected]> escribió:
> > >>
> > >> > Hacer una consulta directa a una BD es muy mala idea. Store
> > procedures.
> > >> >
> > >> >
> > >> > 2014-03-26 19:09 GMT-06:00 Philipp Keweloh <[email protected]>:
> > >> >
> > >> > El 26 de marzo de 2014, 21:56, El Ale... <[email protected]>
> > >> >> escribió:
> > >> >>
> > >> >> > Buenas tardes amigos, les traigo una consulta por que la verdad
> que
> > >> hace
> > >> >> > rato que vengo con esto "atandolo con alambre" pero ahora
> necesito
> > >> una
> > >> >> > solucion aunque no la encuentro, tengo una llamada a mysql por
> > >> ejemplo
> > >> >> "no
> > >> >> > me reten si esta mal escrita" jaja:
> > >> >> >
> > >> >> > $query = mysql_query(SELECT * FROM db WHERE status='1');
> > >> >> >               if($row=mysql_fetch_array($query){
> > >> >> >               echo $row[nombre];
> > >> >> >               mysql_query(UPDATE tabla SET status='2' WHERE
> > id='6'")
> > >> >> >              }
> > >> >> >
> > >> >> > entonces recoje los datos segun su id y si este es = a 1 lo trae
> > >> sino no
> > >> >> > niega, ahora yo a esto lo quiero hacer recorrer toda la base
> > entonces
> > >> >> pense
> > >> >> > hacerlo con do while, ahora yo lo que solia hacer es
> > >> >> >
> > >> >> > do{
> > >> >> > //hacer algo
> > >> >> > }
> > >> >> > while($query=TRUE)
> > >> >> >
> > >> >> > (supongamos) entonces cuanod ve un status 1 lo trae y lo
> renombre 2
> > >> asi
> > >> >> no
> > >> >> > vuelve a traerlo pero jamas me respeta el $query=TRUE si este no
> es
> > >> >> > verdadero sigue igual al bucle y jamas para, ¿alguno sabe que
> puedo
> > >> >> estar
> > >> >> > haciendo mal?.
> > >> >> > Espero no haberlos mareado.
> > >> >> >
> > >> >> > Saludos!
> > >> >> >
> > >> >>
> > >> >> Usa mysql_num_rows(),
> > >> >> http://es.php.net/mysql_num_rows
> > >> >>
> > >> >> ejemplo:
> > >> >>
> > >> >> do{
> > >> >> $query = mysql_query("SELECT * FROM db WHERE status='1' LIMIT 1");
> > >> >>    if($row=mysql_fetch_array($query){
> > >> >>       echo $row['nombre'];
> > >> >>       mysql_query("UPDATE tabla SET status='2' WHERE id='6'")
> > >> >>    }
> > >> >> }
> > >> >> while(mysql_num_rows($query));
> > >> >>
> > >> >> Y no seas bestia y ponle un LIMIT 1 si usas un while.
> > >> >>
> > >> >> Espero te sirva.
> > >> >>
> > >> >> Saludos,
> > >> >>
> > >> >> --
> > >> >> Philipp Keweloh
> > >> >>
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> >  Andrés Meseguer Rojas
> > >> >
> > >>
> > >
> > >
> > >
> > > --
> > >  Andrés Meseguer Rojas
> > >
> >
>



-- 
 Andrés Meseguer Rojas