Rankin de lenguajes de programación

Conoce cuál es el lenguaje de programación que ocupa el primer lugar.

Estrategias para ser un mejor profeional

Métodos que puedes practicar para establecer bien tus relaciones y lograr el éxito.

Lista de mejores practicas en PHP

Cómo podemos desarrollar mejor nuestro código PHP.

Cómo ser confiables al 100%

Secretos del buen freelance que debes de conocer .

Metodologia de trabajo MVC

Porqué utilizarla y con que herramientas desarrollarlas.

jueves, 28 de marzo de 2013

Qué herramienta escoger a la hora de trabajar con base de datos


Con este tema nos hacemos las siguientes preguntas:

1.- ¿Cuál me conviene?
2.-  ¿Cuál es menos costoso el aprendizaje?
3.- ¿Cuál es su diferencia?

Pero tranquilos compañeros les comparto  un cuadro explicativo sobre lo que tenemos dudas muchos de los desarrolladores.

Nos vemos enfocado en la situación de cuando vamos a realizar un proyecto, o trabajo de construcción de una aplicación web o multiplataforma nos vemos con la duda, o mejor dicho nos preguntamos cuál será mejor PostgreSQL o MySQL y es ahí donde hacemos un stop y nos adentramos a una explicación explicita del uso de cada una de estas herramientas y su correcto funcionamiento a continuación un cuadro con todas las descripciones de estas herramientas poderosas:






Conclusión
Cuando tengamos la necesidad de trabajar con proyectos pequeños como por ejemplo: páginas webs, aplicaciones webs, etc. MySQL es el indicado.

En caso contrario si queremos crear una aplicación nativa (programa de escritorio) de windows PostgreSQL nos queda como anillo al dedo.


Nota: Recordar siempre que la base de datos es el alma de una web o de una aplicación sin ello que sería de nuestros desarrollos.


miércoles, 27 de marzo de 2013

Si tú tuvieras una Google Glass








Google ha comenzado a notificar algunos de los ganadores del concurso para probar sus nuevas gafas inteligentes, Google Glass, antes de que salgan a la venta al público general. El gigante informático aún no ha dado una fecha exacta de cuando se pondrán a la venta estas gafas al por menos, pero si había anunciado que habría 8.000 afortunados que podrían probarlas antes de su salida al mercado.

A finales del mes de febrero, Google mostraba a los usuarios en un nuevo vídeo el potencial de sus Google Glass. Fotografías, vídeos, «hangouts» incluso navegación GPS están al alcance de los ojos. Sin embargo, la compañía estadounidense no solo quería que los usuarios viesen el potencial sino que fuesen partícipes de ello, por lo que buscaba voluntarios para comenzar a trabajar en Google Glass.

«Estamos buscando individuos creativos y atrevidos que quieran unirse a nosotros y ayudar a dar forma al futuro de Glass. Nos encantaría convertir a todo el mundo en un 'explorador', pero vamos a empezar con objetivos más pequeños», aseguraba la compañía en su blog oficial.

Los participantes en el concurso tenían que contar qué harían con Google Glass a través de un «tuit» con el «hashtag» #ifihadglass, además de desembolsar 1.500 dólares (cerca de 1.200 euros) por el privilegio de ser los primeros en contar con las gafas de realidad aumentada de Google.

Un mes después, Google sólo ha anunciado unos cuantos ganadores así como los «tuits» que los hicieron llevarse uno de los nuevos dispositivos. «Estamos perdiendo un veterano de la Segunda Guerra Mundial cada 90 segundos y la mayoría no vivirá lo suficiente para ver sus monumentos», Sarah Hill, de Columbia, Misurí, que trabaja para la red de apoyo para veteranos; o «Usaría Google Glass para mejorar la seguridad de los bomberos, proporcionándoles mapas de planificación previa al incendio y darles instrucciones a través de video en tiempo real durante las emergencias», Max Wood, de Gray, Georgia, y de profesión bombero, han sido algunas de las propuestas que han convencido al equipo de Google.

Qué hacer cuando tienes demasiadas ideas



Si te incluyes en esa categoría probablemente tengas la creencia, como hablé en otra ocasión, de que todos nacemos con una vocación y hasta que no encuentres la tuya no serás feliz porque no es normal que te gusten tantas cosas y qué pasa si eliges una y te equivocas y te arrepientes toda la vida. Es que eres una inmadura y es hora de sentar la cabeza. Así, seguido, tal cual;) Así que voy a empezar con dos puntualizaciones. En primer lugar, hay personas que tienen muy clara su vocación desde el inicio de los tiempos (yo misma, y mira donde estoy ahora) y hay personas que no. Ambos casos son normales y están bien, no hay nada malo en ninguna de esas opciones. En segundo lugar, deja de compararte con los que sí tienen claro lo que quieren y céntrate en ti, ¿qué puedes hacer al respecto? ¿Cómo decidir a qué dedicarte, qué opción elegir o qué tipo de negocio empezar? Ya he dicho varias veces que compararte con los demás no suele beneficiarte en nada y te mantiene igual de paralizada o más.




