domingo, 10 de octubre de 2010

IGLC

Importante reunión que se llevara a cabo este año en Perú, de Leading Construction .

jueves, 7 de octubre de 2010

Desarrollo web para móviles

Me pidierón hacer la versión para móviles para UVK Multicines, entonces me dije manos a la obra:
Me puse a pensar que es lo primero que tengo que hacer?.
_ Ver otras web desarrolladas para móviles.
_ Necesito testeadores de moviles.
_ Informarme de este mundo, cada vez más creciente.

_ La idea era hacer de la web, algo agradable a la vista, rápida, que funcione en cualquier móvil, de facil navegación y que no pierda la identidad de sitio web de UVK.

Despues de ver web por aqui y por alla, tenia ya en mente lo que queria.

Ahora los testers.

Use Mobione para Iphone, además de mi Iphone 2.0 =)
Opera Mobile Tester: lo que me daba acceso a las ultimas versiones de android, windows mobile, blackberry y Symbian.
Intente usar el simulador de windows mobile, pero mucho ruido y pocas nueces como todo lo .net
Luego con compañeros de trabajo teníamos un Blackberry, un Symbian y un Windows Mobile como dispositivos reales de prueba, además de un Samsung que me permitia usar el navegador NetFront.

Ahora informarme:

Lo primero que vi es que no todos los navegadores de móviles vienen con javascript desactivado(por seguridad), entonces era hacer una versión sin javascript y que ese navegador al menos soporte HTML.
_ Despues el mundo por unos momentos se hizo oscuro:

Perdido en el espacio de los navegadores para moviles.
Existen en gran cantidad, si desarrollas web desde hace un tiempo, seguro en algún momento migraste desde las tablas a los divs(pues ahora tienes que hacerlo a HTML5), sabrás que al momento de posicionar divs, no es lo mismo en los navegadores de escritorio y es que en PC existen como SO:
Windows
Linux
Mac
Unix
IBM
Pues en moviles la cuenta es:
Blackberry
IOS
Android
Symbian
Windows Mobile
WebOs
Maeemo
Maego
etc.
Cada uno con sus propio navegador web.
Lo que me llevo a usar tablas, a sabiendas de que Windows Mobile en algunas versiones usa el motor de Internet Explorer 4(omg)y yo que me habia armado con el IEtester que tiene un simulador de explorer 5.5 hacia delante, despues de perder horas cuadrando divs, a pesar de mi experiencia en css.
En algunos no respetaba el padding, el margin, no flotaba, no caso al css le hacían.

Además optimize el sitio:Reporte de sitio optimizado
_ El resultado se puede ver en: UVK - MOVIL, si entras directamente desde tu movil y deseas ver la versión de escritorio, no pódras por que desde el servidor te estoy redireccionando.

Al haber usado MVC, para este sitio web, ya solo me ocupe de la capa vista, y escribi cero de lógica.

miércoles, 22 de septiembre de 2010

sábado, 4 de septiembre de 2010

MVC en PHP 5 POO Segunda Parte.

_ Siguiendo con la segunda parte de este Construccion de un sistema MVC en PHP Parte 1 , veremos el archivo .htaccess, la seguridad en el, el mod_rewrite, el uso de PDO en la capa modelo, además veremos el uso de SQL standar, optimización de consultas, uso de consultas preparadas, lanzamiento y catcheo de errores, y la optimización de la web para vernos bien en PageSpeed.

Empezemos entonces con el archivo .htaccess:

Este archivo es muy importante en nuestro sistema, nos servirá para el uso de url amigables a los navegadores, incrementar la seguridad de nuestro site, optimización, nos servira tambien para ocultar directorios sensitivos de nuestra aplicación, diseñar a nuestro gusto una pagina de error, en caso algún geek intente algo indebido en nuestro site.

.htaccess

ErrorDocument 404 404.php


