sefirotxx Posted September 5, 2012 Report Share Posted September 5, 2012 Hola a todos, llevo ya algún tiempo programando en PHP y me va bien... pero a cada paso que doy mas son los problemas que salen en el camino. En esto me doy cuenta de que mis aplicaciones web son muy inseguras, debido a que para interactuar con la base de datos escribo las sentencias SQL directas en mi aplicación. He averiguado mucho sobre el tema, primero llegue al tema de los procedimientos almacenados, cosa que no sabia, esta es una herramienta muy potente pero al fin de cuentas encontré una gran limitante, que mis aplicaciones se hacen mas lentas a medida que tengo mas PA. El tema es que solo los debo ocupar cuando una consulta es muy grande, yo los estaba ocupando para todas mis sentencias. Bueno me di cuenta del error y empece a buscar otras soluciones y llegue al tema del DAO. Es un tema que me tiene un poco complicado y por eso pasaba por acá, me preguntaba si alguno de ustedes tendrá algún manual o algunos ejemplos sencillos para clarificar mas el tema, se los agradecería mucho.. También me sirve que me digan que estoy perdido ya que talves no es esa la solución a mi problema. Para no hacer otro tema también me gustaría preguntar lo siguiente: han escuchado sobre "dibujar" con php el codigo html para que un atacante al tratar de ver nuestro código fuente no pueda ver nada?? De verdad apreciaría sus opiniones y orientaciones Link to comment Share on other sites More sharing options...
AshWilliams Posted September 5, 2012 Report Share Posted September 5, 2012 Que base de datos usas?? :tonto: Saludos :krider: Link to comment Share on other sites More sharing options...
sefirotxx Posted September 5, 2012 Author Report Share Posted September 5, 2012 estoy utilizando mysql Link to comment Share on other sites More sharing options...
AshWilliams Posted September 5, 2012 Report Share Posted September 5, 2012 Podrías darle un ojo a este artículo ;)http://www.php.net/manual/es/mysqli.quickstart.prepared-statements.php Saludos :krider: Link to comment Share on other sites More sharing options...
Ra Posted September 5, 2012 Report Share Posted September 5, 2012 Voy a meter la cuchara... Lectura: http://es.wikipedia.org/wiki/Data_Access_Object Yo creo que tu problema no es cómo accedes a los datos, sino que derechamente el motor... MySql es lindo, free y está en el 99.9% de los hosting que uno contrata regularmente... Pero ojo con MySql... es para proyectos no tan grandes (o chicos si quieres)... De los más conocidos, de menos a más (en términos de tamaño/complejidad del proyecto), según Yo, sería: 1. MySql2. PostgreSQL3. M$ SQL Server4. Oracle Con ejemplos: 1. MySql para una aplicación web que tenga un catálogo de productos y carrito de compras... O un wordpress2. PostgreSQL para una aplicación que maneje temas logísticos o ventas (con notas de venta y mayor volumen)3. M$ SQL Server para una aplicación administrativa-contable-financiera (donde el volumen de datos es grande y el tratamiento de los datos es complejo)4. Oracle para una aplicación tipo SAP... o para el SII o el Registro Civil... donde el volumen y complejidad son grotescos Una buena práctica es usar procedimientos almacenados para todo... Lamentablemente los procedimientos y funciones en MySQL no andan muy bien (tampoco en PostgreSQL)... También tienes que considerar que Oracle compró MySQL para tener un producto de bajo performance y acaparar más mercado, porque su producto principal no tiene mucho volumen de venta... Lo mismo ocurre con PHP, .Net, Java, HTML5, Flex, Perl, Python, etc.etc.etc... Todos tienen su orientación, pero te aseguro que una aplicación tipo SAP no la puedes hacer con PHP... no porque no sea potente y asdf... sino que por la cantidad de código y cómo lo organizas para una aplicación de más de 50 páginas (ventanas)... Si explicas qué hace tu aplicación o hacia donde van tus desarrollos, en términos de complejidad y volumen de datos, te podemos ayudar a elegir una buena herramienta... no la mejor, porque "la mejor" es subjetivo... Sono+ Link to comment Share on other sites More sharing options...
AshWilliams Posted September 5, 2012 Report Share Posted September 5, 2012 (edited) Yo igual me desperfilé un poco:En esto me doy cuenta de que mis aplicaciones web son muy inseguras, debido a que para interactuar con la base de datos escribo las sentencias SQL directas en mi aplicación. Con mysqli consigues un mejor manejo y puedes preparar sentencias sql con parámetros mediante bind y asi añadir una capa extra de seguridad :) Saludos :krider: Edited September 5, 2012 by AshWilliams Link to comment Share on other sites More sharing options...
sefirotxx Posted September 6, 2012 Author Report Share Posted September 6, 2012 (edited) Primero que todo gracias por sus respuestas. El tema que a raíz de mi duda he recibido varios concejos y he estado averiguando mucho, primero me gustaría entregar una información que encuentro de mucha utilidad y que encontré en la web con respecto a esto, sobre la vulnerabilidad que quiero asegurar, que es el SQL injection y los métodos que estoy buscando para lograr esto. http://itfreekzone.blogspot.com/2011/04/como-evitar-sql-injection-prepared.html Bueno ahí hablan que la mejor opción es lo que dice acá el amigo AshWilliams, que son las sentencias preparadas, creo que estudiare mucho este tema. Pero me quedo dando vueltas lo que comento SuperModerador por que de verdad viene al caso. Yo trabajo con My SQL por que fue lo que primero aprendí y fui perfeccionandome pero en realidad nunca me había puesto a pensar en lo que necesita mi sistema. Para paginas web sencillas que requieren poca interacción con la base de datos no hay problemas (se usa mySQL) pero en realidad este tema de seguridad lo estoy orientando a un sistema académico que llevo haciendo hace algún tiempo (y aquí también he resuelto algunas dudas). Efectivamente un sistema académico contiene muchos datos, podrías compararlo con las notas de venta que daban de ejemplo y talves sea mas, a medida que la base de datos vaya creciendo, por lo que creo que lo mas probable es que intente traspasar mi base de datos a una de mayor tamaño. Ahora aquí la madre de todas las iluminaciones, por fin veo el costo que tiene no planificar todo esto al principio, ya que utilizar sentencias preparadas en todas mis consultas significara mucho tiempo, ademas de traspasar la susodicha base de datos. Bueno agradecería me entregaran una opinión sobre que decision debo tomar con mi sistema que llevo a la mitad, por que en el futuro ya me queda claro que al hacer algun sistemita debo planificarlo muy bien. A me falto decir que la necesidad nació por que este sistema se manejaba de forma interna en el colegio pero ahora necesito que los profesores manipulen información desde internet a través de algún acceso que daré en la pagina web... bueno y ustedes saben que hay muchos alumnos con capacidad de vulnerar algún sistema o con capacidad de aprender a vulnerarlo. Edited September 6, 2012 by sefirotxx Link to comment Share on other sites More sharing options...
Ra Posted September 6, 2012 Report Share Posted September 6, 2012 (edited) Bueno... si es para un colegio, podríamos dimensionar (con la vara pasá) lo siguiente: - 3 cursos por nivel (kinder a 4º medio): 39 cursos- 40 alumnos por curso- 8 asignaturas- 20 notas al año- 10 profesores Estamos hablando de 249.600 registros al año... sumándole parámetros y asdf, digamos 300.000 registros al año... MySQL para ese volumen de datos es más que suficiente... Migrar a M$ SQL Server debes considerarlo cuando tengas más de 10.000.000 de registros al año. PHP para lo que necesitas también es suficiente. Te recomiendo uses alguna metodología estructurada como MVC o HMVC. Sobre la seguridad, tienes que aplicar restricciones en 3 niveles: - Al lado del cliente (con jquery o javascript)- Al lado del servidor (aplicación) con lo que dice Ash- Al lado del servidor (motor) utilizando procedimientos almacenados Para lectura sobre procedimientos almacenados vs ad-hoc sql (o inline sql o dynamic sql)http://www.techrepub...he-code/5766837http://en.wikipedia....tored_procedurehttp://stackoverflow...tements-on-mode Salu2. Edited September 6, 2012 by Ra Link to comment Share on other sites More sharing options...
xomarx69 Posted September 6, 2012 Report Share Posted September 6, 2012 Hola, trabajé en un proyecto bajo MySql y manejábamos más de 5.000.000 de registros por tabla, en total habían aprox 35000000 de registros, no hemos tenido problemas hasta la fecha en cuanto al performance de la app ya que desde mi punto de vista el modelo de datos quedó bastante normalizado, siempre trato de manejar toda la lógica de datos en la base(SP) ya que las bases de datos están optimizadas para eso(desde que salí de la U trabajo en Oracle) y me facililta la vida con el tema de concurrencia de datos. Creo que tu problema de performance apunta al modelo, tal vez debieras revisar las sentencias que estás ejecutando y tratar de optimizarlas o generar índices correctos(indexar las tablas correctamente hace una gran diferencia) También podrías revisar las configuraciones de los storage que usan las tablas grandes ya que esto merma el performance sobre todo con tablas transaccionales, crea las FK ya que mucha gente cree que no son necesarias( he visto sistemas financieros en grandes compañías corriendo bajo SQLServer sólo con índices y PK(Me dí cuenta que muchos programadores Genexus no generan las FK físicamente),El manejo lógico a nivel de base de datos permite un mejor control de acceso a los datos (insert, update, delete), claro que esta es una opinión personal ;).El modelo MVC te ayuda a organizar el proyecto y lo deja "bonito", lamentablemente el mapeo ORM en la mayoría de las app consume muchos recursos que desde mi punto de vista se pueden usar para otras cosas, no voy a discutor sobre esto ya que soy de la vieja escuela(siempre he trabajado con Oracle Forms y Report jejejej). Saludos Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now