¿Qué implica exactamente esa opción?

¿Cuáles son las ventajas e inconvenientes?

Si es una decisión profesional o un tipo de negocio, plantéate también qué tipo de vida llevarías y, lo más importante, ¿encajaría con el tipo de vida que quieres?

Estas preguntas son fundamentales para dar el primer paso porque pocas veces te paras a pensar en las repercusiones de cada opción, en lo que de verdad implicarían. Por poner un ejemplo, puede que la idea de pasarte un año recorriendo el mundo en un velero te parezca un sueño hecho realidad, pero cuando piensas bien lo que implica te das cuenta de que no te apetece estar tanto tiempo separada de tu familia o tanto tiempo en el mar. O a lo mejor te atrae la idea de un puesto de gran responsabilidad pero cuando lo piensas bien te das cuenta de que valoras el tiempo libre y no te apetece estar muchas horas trabajando o tener a mucha gente a tu cargo. O te planteas utilizar una determinada red social y cada vez que lo piensas te atrae menos lo que conlleva… Cada persona es un mundo y lo que para unos es un sueño para otros puede ser una pesadilla. Así que párate a analizar bien las implicaciones.

Lo segundo que puedes hacer es dejar de pensar. Está bien analizar opciones pero, como siempre digo, mucho análisis produce parálisis. Pensando sólo puedes llegar hasta un determinado punto y a partir de ahí sólo te queda una cosa… Probar. Probar algo para ver si te gusta o no. No es necesario que sea algo radical, puedes meter un dedo en el agua antes de lanzarte a la piscina. Por ejemplo, puedes hablar con alguien que se dedique a eso, puedes trabajar como voluntaria o en prácticas un tiempo. Tu mayor obstáculo ahora es la excusa y la pereza, pero para hacer cambios hay que hacer cosas, si te quedas sentada pensando no vas a conseguir nada, tienes que probar lo que quieres, y si no te apetece probar más vale que te plantees otra cosa porque cuando de verdad quieres algo haces lo que sea para lograrlo.



La 10 funciones más usadas de javascript







Dedicamos un poco de tiempo para darles a conocer las 10 funciones más genéricas de javascript  y que forman parte de la mayoría de las aplicaciones del lado del cliente. Actualmente sabemos el poder que a llegado a tener este lenguaje popular al lado del cliente, a continuación conozcamos más sobre el poder y sus funciones de este lenguaje.



Función 1. 

getElementById()

var elemento = document.getElementById(id);

Este método pertenece al objeto document. Con él obtendremos el objeto que hace referencia al elemento con un id en concreto.


Función 2. 

getElementsByTagName()

var array_elementos= elemento.getElementsByTagName(tag);

Sirve para obtener un array con todos los elementos con un tag concreto que están contenidos dentro de un elemento. Por ejemplo: deseamos cambiar el color del texto de todos los elementos con tag “A” contenidos dentro del elemento con id “links”:



<a href=”/”>Home</a>
<div id=”links”>
<a href=”http://google.com”>Google</a>
<a href=”http://ubuntu.com”>Ubuntu</a>
<a href=”http://debian.org”>Debian</a>
</div>

<script type=”text/javascript”>

// Obtenemos el elemento con id “links”
var el = document.getElementById(“links”);

// Ahora obtenemos todos los elementos con tag A que hay
// dentro del elemento 'el'
var as = el.getElementsByTagName(“A”);

// Y finalmente recorremos el array de elementos para
// cambiarles el color a cada uno
for (var i=0; i<as.length; i++) {
as[i].style.color = '#000'; // negro
}

</script>


Función 3.

 join()

var string = array.join(string);

El método join() pertenece al objeto Array (todos los arrays en JavaScript son un objeto Array), y nos servirá para unir todos los elementos de un array para forma una cadena de texto. Es el equivalente en PHP a implode().


Función 4. 

split()

Al igual que join(), split() también es un método del objeto Array, aunque sirve exactamente para lo contrario: dividir una cadena de texto en un array.

Truco: Usados ambos métodos conjuntamente podremos crear una función para sustituir un texto por otro en una cadena dada:

Función 5. focus()

elemento.focus();

Con este método conseguiremos pasar el foco a un elemento de un formulario.


Función 6. 

setTimeout() / setInterval()

var temporizador = setTimeout(funcion, milisegundos);
var intervalo = setInterval(funcion, milisegundos);

