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.

miércoles, 7 de julio de 2010

Por que el programador no es la estrella?

Este titular ha circulado mucho en los últimos días, a raíz de un comentario de un programador de Microsoft España en Publico.esen diferentes blogs a nivel mundial como TinselCity, Barrapuntoo Noticias 3d.

_ Si bien este comentario se dio en España, aquí en Perú, la situación es peor, los programadores ganan menos que un contador, o un egresado en ciencias de la comunicación.

¿ A que se debe esto ?

_ Para mí uno de los principales problemas, son las empresas, que aquí hay de todos los tipos, hay las que no contratan al mejor, si no al que cobra menos.

El nivel de Educación es otro problema, aquí en Perú en la mayoría de universidades se enseña desarrollo, ¿ de que se trata esto?, pues de que como programador haces sistemas a pedido del cliente, pero no te enseñan a desarrollar un producto tuyo, tal como hicieron Apple, Google.

Lo que se necesita aquí es hacer empresa, tener visión de futuro, ser apasionado.

Lo que me hace recordar a una empresa a donde fui llamado hace algún tiempo para una entrevista de trabajo, en las que había un "programador", que lo primero que me pregunto fue si sabia de estándares W3C, y que no me contrataría si no los sabia, estos estándares son de hecho importantes en el desarrollo web, que es a lo que me dedico, pero no es lo "importante", lo importante en cuanto a estándares en programación son, Programación Orientada a Objetos, al Diseño, a la implementación, usar patrones de diseño como MVC, SINGLETON, FACTORY, FRONTCONTROLLER, DAO despues de haberse jactado de sus webs que estaban hechas muy bonitas en mootools, que por cierto sabia algo, me confeso con verguenza ajena que todo su codigo era estructurado y que no sabía usar POO, esta es la realidad.

_ O este caso preocupante:


Empresa A, quiere software B comercial. Es muy caro. Hay otras opciones, pero no cumplen requisitos y también son carillas. Menos, pero cuestan mucho. Inaceptable.

Empresa A contacta con carnicera C. "Quiero el Software B y más cosas. Házme algo parecido, y que me valga mucho menos."

Carnicera C. Hago números y hablamos. Hace números ¿cuanta carne me haría falta para hacer algo así en plazo X? Ni idea. Pues cuarto y mitad de departamento ERP y cuatro comerciales. Total, X millones ? La hará? A ver vamos a ver.

Carnicera C le da la oferta a Empresa A. Inaceptable, más caro que comprar el Software original? vete a la m. Que sea la mitad, si eso ya reducirán algo los objetivos. A cambio, lo quieren en X meses menos e implantado.

Al final, que si, que vale, que se hace.

Resultado, el de siempre. Carnicera C hace un churro. Funciona los dias pares y si no llueve. Adaptarlo para que funciona cuando llueva, se cobraría aparte.

Tiene gracia, total, la Empresa A es eso, una empresa. Ellos sabrán. Si la empresa A es una institución publica, municipalidad, empresa del estado, asociación de vecinos, ONG, correos,... y hay comisiones de por medio, la cosa tiene menos gracia.

jueves, 1 de julio de 2010

El disco de oro más valioso no está en la Tierra.

_ Si como lo leen, el disco del que les hablo está en la sonda Voyager 2, que esta a 13.800 millones de kilometros de la Tierra, hace poco lei la noticia de que "La NASA no logra entender la información enviada por la Voyager 2".

Y decidí indagar algo más acerca de ella, y me encontre con este disco de oro, que tal vez algún día regrese a la Tierra, en manos nuestras o en manos extraterrestres, os dejo aquí el enlace para el deleite de ustedes, enseñen a sus hijos que esto es historia humana. Disco de Oro.

miércoles, 16 de junio de 2010

Mi Primer MVC

_ En estos días me encuentro realizando el sitio web de http://www.uvkmulticines.com


y aplicando mis conocimientos de MVC en php5 usando PDO, además uso el patron Singleton y el patrón FrontController, cuando termine el proyecto que es un framework creado por mi, siguiendo las convenciones de nombre de Zend Framework.

_ En estos momentos tengo un problemilla con las tildes y las eñes cuando intento comparar el titulo de la pelicula con el nombre de la nueva pelicula ingresada y es q PDO, no me arroja resultado si la palabra tiene tilde, a lo que estoy pensando formatear los 2 parametros para compararlos asi sin tildes.


en este metodo de mi modelo:



_ En el controlador le pregunto si es que existe pero si tiene ñ o tilde no lo encuentra, a ver si me va bien con el plan A, si no el plan "B".