Options -Multiviews
RewriteEngine On
RewriteBase /
RewriteRule ^configs/(.*)$ - [L]
RewriteRule ^includes/(.*)$ - [L]
RewriteRule ^data/(.*)$ - [L]
RewriteRule ^models/(.*)$ - [L]
RewriteRule ^views/(.*)$ - [L]
RewriteRule ^controllers/(.*)$ - [L]
ewriteRule ^([0-9a-z_-]+)/?$ index.php?controller=$1 [L,QSA]
RewriteRule ^([0-9a-z_-]+)/([^/]+)/?$ index.php?controller=$1&action=$2 [L,QSA]

AddCharset UTF-8 .php


_ La primera linea especifica que el archivo que se mostrara en caso de un error 404, sera el archivo 404.php
Antes de seguir explicando aquí debes de tener un servidor que soporte el mod_rewrite, para activar esto en nuestro servidor local con appserver corriendo debeis abrir el archivo httpd.conf de apache en un block de notas y modificar 2 lineas donde dice Override None cambiar la palabra none por all, y luego abre el archivo php.ini que el appserver lo coloca en c/windows/php.ini y descomentar la linea que dice mod_rewrite.so, es decir quitadle el ; que esta delante, una vez hecho esto, reinicia apache y deberiaís de tener mod_rewrite corriendo en tu servidor local.

Una vez activado el mod_rewrite, seguimos;
La opción Multiviews es para permitir que si un directorio solicitado no existe, se busque en su anterior ruta el archivo con el nombre del directorio indicado. Por ejemplo, si vamoa a miweb.com/admin/inicio, con esta opción se buscaría el archivo inicio (con la extensión según el orden de la configuración de apache, por ejemplo primero php, luego html...) en el directorio admin.

Después tenemos la activación del motor de rescritura, y la definición de ruta base para la rescritura como "/", o sea el directorio raíz de la web. Y le siguen las reglas de rescritura: las dos primeras son para evitar que se intente rescribir las peticiones a los directorios configs, includes,data, models, views, controllers que deben ignorarse pues ahí están los archivos de nuestra aplicación, si desean una capa de seguridad más, podeís ponerlos encima de public_html y por último tenemos una regla para cuando se reciba un parámetro y otro para cuando se reciban dos. Según la primera regla, si vamos a www.miweb.com/news se traduciría a index.php?controller=news, y según la segunda al ir a www.miweb.com/news/noticia se ejecutaría el script index.php?controller=news&action=noticia. El típico sistema de rescritura de URL. Recordad que tenéis que tener activado el ModRewrite en el apache, y que si usáis otro servidor web tendréis que usar el método que éste os proporcione.
Y por último añadimos AddCharset UTF-8 .php, para indicarle al servidor que nuestra aplicación esta codificada sobre UTF-8, que va a ser standar en PHP 6.

_Ahora continuaremos con el uso de PDO (PHP Data Objects), en nuestra aplicación MVC que veremos en la tercera parte de este tutorial.

lunes, 9 de agosto de 2010

miércoles, 28 de julio de 2010

Protegerse y evitar ataques DoS, SQL injection, XSS, Robots malignos, etc

Todos hemos tenido la preocupación de que nuestra web no sea segura y necesitamos una manera de comprobarlo. Con este artículo veremos una forma eficaz de evitar ataques DoS, inyecciones de SQL, XSS, Robots malignos, evitar que se listen los directorios de la web, etc.