Ambos métodos (objeto window) nos sirven para ejecutar código javascript cada x milisegundos, bien para que se ejecute una sóla vez (setTimeout) o bien para que se ejecute ilimitadamente (setInterval). Ambos se pueden cancelar mediante clearTimeout(temporizador) y clearInterval(intervalo).


Función 7. 

addLoadEvent()

Se trata de una versión exclusivamente para el objeto window en el eventoonload, de forma que podremos asignar una serie de funcionalidades a nuestro evento onload y ver el resultado al finalizar la carga de nuestra web. Tambien es posible usar addEvent() para realizar lo mismo. Creada por Simon Willison.


Funicón 8. 

getElementsByClass()

Una gran función que mediante un nombre de clase (CSS), podremos encontrar los elementos que la compongan, devolviendo un arreglo de objetos para trabajar con ellos de forma más cómoda. Originalmente no fue creada por nadie en particular aunque con el tiempo los desarrolladores han ido añadiendo mejoras para depurar la función. Más acerca de esta función.


Función 9.  

getCookie(), setCookie(), deleteCookie()

La implementación de estas funcionalidades en PHP es más fácil.


Función 10.  

alert() / confirm() / prompt()

alert(mensaje);
var resultado = confirm(mensaje);
var resultado = prompt(mensaje, valor);

Con estos métodos (objeto window) mostraremos ventanas modales al usuario. Con alert() simplemente, como hemos visto en otros puntos, mostraremos un mensaje. Con confirm() haremos exactamente lo mismo, pero además obligará al usuario a seleccionar entre dos opciones, una positiva y otra negativa, que se devolverá como parámetro (boolean). Y con prompt() pediremos al usuario que introduzca un texto en una ventana modal.

confirm() es muy útil para confirmar clics en enlaces comprometidos, que hagan operaciones críticas como eliminación de datos.

martes, 26 de marzo de 2013

8 ejercicios PHP de cálculos útiles





En la actualidad se recomienda mucho antes de programar empezar con un breve calentamiento como para entrar en confianza, así como los jugadores entran a la cancha antes de empezar un partido calientan, de la misma manera lo hacemos nosotros.


A continuación les dejo el código y su descripción:


1.- Imprimir las tablas de multiplicar del 1 hasta el 10.

<?php
/*empezamos */
for ($tabla=1; $tabla<=10; $tabla++)
{
echo "<h3>Tabla del $tabla </h3>";
 //generamos la tabla
 for ($i=1;  $i<=10; $i++)
 {
  echo "$tabla x $i = " . ($tabla * $i) . "<br/>";

 }
}
?>

2.- Calcular la tabla de 4 x 4.

<h3>Tabla de 4 x 4 mostrando la potencia de los 4 primeros numeros</h3>
<?php
/*mostrar una tabla de 4 por 4 que muestre las primeras 4 potencias de los números del
uno 1 al 4 (hacer una función que las calcule invocando la función pow). En PHP las funciones hay
que definirlas antes de invocarlas. Los parámetros se indican con su nombre ($cantidad) si son por
valor y antecedidos de & (&$cantidad) si son por referencia*/
//definimos una constante con el valor de nuestra tabla
define(TAM, 4);
//declaramos la funcion con los argumentos
function potencia($v1, $v2){
//pow funcion que eleva a la potencia 
 $rdo=pow($v1, $v2);
//devolvemos los valores
 return $rdo;
}
//creamos la tabla html donde imrpimiremos los resultados
 echo "<table border=1>";
//recorremos el valor de nuestra constante
 for ($n1=1; $n1<=TAM; $n1++)
 {
  echo "<tr>";
   for ($n2=1; $n2<=TAM; $n2++)
     echo "<td>". $potencia($n1,$n2)."</td>";
echo "</tr>";
}
echo "</table>";
 
?>

3.- Imprimir los multiplos de 3.

<?php
//algoritmo que calcula los multiplos de 3 y 5 de los n primeros numeros
    $mtres=0;$mcinco=0;$n=1;
   do {
     //si el numero dividido para 5 es igual a cero
     if ($n%5==0){
        //incrementamos uno a los multiplos de 5 que viene a ser la variable $c
      $mcinco=$mcinco+1;
       } elseif 
        //si el numero divido para tres es cero
          ($n%3==0)
          {
            //incrementamos uno a los multiplos de tres 
             $mtres=$mtres+1; 
              }
              //incrementamos uno al numero que se evalua $n
         $n=$n+1;
        }while($n<=30);
         echo "La cantidad de multiplos de  5 es = $mcinco<br>";
         echo "La cantidad de multiplos de  3 es = $mtres<br>";
?>

4.- Bucle que me dice exactamente que día es hoy.

