(Dear lazy web) Alternativas para crear codigo PHP para web de manera segura


Todos los que hacen algún tipo de desarrollo para web saben que los problemas que conlleva están en varios niveles: (in)compatibilidad de los navegadores a nivel de HTML, JavaScript y CSS, problemas de seguridad como XSS (cross site scripting) e inyecciones SQL.

Para todo hay trucos, y por ejemplo la incompatibilidad de los navegadores en cualquiera de los niveles se puede corregir tal vez a un 90% en la mayoría de los navegadores (los 4 mas populares :), sin embargo, los problemas de seguridad pueden ser incluso mas importantes, o mas preocupantes.

En los últimos días he estado pensando en como podría lograrse un método o conjunto de herramientas (funciones y clases) que permitan escribir código PHP para web sin que sea posible un ataque SQLi o XSS, y sin tener que hacer a mano las validaciones.

Una alternativa es NO USAR PHP, con python/django es posible hacer todo eso y más, pero estoy intentando reescribir una aplicación ya hecha en PHP, que va a seguir siendo mantenida por programadores de PHP (en teoría) y que además tiene un esquema de base de datos ya definido (no es un problema para usar django realmente).

He estado dándole vueltas al asunto durante los últimos días, como es usual perdiendo el tiempo en vez de actuar :), pero si sería chido conocer una alternativa robusta para hacer las cosas de la “manera correcta™”.

Por lo pronto creo que voy a darle un poco por el lado de django, pero si alguien llega a leer esta nota, y además sabe de una alternativa interesante para PHP (2 requisitos complicados de cumplir) por favor comunícamelo con señales de humo, email, respuesta aquí, o como se pueda.


8 Comments, Comment or Ping

  1. David Valdez

    Chale que raro leer de ti algo como:

    “Una alternativa es NO USAR PHP, con python/django es posible hacer todo eso y más, pero estoy intentando reescribir una aplicación ya hecha en PHP”

    Estas cometiendo un error garrafal, php es un lenguaje, django es un framework.

    En dado caso deberías de comparar cakephp (que esta verdaderamente genial) con django de lo contrario estas metiendo la pata bien gacho.

    y además la inyección de sql no es propia de PHP si programas en python (sin frameworks) estas expuesto a xss y a inyecciones de sql también.

    Un saludo

    http://gnuget.underlife.org

    August 8th, 2007

  2. k001

    Chale hiciste una comparación pésima php es un lenguaje y django es un framework. Si quieres comparar compara cakephp con django.
    Y los errores siempre serán del programador si programas en python puro igual tienes inyecciones del cualquiera que sea de ellas.
    Los errores de seguridad de php es por el programador no por el lenguaje, ahora si hablas de inseguridad en el core de php ahi tal vez te entendería.

    un saludo.

    http://k001operator.info

    August 8th, 2007

  3. MaoP

    La neta ahora si la cajeteaste…

    PHP es a django como python es a codeigniter o cakephp o symphony o zend, o phpontracks, etc, etc…

    como dice gnuget y k001, todos los problemas de XSS, SQL Inj, etc, son el 99.99% de las veces culpa del programador, lo mismo te sucedería en python, perl, ruby, etc…

    Ahora que si hablamos de que php te da mas facilidad de cometer esos errores, de acuerdo, pero aun así la cajeteaste! :p

    Saludos…

    http://marcoalfonso.net

    August 8th, 2007

  4. Anonymous

    La alternativa correcta sería conocer los errores de programación y evitarlos, no usar un framework, si confías demasiado en un framework estás en una equivocación bastante grave. Creo que podrías confiar en un framework cuando le puedas mover a las entrañas y sepas perfectamente el funcionamiento interno, y es que si usas un framework sin saber que es lo que realmente hace estás conociendo una parte muy reducida (y aburrida) de todo el proceso, y siguiendo las instrucciones de los diseñadores del framework al pie de la letra tal vez no cometas inyecciones SQL, y en un caso raro no tengas XSS, pero te aseguro que si no conoces el proceso que lleva el cargar el framework vas a tener errores de diseño y lógica de aplicación muy graves.
    La seguridad de aplicaciones es un proceso continuo que lleva bastante planeación, no un agregado mágico o una “característica” de un framework.

    Saludos

    – xiam
    http://xiam.be

    August 8th, 2007

  5. garaged

    gnuget:

    Lo que me preocupa es tener que estar cuidando a mano el problema de XSS y SQLi, parece ser que por lo menos las inyecciones me las quito facil con cakephp, pero no estoy completamente seguro si me quito XSS.

    Mi comentario de no usar PHP va por ese lado, es una lata con PHP estar cuidando a mano la seguridad, no solo en PHP, lo sé, pero django me permite hacer eso y mucho más sin tener que hacer mis propias herramientas. Para eso es un framework verdad ?

    Nunca quise decir que python está excento, ningun lenguaje lo está, pero con django es trivial evitarlos, prácticamente no necesitas pensar en ellos.

    August 8th, 2007

  6. garaged

    pues gracias por las cajeteadas 🙂

    precisamente quiero saber si algun framework de php es tan robusto como django, hasta el momento no he encontrado uno tan completo.

    August 8th, 2007

  7. garaged

    solo para redonder, por el comentario de xiam, ya sabes que tenemos la filosofía opuesta, si puedo ahorrar tiempo usando un framework que hace lo que necesito, mejor, ya se que los habitos de programación definen la calidad, y se como evitar los joyos mencionados, lo que me molesta es que no tengo la cabeza para hacerlo de una manera robusta y cómoda de usarse, por eso para mí es más fácil usar algo ya hecho.

    Para cualquier proyecto grande, terminas haciendo un “mini framework” o si no tienes un espagetti de codigo, porque no usar uno robusto?

    August 8th, 2007

  8. phenobarbital

    Puedes empezar por conocer los distintos modelos de diseño (orm, activerecord, mvc, front controller) y despues de eso los distintos modos de framework (event-driven, zero-coding, code-generators, component-based) y escoges uno que se adapte a tu forma de programar y necesidades.
    o te recomendaría php on trax y ez components, pero depende realmente de tu gusto de programación.

    August 8th, 2007

Reply to “(Dear lazy web) Alternativas para crear codigo PHP para web de manera segura”