Todo lo que tenemos que hacer es editar nuestro archivo .htaccess e incluir estas lineas:
1. ## Seguridad extra para PHP
2. php_flag safe_mode on
3. php_flag expose_php off
4. php_flag display_errors off
5.
6. ## Manejo de errores de Apache. Cuando se produzca uno de estos errores, redirigimos a una pagina especial desarrollada por nosotros.
7. ErrorDocument 401 /error401.html
8. ErrorDocument 403 /error403.html
9. ErrorDocument 404 /error404.html
10.
11.
12. RewriteEngine On
13.
14. Options +FollowSymLinks
15. # Evitar escaneos y cualquier intento de manipulación malintencionada
16. # de la URL. Con esta regla es imposible lanzar ataques de inyección (SQL, XSS, etc)
17. RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
18. RewriteCond %{HTTP_USER_AGENT} ^(-|\.|') [OR]
19. RewriteCond %{HTTP_USER_AGENT} ^(.*)(<|>|%3C|%3E)(.*) [NC,OR]
20. RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget)(.*) [NC,OR]
21. RewriteCond %{HTTP_USER_AGENT} ^(.*)(libwww-perl|libwwwperl|snoopy|curl|wget|winhttp|python|nikto|scan|clshttp|archiver|loader|email|harvest|fetch|extract|grab|miner|suck|reaper|leach)(.*) [NC,OR]
22.
23. RewriteCond %{REQUEST_URI} ^(/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]
24. RewriteCond %{HTTP_REFERER} ^(.*)(|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60)(.*) [NC,OR]
25. RewriteCond %{QUERY_STRING} ^(.*)(|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|%3C|%3E|%27|%26%23|%60)(.*) [NC,OR]
26. RewriteCond %{QUERY_STRING} ^(.*)('|-|<|>|,|/|\\|\.a|\.c|\.t|\.d|\.p|\.i|\.e|\.j)(.*) [NC,OR]
27. RewriteCond %{HTTP_COOKIE} ^(.*)(<|>|'|%3C|%3E|%27)(.*) [NC]
28.
29. RewriteRule ^(.*)$ error.php [NC]
30. ## No permitir acceso al .htaccess
31. order allow,deny
32. deny from all
33.
34. ## Evitar que se liste el contenido de los directorios
35. Options All -Indexes
36.
37. ## Lo mismo que lo anterior
38. IndexIgnore *
39.
40. ## Denegar el acceso a robots dañinos, browsers offline, etc
41. RewriteBase /
42. RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
43. RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
44. RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
45. RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
46. RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
47. RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
48. RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
49. RewriteCond %{HTTP_USER_AGENT} ^Zeus
50. ##redireccionar a los robots a otra web
51. RewriteRule ^.*$ http://www.otraweb.com [R,L]
52.
53. # Protegerse contra los ataques DOS limitando el tamaño de subida de archivos
54. LimitRequestBody 10240000

Ante todo tambien debemos de tomar medidas de seguridad en nuestra web, limitando el acceso a nuestros archivos ftp, solo a un administrador, y protegiendonos de la mas temida vulnerabilidad de la que casi nada se puede hacer y que pocos conocen, llamada LFI (Local File Inclusion).

lunes, 12 de julio de 2010

Construcción de un Sistema MVC en PHP - Parte 1

Para esta primera parte de este Tutorial, debemos de entender primero a cabalidad lo que es MVC.

Usaremos para este tutorial lo siguiente:
_ PHP 5.2.x
_ MySql 5.x
_ Apache 2.x

Aquí recomiendo instalar appserver 2.5.10 como servidor local.

En este punto haremos la estructura de directorios de nuestro MVC.
Ahora empezamos con el modelo:
Para esta capa usaremos PDO y el patrón Singleton, para conectarnos a la base de datos, además de una clase llamada Safepdo que va a heredar de la clase PDO, que lo que hace es añadir una capa de seguridad a nuestra aplicación.
Este archivo debe de llamarse Safepdo.php y estar ubicado dentro de la carpeta includes de nuestra aplicación.
Safepdo.php :
_ Luego crearemos un archivo que hará de motor de nuestra base de datos, que llamaremos Database.php, que usa  PDO y el patrón Singleton.
Database.php :
_ Y crearemos nuestro primer modelo.

IndexModel.php :
require_once("Database.php");
class IndexModel
{
    public function obtenerValoresDeTabla1()
    {
     $dbh = Database::getInstance();
     $sql = "SELECT campo FROM mitabla1";
     $sth = $dbh->prepare($sql);
     $sth->execute(array($valor));
     $campos = $sth->fetchAll();
     return $campos;
    }
}

_ Para esta primera parte, solo hemos visto como conectarnos a la base de datos usando PDO a travez de un modelo.
En la segunda parte veremos como usar un archivo de configuración, usar .htaccess, usar mod_rewrite.

Saludos.