<BODY>
   <CENTER>
     <H2>Sentencia <I>if</I></H2>
     <?php
        echo "Hoy es <B>";
        $dia = date("D");

switch($dia){
          case "Mon": echo "Lunes";
                      break;
 case "Tue": echo "Martes";
                      break;
          case "Wed": echo "Miércoles";
                      break;
 case "Thu": echo "Jueves";
                      break;
 case "Fri": echo "Viernes";
                      break;
 case "Sat": echo "Sábado";
                      break;
          default:    echo "Domingo";
        }
        echo "</B>"; 
    ?>
   </CENTER>
 </BODY>



5.- Imprimir los numeros del 1 al 100 entre multiplos de 2 y de 3

<BODY>
   <CENTER>
     <H2>Sentencia <I>while</I></H2>
     <?php
       echo "<TABLE BORDER='1'>";
       $fila=1;
       while($fila<=10){
          echo "<TR ALIGN='CENTER'>";
          $col=1;
          while($col<=10){
              echo "<TD>".($fila*$col)."</TR>";
              $col++;
          }
          echo "</TR>";
          $fila++;
       }
       echo "</TABLE>";
     ?>
   </CENTER>
 </BODY>

6.-  Calcular el sueldo de un trabajador.

<?php
//calcular el sueldo de un trabajador con impuestos
    $salarioTrabajador=3500;
    $impuesto=20;//porcentaje
    $sueldoReal=$salarioTrabajador-(($salarioTrabajador/100)*$impuesto);
    echo "Sueldo del trabajador sin impuesto: $salarioTrabajador<br>";
    echo "Con el impuesto:$sueldoReal";
?>

7.- El mismo ejercicio anterior pero con una clase abstracta modificado a nuestras necesidades.

<?php
/*Plantear una clase abstracta Trabajador. Definir como atributo su nombre y sueldo.
 Declarar un método abstracto: calcularSueldo.
 Definir otro método para imprimir el numbre y su sueldo.
Plantear una subclase Empleado. 
Definir el atributo $horasTrabajadas, $valorHora.
Para calcular el sueldo tener en cuenta que se le paga 3.50 la hora.
Plantear una clase Gerente que herede de la clase Trabajador.
 Para calcular el sueldo tener en cuenta que se le abona un 10% de las utilidades de la empresa.*/

//declaramos el nombre de la clase 
abstract class Trabajador{
//variables protegidas
    protected $nombre;
    protected $sueldo;
//funcion constructora
    public function __construct($nom)
    {
     $this->nombre=$nom;   
    }
    public function imprimir()
    {
     echo 'nombre:'.$this->nombre.'<br>';
     echo 'sueldo:'.$this->sueldo.'<br>';
        
    }
    public abstract function calcularSueldo();
    }
    class Empleado extends Trabajador{
        protected $horasTrabajadas;
        protected $valorHora;
        public function __construct($nom,$horas,$valor)
        {
         parent::__construct($nom);
         $this->horasTrabajadas=$horas;
         $this->valorHora=$valor;   
        }
        public function calcularSueldo()
        {
         $this->sueldo=$this->horasTrabajadas*$this->valorHora;
        }
      }
      class Gerente extends Trabajador {
  protected $utilidades;
  public function __construct($nom,$uti)
  {
    parent::__construct($nom);
    $this->utilidades=$uti;
  }
  public function calcularSueldo()
  {
    $this->sueldo=$this->utilidades*0.10;
  }
}
       
       $empleado1=new Empleado('Pablo Rodriguez',150,3.50);
       $empleado1->calcularSueldo();
       echo 'El sueldo del empleado<br>';
       $empleado1->imprimir();
       
       $gerente1=new Gerente('Marcos Herning',1000000);
       $gerente1->calcularSueldo();
       echo 'El sueldo del gerente<br>';
       $gerente1->imprimir();
?>



para entender este ejercicio vamos a hacer un paréntesis con el tema de las clases abstractas en un próximo artículo. 

8.-  Algoritmo que cálcula las ganancias de un restaurante
<?php
/*algoritmo restaurante sol de manta.
 que desea contabilizar sus ingresos netos de los últimos 10 años. Conociendo que en cada año se gano el doble del anterior como se muestra en la gráfica. 
 Año Ingreso 2000 30,000
  2001 60,000
   2002 120,000
    2003 240,000 . . . . 2009 15360.000  
  */
$n=0;$g=2;$c=2000;
do { 
/*pow es una funcion que sirve para elevar al exponente pow(numbase, num exponente) */
$neto=pow($g,$n)*30;
echo"El ingreso neto del ano $c = $neto<br>";
$n=$n+1;
$c=$c+1;
}while ($n<=9);

?> 

De antemano espero sirva de ayuda para muchos compañeros que son fiel seguidores y aportadores de este lenguaje web popular.




