7. Desarrollando Proyecto
• Descargar última versión phpMyAdmin
• fedora, CentOS, RedHat:
# Descargar del sitio web la última versión ;-)
• Ubuntu
# sudo aptitude install phpmyadmin
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
8. Desarrollando Proyecto
• Para el caso de Ubuntu, después de instalar, se
debe realizar un enlace simbólico.
# sudo ln –s /usr/share/phpmyadmin /var/www/
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
9. Desarrollando Proyecto
Si no tienes instalado Subversion, es hora de
hacerlo.
• fedora, CentOS, RedHat:
# yum install subversion
• Ubuntu
# sudo aptitude install subversion
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
10. Desarrollando Proyecto
• Recomendamos crear un directorio que pueda
contener más de una versión de Symfony. Este
no debe ser accesible desde Internet.
# mkdir –p /versiones-symfony/symfonyx_x_x/
# cd /versiones-symfony/symfonyx_x_x
# svn co http://svn.symfony-project.com/tags/RELEASE_x_x_x/ .
• Una alternativa de descarga para el curso es la
siguiente dirección:
• http://www.poodu.cl/symfony1_2_9.zip
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
11. Desarrollando Proyecto
• Ingresar al directorio bin de la instalación
Symfony:
# cd /versiones-symfony/symfonyx_x_x/data/bin
• Ejecutar script check_configuration. El nos
detallará si nuestro sistema cumple con los
requerimientos para la instalación de Symfony.
# php check_configuration.php
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
12. Desarrollando Proyecto
• El comando symfony -V, para el caso de la
instalación por Subversión, lo podremos ejecutar
de la siguiente manera:
# php /versiones-symfony/symfonyx_x_x/data/bin/symfony –V
o
# /versiones-symfony/symfonyx_x_x/data/bin/./symfony –V
resultado:
# symfony version x.x.x (/versiones-symfony/symfonyx_x_x/lib)
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
13. Desarrollando Proyecto
Obtener Comandos de Symfony:
# php /versiones-symfony/symfonyx_x_x/data/bin/symfony
O:
# /versiones-symfony/symfonyx_x_x/data/bin/./symfony
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
14. Desarrollando Proyecto
Comandos de Symfony:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
16. Desarrollando Proyecto
Gestionador de Encuestas Open Source:
• Considere dos aplicaciones en el proyecto, una aplicación
administrador y otra pública.
• La aplicación pública mostrará cada encuesta de acuerdo a
una URL amigable (distinta).
• El administrador permitirá que un usuario con privilegios
gestione distintos tipos de encuestas.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
17. Desarrollando Proyecto
• La aplicación permitirá crear una gran cantidad de tipo de
encuestas.
• Permitir importar al Sistema una base de Usuario a través de
un archivo csv o excel.
• Permitir la exportación de resultados.
• Permitir el trabajo con otras base de usuarios en el proceso de
login al sistema.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
18. Desarrollando Proyecto
• Obtención de gráficos y estadísticas de acuerdo a
respuestas obtenidas por encuesta.
• Soporte para varios idiomas.
• Canales RSS y API que permite la interacción con otros
servicios.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
19. Desarrollando Proyecto
• La alternativa Open Source más conocida:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
22. Creamos el Proyecto
Crear el proyecto Encuesta:
# mkdir /tu/directorio/web/encuesta
# cd /tu/directorio/web/encuesta
Dependiendo del sistema operativo y de la instalación
realizada, puede ser necesario utilizar el prefijo php antes
de cada comando Symfony.
# php /versiones-symfony/symfonyx_x_x/data/bin/symfony generate:project encuesta
O:
# /versiones-symfony/symfonyx_x_x/data/bin/./symfony generate:project encuesta
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
23. Creamos el proyecto
• Estructura de Directorio Creada con el comando
generate:project:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
24. Creamos el proyecto
• La gran cantidad de directorios creados con el
comando generate:project permiten estándarizar los
desarrollos, proponiendo una distribución de la lógica
de la programación que permita una eficiente
mantención. Además, otro programador de Symfony
puede entender rápidamente el proyecto a través de
esta estructura y así formar un buen equipo de trabajo.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
25. Creamos el proyecto
• La tarea generate:project crea un atajo de
Symfony dentro del directorio raíz del proyecto
encuesta. Por lo mismo, de ahora en adelante,
cada vez que utilicemos el comando ./symfony, lo
estaremos ejecutando en la raíz del proyecto y NO
desde la ruta o path del directorio donde
descargamos symfony para su instalación.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
27. Creamos las Aplicaciones
Creamos la aplicación pública con el comando
generate:app :
# ./symfony generate:app - -escaping-strategy=on - -
csrf-secret=UniqueSecret publico
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
28. Creamos las Aplicaciones
Creamos la aplicación administrador con el
comando generate:app :
# ./symfony generate:app - -escaping-strategy=on - -
csrf-secret=UniqueSecret administrador
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
29. Creamos las Aplicaciones
Seguridad contemplada en Symfony.
• Protección contra ataques XSS (Cross-site scripting)
- -escaping-strategy
• Evitar vulnerabilidades que permitan ejecutar código como VBScript o
JavaScript en el contexto de otro sitio web.
• Evitar la modificación de variables entre dos páginas (ejemplo cookies o
envío por URL)
• Evitar la inclusión de etiquetas aceptadas en HTML que ejecuten código
malicioso.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
30. Creamos las Aplicaciones
Seguridad contemplada en Symfony.
• Protección contra ataques CSRF
- -csrf-secret
• Evitar la falsificación de petición en sitios cruzados.
• Evitar Comandos no autorizados transmitidos por un usuario en el cual el
sitio web confía.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
31. Creamos las Aplicaciones
Resumen seguridad contemplada en Symfony.
• --escaping-strategy: Permite escapar la salida para
evitar ataques XSS.
• --csrf-secret: Permite tokens de sesión en los
formularios para prevenir los ataques CSRF.
Pasando estas dos opciones a la tarea, hemos asegurado
nuestro futuro desarrollo de las dos vulnerabilidades más
extendidas en la web.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
32. Creamos las Aplicaciones
a estructura de Directorios de cada aplicación
L
generada con el comando generate:app es
similar a:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
34. Entornos
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
35. Entornos
Entornos: Si revisamos el directorio web/ de nuestro
proyecto encontrarás una estructura similar a esta:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
36. Entornos
Entornos: Los archivos index.php,
publico_dev.php son llamados controladores
frontales de la aplicación publico.
• La primera aplicación creada en un proyecto tiene el
privilegio de utilizar el archivo index.php como uno de
sus controladores.
• Es por eso que los nombres de los controladores
frontales de la aplicación administrador (que fue
creada en segundo lugar) son: administrador.php y
administrador_dev.php
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
37. Entornos
Entornos
• Entorno de desarrollo (dev)
• Entorno de pruebas
• Entorno intermedio
• Entorno de producción (prod)
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
38. Entornos
Entorno de desarrollo (dev)
• Este es el ambiente utilizado por desarrolladores
web para añadir nuevas funciones, corregir errores y
realizar seguimientos a cada uno de los componentes
que forman parte de la aplicación.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
39. Entorno
Diferencias de entornos
• Cada entorno no es más que un conjunto
específico de configuraciones, ejemplo, el entorno de
desarrollo (dev) considera un log para guardar
información y la característica de caché está
deshabilitada para que los cambios realizados por el
desarrollador se tengan en cuenta de forma
instantánea.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
40. Entorno
Diferencias de entornos
• Por el contrario, en el entorno de producción se
considera habilitado el caché, pero la barra depuración
deshabilitada, ya que éste entorno es el que visualizará
el usuario público de nuestra aplicación.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
41. Entorno
• Definir un nuevo entorno en Symfony es tan sencillo
como crear un nuevo controlador frontal. Más adelante
en nuestro proyecto profundizaremos al respecto.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
42. Entorno
• Definir un nuevo entorno en Symfony es tan sencillo
como crear un nuevo controlador frontal. Más adelante
en nuestro proyecto profundizaremos al respecto.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
43. Controlador
Archivo web/index.php
<?php
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
44. Controlador
Opciones del método getApplicationConfiguration.
• La primera opción indica la aplicación
(publico).
• La segunda opción indica el entorno (dev).
• La tercera opción el modo debug, si éste está
o no habilitado (false).
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
45. Servidor Web
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
46. Configuración del Servidor Web
<VirtualHost *:80>
ServerName encuesta.localhost
DocumentRoot /tu/directorio/web/encuesta/web
DirectoryIndex index.php
Alias /sf /versiones-symfony/symfonyx_x_x/data/web/sf
Errorlog /var/log/httpd/encuestaError.log
CustomLog /var/log/httpd/accessEncuesta.log common
<Directory /versiones-symfony/symfonyx_x_x/data/web/sf>
AllowOverride All
Allow from All
</Directory>
<Directory /tu/directorio/web/encuesta/web>
Allowoverride All
Allow from All
</Directory>
</VirtualHost>
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
47. Configuración del Servidor Web
En caso de que aún no esté definido, agregar la directiva
ServerName al archivo de configuración de Apache2:
• fedora, CentOS, RedHat
# sudo vim /etc/httpd/conf/httpd.conf
• Ubuntu
# sudo vim /etc/apache2/./apache2.conf
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
48. Configuración del Servidor Web
Directiva ServerName en archivo configuración
Apache:
ServerName servidorweb
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
49. Configuración del Servidor Web
Configuración archivo hosts:
/etc/hosts
c:windowssystem32driversetchosts
127.0.0.1 servidorweb encuesta.localhost
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
50. Configuración del Servidor Web
Reiniciamos Apache:
• fedora, CentOS, RedHat
# sudo /etc/init.d/./httpd restart
• Ubuntu
# sudo /etc/init.d/apache2 restart
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
51. Configuración del Servidor Web
Accedemos a la aplicación pública (prod) desde un
navegador:
http://encuesta.localhost
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
53. Configuración del Servidor Web
• El anterior en esencia NO es un error, sino que
Apache no puede encontrar las imágenes, hojas
de estilos y archivos Javascript utilizados para la
barra de depuración. Por lo tanto, se debe
comprobar que existe la siguiente línea en la
configuración del VirtualHost:
Alias /sf /versiones-symfony/symfonyx_x_x/data/web/sf
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
54. Proyecto, Aplicaciones y Módulos
• Una alternativa para generar el alias podría ser crear
un enlace simbólico o copiar directamente los
contenidos del directorio:
/versiones-symfony/symfonyx_x_x/data/web/sf/
al directorio:
/directorio/web/blog/web/sf/
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
55. Configuración del Servidor Web
Si todo está correcto, deberíamos ver lo siguiente:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
56. Configuración del Servidor Web
Accedemos a la aplicación pública (dev) desde un
navegador:
http://encuesta.localhost/publico_dev.php
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
57. Configuración del Servidor Web
Si todo está correcto, deberíamos ver lo siguiente:
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
58. Configuración del Servidor Web
• La principal diferencia es que el controlador
frontal del entorno de desarrollo nos muestra una
barra de depuración en la parte superior derecha.
• La barra de depuración web se mostrará en todas
las páginas del entorno de desarrollo. En ella
podemos encontrar (configuración de la
aplicación, los mensajes de log de la petición
actual, las sentencias SQL ejecutadas en la base
de datos, información sobre la memoria
consumida y el tiempo total de ejecución).
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
60. Levantamiento Servidor Subversion
Para qué necesitamos Subversion.
• Trabajar con más confianza.
• Volver a una versión anterior en caso de que un
cambio rompa la aplicación.
• Permitir a dos o más personas trabajar
simultáneamente sobre un mismo proyecto.
• Disponer de acceso directo a todas las versiones de
la aplicación.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
61. Levantamiento Servidor Subversion
• Al comienzo de esta presentación instalamos
subversion para ejecutar el comando svn co que nos
permitió descargar la última versión estable de Symfony.
• Por lo tanto comenzaremos a utilizar Subversion.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
63. Levantamiento Servidor Subversion
Crear la estructura básica en el repositorio.
• fedora, CentOS, RedHat y Ubuntu
# sudo svn mkdir –m “creación de estructura inicial” file:///
repositorios/encuesta/trunk file:///repositorios/encuesta/tags
file:///repositorios/encuesta/branches
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
64. Levantamiento Servidor Subversion
Realizamos un checkout de nuestro directorio trunk.
# cd /tu/directorio/web/encuesta
# sudo svn co file:///repositorios/encuesta/trunk/ .
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
65. Levantamiento Servidor Subversion
Borramos los contenidos de los directorios cache/ y
log/ dentro de nuestro proyecto, ya que no son de interés
para nuestro repositorio Subversión.
# sudo rm -rf cache/* log/*
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
66. Levantamiento Servidor Subversion
Le damos permiso adecuados a los directorios
cache/ y log/ dentro de nuestro proyecto, para que el
servidor web pueda escribir en ellos.
# sudo chmod 777 cache log
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
67. Levantamiento Servidor Subversion
Dado que es la primera vez que subimos los archivos
al servidor Subversion (repositorio encuesta) vamos
importar, para ello antes debemos indicarle a nuestro
cliente subversión (quién controla todo dentro de
nuestro proyecto) todos los archivos que vamos a
considerar.
# svn add *
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
69. Levantamiento Servidor Subversion
Como no vamos a importar los archivos de los
directorios cache/ y log/, debemos añadirlos a la lista
de archivos ignorados.
# svn propedit svn:ignore cache
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
70. Levantamiento Servidor Subversion
• En estos momentos tenemos abierto el editor de
archivo configurado por defecto en nuestro equipo.
Como queremos ignorar todos los contenidos de este
directorio, realizamos lo sgte:
*
• Guardamos y Cerramos el archivo
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
71. Levantamiento Servidor Subversion
Repetimos el proceso para el directorio log/.
# svn propedit svn:ignore log
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
72. Levantamiento Servidor Subversion
• Y agregamos el * , para posteriormente guardar y
cerrar el archivo.
*
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
73. Levantamiento Servidor Subversion
• Para finalizar realizamos la importación al servidor
Subversion.
# svn import -m “Primera importación” . file:///
repositorios/encuesta/trunk
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
75. Preguntas?
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
Notas del editor
¿Por qué Symfony genera tantos archivos? Una de las principales ventajas de utilizar un framework completo es que puedes estandarizar tus desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier programador con ciertos conocimientos de Symfony es capaz de continuar el desarrollo de cualquier proyecto Symfony. En cuestión de minutos será capaz de profundizar en el código, solucionar errores y añadir nuevas características.
Un ataque CSRF fuerza al navegador web validado de una víctima a enviar una petición a una aplicación web vulnerable, la cual entonces realiza la acción elegida a través de la víctima. Al contrario que en los ataques XSS, los cuales explotan la confianza que un usuario tiene en un sitio en particular, el cross site request forgery explota la confianza que un sitio tiene en un usuario en particular. – escaping-strategy: Permite escapar la salida para evitar ataques XSS – csrf-secret: Permite tokens de sesión en los formularios para prevenir los ataques CSRF
Un ataque CSRF fuerza al navegador web validado de una víctima a enviar una petición a una aplicación web vulnerable, la cual entonces realiza la acción elegida a través de la víctima. Al contrario que en los ataques XSS, los cuales explotan la confianza que un usuario tiene en un sitio en particular, el cross site request forgery explota la confianza que un sitio tiene en un usuario en particular. – escaping-strategy: Permite escapar la salida para evitar ataques XSS – csrf-secret: Permite tokens de sesión en los formularios para prevenir los ataques CSRF
La opción fsfs proporciona otro enfoque en el manejo de ficheros en el repositorio, aunque proporciona todas las características de Berkeley DB pero sin ser en el sentido estricto una base de datos. FSFS, Además mejora las transacciones incluyendo en un único fichero de transacción todas las modificaciones de un usuario, reduce el tamaño del repositorio en torno a un 20% es independiente de la plataforma.
La opción fsfs proporciona otro enfoque en el manejo de ficheros en el repositorio, aunque proporciona todas las características de Berkeley DB pero sin ser en el sentido estricto una base de datos. FSFS, Además mejora las transacciones incluyendo en un único fichero de transacción todas las modificaciones de un usuario, reduce el tamaño del repositorio en torno a un 20% es independiente de la plataforma.