lunes, 25 de marzo de 2013

Evitar ataques a nuestros Proyectos PHP


Seguridad de proyectos PHP




Cómo evitar que nuestros proyectos web sean atacados fácilmente.

Debido a los avances en nuestro medio tecnológico nos encontramos con situaciones que nos amargan la existencia como por ejemplo: cuando nuestras webs se caen, ingreso de virus a nuestra PC, spam en nuestros correos, etc.

Surge un el término se empezó a utilizar en el año 2000 por Luis von Ahn, Manuel Blum y Nicholas J. Hopper de la Carnegie Mellon University, y John Langford de IBM.

El sistema captcha tiene las siguientes características por definición:

Son completamente automatizados, es decir, no es necesario ningún tipo de mantenimiento ni de intervención humana para su realización. Esto supone grandes beneficios en cuanto a fiabilidad y coste.

El algoritmo utilizado es público. De esta forma la ruptura de un captcha pasa a ser un problema de inteligencia artificial y no la ruptura de un algoritmo secreto.


Pues habiendo visto un poco de lo que es captcha “Completely Automated Public T uring test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a  máquinas y humanos).

En este escenario, podríamos encontrarnos con dos situaciones bien diferentes:

 Tener un site montado y tener que protegerlo.
 Programar un site desde cero.

Escape de las entradas Para muchos la manera ideal de proteger un site.
Como ya hemos visto en alguno de los casos no nos es útil. Los más habituales son el uso de:
addslashes() / stripslashes()
htmlentities($string, ENT_QUOTES)
htmlspecialchars()
mysql_real_string()

Teniendo activadas las magic_quotes_gpc en nuestro php.ini, que nos pondrá por defecto un slash \ en todos los strings (evitando los tediosos addslashes()) En todo caso, el uso de dichos elementos nos podrá salvar de muchos de los ataques.

Evitar, salvo en casos necesarios, que los formularios POST se llamen desde otro dominio que no sea el del propio servidor. En este caso, nos evitaremos que un atacante avezado utilice un script a tal efecto para ir bloqueando nuestro servidor y llenándolo de datos inútiles.

 Vamos a ver ¿Qué clase de configuración sería la óptima para que un sistema PHP fuera más seguro contra todo tipo de ataques?


Estas directivas serían:

openbase_dir
Esta directiva bien configurada evitará los ataques trasversal directories, debido a que limita ejecución de ficheros al entorno que escojamos.
allow_furl_open off
Es importante que esta directiva esté en OFF para evitar Remote File Inclusion, ya que la inhabilitación de esta directiva no permitirá a la aplicación hacer include remotos.
register_globals off
Como ya hemos explicado, quizá la más maléfica (y obsoleta) forma de que nuestros atacantes desplieguen todo su potencial es mediante esta directiva activada. Es decir, cualquier parámetroque nos venga por POST o GET puede ser una variable potencialmente peligrosa en nuestroaplicativo. Así, cualquier parámetro externo setratará de forma cuidad con $_GET['param'], $_POST['param'], $_FILES['param'] para establecer qué tipo de variables son externas y cuáles no. No se recomienda, a no ser que se tenga muy claro qué se está haciendo, el uso de $_REQUEST, pues ahí puede entrar 'cualquier cosa' que nos venga externamente, y fácilmente podrían introducirnos valores no esperados.
safe_mode on
Esta directiva activada evitará la ejecución de algunos comandos potencialmente dañinos en nuestro sistema, además del chequeo de ciertas funciones que puedan considerarse delicadas. Una lista de dichas funciones puede encontrarse aquí:



Especial atención merecen también las directivas “safe_mode*” que componen la familia.

safe mode:
safe_mode_gid
safe_mode_include_dir
safe_mode_exec_dir
safe_mode_allowed_env_vars
safe_mode_protected_env_vars

Por último, unas funciones que, según la casuística de nuestro aplicativo pudiera evitarnos algún susto por la ejecución de comandos sensibles que no queremos (y no debemos) utilizar:

disable_functions <lista de funciones>
disable_classes <lista de clases>

Escaneo de puertos Una manera de evitar ataques a todo sistema operativo, ya sea mediante web o mediante cualquier otro tipo de vulnerabilidad, sería mediante la ejecución de código remoto o inyección de código no deseado en servicios que puedan tener relación con nuestro sistema.

Para ello se recomienda ejecutar un escaneo de puertos de nuestra máquina (no únicamente puerto 80-http o 443-SSL) para averiguar las posibles vulnerabilidades o exploits que puedan afectar a nuestro sistema y servidor web:

Los más conocidos son nmap y nessus. El funcionamiento de nmap puede llegar a ser sencillo, aunque tiene un despliegue de opciones que de buen seguro mucha gente encontrará interesante.


Una ejecución de este programa puede dar lugar a un resultado como este:

Starting Nmap 4.53 ( http://insecure.org ) at
20080603
12:05 CEST
Interesting ports on 192.168.1.1:
Not shown: 1711 closed ports
PORT STATE SERVICE
21/tcp open ftp
23/tcp open telnet
80/tcp open http
MAC Address: 00:02:CF:81:6F:89 (ZyGate
Communications)

Nessus, en cambio, nos ofrecerá una herramienta cliente/servidor que utilizará una base de datos con las vulnerabilidades que estadísticamente han podido ocasionar “desastres” y nos avisa mediante este escaneo.

La interfaz, además, es bastante más amigable y nos mostrará unas estadísticas de los procesos ejecutados.


Escaneo de vulnerabilidades web

Más en consonancia con el objetivo de este artículo, están los escaneos de vulnerabilidades propiamente web. Estos escaneos se pueden basar en varias premisas, empleando sistemas de conocimiento, funciones heurísticas e incluso técnicas fuzz, que veremos más adelante.  Una buena combinación de estos elementos puede darnos muchas pistas a la hora de proteger nuestro site y llegar donde nosotros no alcanzamos. Empecemos por los escaneadores automáticos más empleados y populares.

Acunetix

Acunetix, que goza de una versión Free Edition (sólo para HTML Injection), pero con una gran variante de sistemas de inyección, una base de datos amplia y una interfaz muy amigable. Los procesos por los que puede “atacarse” pueden ser varios y los perfiles de ataque – si se tiene la versión de pago – de los más variopintos, muchos de ellos ya los hemos visto aquí.


SSS (Shadow Security Scanner)

Similar al anterior en cuanto a sistema web (quizá no tan completo) pero que ofrece también el sondeo de otros protocolos como FTP, NetBios, módulos de Apache del que se tengan constancia que hay vulnerabilidades.



Técnicas Fuzz

Se llama fuzzing a las diferentes técnicas de testeo de aplicativos que generan datos secuenciales y aleatorios para obtener así las vulnerabilidades de la victima. Este sistema de testeo puede ser muy potente pues combina la aleatoriedad en los ataques con ataques basado en formatos heurísticos. Una lista de estos potentes escaneadores de vulnerabilidades pueden encontrarse en:


Un ejemplo lo podemos tener ejecutando el WebFuzzer, con licencia GPL, escrito en C:




PHP IDS


PHP-IDS es un sistema basado en PHP que actúa como IDS (Intrusion Detect System) y que se aplica a todos nuestros archivos buscando algún tipo de inyección o vulnerabilidad. Puede detectar desde XSS, SQL Injection, RFI y ataques LDAP Injection y tiene incluso hasta módulos especializados para distintos tipos de CMS.


Módulos Apache

De entre ellos, existen muchos que nos pueden ayudar a nuestro cometido, aunque nos centraremos en los siguientes:
mod_rewrite

Famoso sobre todo para el uso de URL-Friendly, pues reescribe la entrada transformándola en otras “Human readibility”. Personalmente recomiendo el uso de mod_security, debido a que mod_rewrite tiene lógicas limitaciones al no ser un módulo diseñado a tal efecto.


Conclusión

No es un caso trivial tener que proteger un site web, tanto si ya está hecho como si lo tenemos que desarrollar de nuevo. La única forma de obstaculizar el ejercicio de estos atacantes será conocer cuáles son sus técnicas, mantenerse actualizado regularmente de las vulnerabilidades de nuestro entorno (Sistema Operativo, Lenguaje, base de datos y módulos y librerías asociados), en caso de ser un programa conocido (como un WordPress, Joomla!, PostNuke) mantenerse alerta a los bugs que, altruistamente, algunos atacantes publican en webs.

Además, con un sistema IDS que nos pueda ir comunicando qué pasa con nuestros logs, la evolución de estos mismos y la constante evaluación de las vulnerabilidades de nuestro sistema, junto con un escaneo automático, técnicas fuzz y una programación sólida, y algún módulo destinado a la seguridad harán de nuestro servidor web una fortaleza (casi) inexpugnable.

sábado, 23 de marzo de 2013

Guardar datos en la base de datos




Guardar los datos en nuestra base de datos en un sencillo formulario

Un formulario que me permitirá ingresar los datos y esto a su vez almacenarlos en la base de datos es necesario recalcar que la base de datos es el alma de nuestras aplicaciones, sin ella no podríamos mantener los datos en su respectivo orden, en este ejemplo vamos a trabajar con PHP MySQL e HTML donde describiremos los pasos en orden para realizar nuestra aplicación.

1.- Planteamos el problema.
Necesitamos un formulario para ingresar los datos del usuario y guardarlos en una base de datos.



2.- Diseñamos nuestra base de datos










3.-creamos dos archivos el uno como index.php y el otro como Insertar.php

 un formulario donde creamos los campos necesarios para el desarrollo de nuestras consultas, es decir acorde los campos que creamos en el formulario, esos mismos nos sirven para crear los campos de nuestra base de datos.


El siguiente código es el de nuestro formulario

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<form id="form1" name="form1" method="post">

Nombre
<input name="nombre" type="text" id="textarea" value="" size=45 />
<p>
Apellido
<input name="apellido" type="text" id="textarea2" value="" size=45 />
</p>
<p>
Ocupación
<input name="ocupacion" type="text" id="textarea3" value="" size=45 />
</p>
<p>
Edad
<input name="edad" type="text" id="textarea4" value="" size=45 />
</p>
<p>
Sexo
<input name="sexo" type="text" id="textarea5" value="" size=45 />
<label>
//usamos el evento javascript onClick lo cual indica que accede al formulario e llamamos al archive .php
<input type="submit" name="button" id="button" value="Guardar" onClick="this.form.action = 'Insertar.php'" />
</label>
<label></label>
<label>
<input type="submit" name="cancelar" id="button2" value="cancelar">
</label>
</form>

</body>
</html>




Este es el archivo que procesa la consulta para guardar los datos en la base de datos

<?php
//Conectarse y seleccionar base de datos
$link = mysql_connect('localhost', 'root');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';



$db_selected = mysql_select_db('tarea', $link);
if (!$db_selected) {
die ('Cant use tarea : ' . mysql_error());
}
// Tomar los campos provenientes del Formulario
$nombre = $_POST['nombre'];
$apellido = $_POST['apellido'];
$ocupacion = $_POST['ocupacion'];
$edad = $_POST['edad'];
$sexo = $_POST['sexo'];
// Insertar campos en la Base de Datos
$que = "INSERT INTO datos (nombre, apellido, ocupacion, edad, sexo) ";
$que.= "VALUES ('".$nombre."', '".$apellido."', '".$ocupacion."','".$edad."','".$sexo."') ";
$res = mysql_query($que, $link) or die(mysql_error());

// Cerrar conexión a la Base de Datos
mysql_close($link);
?>
</body>

</html>

Herencia Multiple en PHP



La herencia simple

Es la que tienen todos los lenguajes orientados a objetos: heredamos los atributos de una sola clase padre, lo cual nos permite reutilizar código. Si fuera herencia múltiple, podríamos heredar de más de un padre.

Ejemplo de como se codificaría

La herencia múltiple, si fuera implementada en PHP, se codificaría de la siguiente manera:


class C extends A,B{
  // código
}


Donde la clase C hereda atributos y/o métodos de dos clases, A y B.

Por ejemplo, la clase "HombreLobo" puede heredar de la clase "Hombre" y de la clase "Lobo", pero el problema es que se pueden hacer tantas combinaciones que será difícil seguir y mantener un diseño de este tipo. Por eso muchos lenguajes no la implementan, no por un tema técnico, solo por un tema de salvaguardar la integridad del diseño.

¿Se puede hacer o no?

Por lo que he visto en varios lenguajes, la discusión legítima no es "si se puede hacer o no". En muchos casos no se implementa (como en Java, PHP, etc) porque habilitarla es un posible camino al desastre.

Verdaderamente no es problema técnico, o de evolución, es un problema de criterios de diseño "OO".

Herencia múltiple a través de interfaces

De todas formas siempre hay una puerta trasera: hacer herencia múltiple a través de interfaces; pero el sentido es distinto a hacerlo con clases. Las herencias de clases definen el "que son" y las interfaces agrupan clases que definen el "que hacen".

Las interfaces permiten pasar del estilo de diseño "orientado a la implementación" a uno "orientado a la interfaz", donde todas las clases acceden a servicios a través de interfaces que son implementadas por clases concretas. Y al no depender de clases concretas (solo de entidades abstractas) nuestro diseño será más reutilizable que el anterior.

El mayor problema

Los problemas más comunes que puede dar la implementación de herencias múltiples son las "colisiones de nombres" y la "herencia repetida".

Las colisiones se pueden dar cuando las clases empiezan a tener los mismos nombres en los métodos generando la duda de cual método debo usar de las dos clases y la herencia repetida es cuando nuestra clase hereda de dos clases que a sus vez son hijas del mismo padre, por lo cual estemos posiblemente heredando características repetidas.

¿Que sugieren las "Guias de Diseño OO"?

Y ya que estamos del tema "diseño", lo comento: las guías de diseño recomiendan que para una buena jerarquía de herencia:

- Se deben tener no más de 7 (+-2) niveles
- Las jerarquías "gordas y bajas" son síntoma de "poca especialización"
- Las jerarquías "altas y flacas" son síntoma de "excesiva especialización".

¿Si tantas recomendaciones existen para la herencia simple, que queda esperar para la herencia múltiple?

¿Y los grandes libros de Patrones de Diseño?

Hasta yo puedo crear un patrón y usar la herencia múltiple, pero eso no quiere decir que sea la mejor solución a un problema, ni que este pueda aplicarse en otros contextos (la esencia de los patrones).

Tomando como referencia un libro base reconocido mundialmente como es el GOF , donde ninguno de los patrones (de los 23) hacen uso de la herencia múltiple, y tampoco la sugieren, y menos, se quejan de su falta.

Los patrones de diseño son considerados la mejor "receta de cocina" para resolver un problema recurrente, con el mejor diseño posible, donde puede ser aplicado en otros contextos (concepto de patrón: "elemento reutilizable de experiencia y conocimiento").


viernes, 22 de marzo de 2013

10 pasos para poner un negocio








El primer paso para mí consiste en la idea, usualmente esta idea proviene de un sueño. Mi consejo es identificar básicamente nuestras habilidades, sintonizarlas con nuestros gustos y compararla con el potencial del negocio. Esto nos puede dar una base de lo que podría ser un buen negocio que se ajuste a nosotros.

Este paso como muchos en esta lista son válidos tanto para negocios dentro y fuera de Internet.

El segundo paso es analizar el mercado, ver si nuestra idea de negocio corresponde a un nicho “hambriento”. Aquí debemos identificar a nuestro cliente objetivo, la plaza en la que vamos a trabajar y la competencia que tenemos. De esta evaluación sale si estamos en el negocio correcto y en ese momento definimos qué producto o servicio vamos a desarrollar para servir a ese mercado necesitado.

El tercer paso es tener una visión clara de nuestro negocio, para dónde queremos que vaya a corto, mediano y largo plazo y establecer nuestra misión como empresarios. Este punto es como nuestra “constitución”, es la filosofía de nuestra empresa que debe reflejar lo que queremos de nuestro negocio.

El cuarto paso es desarrollar un plan de negocios que nos sirva de hoja de ruta para los próximos 5 ó 10 años. Un plan dinámico que podamos ir ajustando, pero que nos dé una idea de cómo va el negocio y su desarrollo.

El quinto paso es crear una marca. Esto va más allá de diseñar un logotipo o poner un nombre. Crear una marca es desarrollar la identidad corporativa, nuestros colores, los uniformes, la decoración del local, la forma como se contesta el teléfono, todo el empaque que nos identifica. Una marca sólida que la gente identifique y le de confianza comprar. Este para mí es uno de los pasos más importantes y a los que los emprendedores que empiezan un negocio le dan menos importancia.

El sexto paso es elaborar un presupuesto, hacer un flujo de caja y así determinar el dinero que se necesita para invertir en el negocio. Esto le da una idea de la financiación que debe tener y así sabrá si cuenta con recursos suficientes o necesitará un crédito.

El séptimo paso es todo lo que tiene que ver con trámites legales, constitución de la compañía, contratos, permisos, registros de marca, etc. Mi sugerencia es buscar a un profesional y ahorrase dolores de cabeza.

El octavo paso es la organización administrativa y logística. El organigrama de la empresa, el personal, la infraestructura, la locación de nuestro negocio, el equipo o maquinaria, etc. Yo incluyo aquí toda la parte contable y de impuestos que se debe tener en cuenta para monitorear el negocio y estar tranquilos de estar cumpliendo nuestras obligaciones impositivas.

El noveno paso es el corazón del negocio, la promoción, elaboración de un plan de mercadeo, el desarrollo de una estrategia de ventas. De un buen marketing depende un buen negocio.

El décimo paso es el de sistematizar. Este es otro de mis pasos favoritos. La creación de procesos, manuales y sistemas es lo que logra que el negocio trabaje para nosotros y no nosotros estemos trabajando para él. Sistematizar un negocio permite su expansión, franquiciarlo, venderlo o simplemente operarlo sin tener que estar físicamente en él.

Y el bono, capacitación. El aprendizaje constante es el que nos permite estar vigentes. Innovar es el nuevo paradigma y para hacerlo debemos estar aprendiendo, investigando y conociendo a fondo nuestro negocio, la industria y a nuestro cliente. La capacitación es a todo nivel, desde la cabeza del negocio hasta el personal.

Recuerde que la única forma de tener un negocio exitoso es si logramos posicionarnos como los número uno del mercado, así que si seguimos estos pasos seguramente lo lograremos.



 
contador de visitas