Como empezar tu nuevo blog 2ª Parte

Como empezar tu nuevo blog 2ª ParteContinuo con la segunda parte de la guía sobre como crear tu propio blog, ya que ayer por falta de espacio me quede en lo mas básico.

Imagino que a estas alturas es algo que tienes mas que claro. Si tan sólo quieres que sea una bitácora sobre tus pensamientos y reflexiones, perfecto, pero si te ves preparado para hablar de un contenido en el que te consideras entendido o experto, explótalo. Si vas a hablar de mecánica será muy interesante que el nombre de tu blog esté relacionado con ello, lo mismo si hablas de viajes, cine, política… Hablar de diversos temas puede ser un error, ya que confundes a tus lectores y puedes aburrirles, haciendo que se marchen espantados. Te lo digo por experiencia. Traza una línea y luego ves abriendo lentamente nuevos campos, si es que al final te animas. Una vez tienes clara la temática es hora de pasar al nombre. En este artículo te enseño Como elegir el nombre adecuado para una web o Blog. (más…)

Como empezar tu nuevo blog

Hoy voy a ayudarte a crear tu propio Blog. Quieres empezar un blog pero no sabes como hacerlo. Así de pronto te planteas múltiples preguntas como, en qué plataforma sería mejor publicarlo, qué temática debo escoger, con qué regularidad escribo… y la más importante, cómo puedo hacer para que el mensaje que quiero lanzar llegue al mayor número de gente. Y luego hay otras preguntas que no se te ocurrirán, pero que también deberían. En este manual trataré de resolverte las dudas de forma sencilla de manera que cuando acabemos no solo tengas las cosas mas claras, sino que puedas empezar con tu propio Blog.

Para empezar está el tipo de alojamiento. ¿Donde pongo mi Blog? Para empezar, y lo mismo da si quieres crearte un Blog personal para tu club de fans del encaje de bolillos que si quieres crear un blog para tu empresa, o eres un emprendedor que aun no tiene presencia en la red, como todo en esta vida, lo mejor es probar, y si puede ser gratis mejor. Luego si nos gusta la experiencia, el resultado, o ambos, podemos plantearnos un alojamiento de pago, pero de momento empezaremos con uno gratuito. (más…)

Como mezclar dos foros SMF usando MySQL

Como he tenido mil y un problemas para poder traspasar mi antiguo foro de PHP Nuke ET a un nuevo foro SMF 2.0.1 mucho mas potente, he tenido que hacer cosas y buscar información que no conocía para llevar todo a buen puerto. Lo primero que hice fue adaptar un conversor sacado del propio foro de Simple Machines, para poder migrar el antiguo PHP Nuke ET a una nueva instalación de SMF 2.0.1. He incluido en las descargas de la web el conversor adaptado ya que no lo he visto en ningún otro lado, lo podéis encontrar aquí.

Una vez hecho esto, y teniendo en cuenta que como no había nada para hacerlo ya tenía otro foro SMF 2.0.1 funcionando tenia que fusionarlos, y por mas que he mirado por Internet no había forma de poderlo hacer. Nadie daba solución ni forma de hacerlo y mire en todos los idiomas. Finalmente en el foro de Simple MachinesJoker™ me dijo que podía haber una solución en un post, y así fue, así que me puse manos a la obra y tras algunos traspiés al final lo logré como podéis ver en la web de Urgencias y Emergenciasque es donde lo apliqué. Como esa solución no me ha sido fácil encontrarla y además solo esta en inglés recopilada por jkdove he creído interesante publicarosla aquí en la lengua de Cervantes para todo el que lo pueda necesitar, además he corregido y cambiado algunas cosas ya que sino a mi me daba algún error.

Como juntar dos Foros SMF usando MySQL

Lo primero tenemos que diferenciar ambos foros para hablar de ellos, los vamos a llamar antiguo y principal, donde el antiguo es la Base de datos antigua desde la que queremos recuperar los datos, y principal es la Base de Datos actual, a la que queremos exportar esos datos, es decir, el foro en funcionamiento.

Os puedo asegurar que funciona, y la prueba la tenéis mas arriba, pero tienes que seguir las instrucciones exactamente y al pie de la letra. Yo lo he usado una vez sin problemas y en su post jkdove dice haberlo realizado tres veces ya sin problemas. Como apunte deciros que los dos foros que uní eran dos smf 2.0.1. Vamos a ponernos el mono de trabajo, y manos a la obra. (más…)

Inyección de Código SQL

Modificación del comportamiento de nuestras consultas mediante la introducción de parámetros no deseados en los campos a los que tiene acceso el usuario.

La inyección SQL consiste en la modificación del comportamiento de nuestras consultas mediante la introducción de parámetros no deseados en los campos a los que tiene acceso el usuario.
Este tipo de errores puede permitir a usuarios malintencionados acceder a datos a los que de otro modo no tendrían acceso y, en el peor de los casos, modificar el comportamiento de nuestras aplicaciones.

Vamos a ver con un ejemplo que significa eso de “Inyección de código”:

Supongamos que tenemos una aplicación Web (realizada en ASP por sencillez) en la que el acceso a ciertas secciones está restringido. Para restringir ese acceso creamos una tabla de usuarios y contraseñas y sólo los usuarios que se validen contra esa tabla podrán acceder a esos contenidos. Una manera de que los usuarios se validen será colocar un par de cuadros de texto en nuestra página Web (por ejemplo txtUsuario y txtPassword) donde puedan introducir su nombre y su contraseña y enviar ese par usuario/contraseña a la base de datos para comprobar si es válido.

Primero creamos la tabla que vamos a usar y la rellenamos con datos:

Ahora veamos el código de las páginas que forman parte del proceso de login.

index.htm

Esta primera página es sencilla. Simplemente los dos cuadros de texto mencionados que enviarán los datos a la página de login.

Login.asp

 Code: arbitrary (select
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

<%
       Dim Usuario, Password, RS, SSQL
       Usuario = Request.Form("txtUsuario")
       Password = Request.Form("txtPassword")
       SSQL = "SELECT count(*) FROM Usuarios WHERE Usuario = '" & Usuario &
       "' AND password='" & Password & "'"
       Set RS = Server.CreateObject("ADODB.Recordset")
       RS.Open SSQL, "Cadena de conexion"
       If (RS.EOF) Then
          Response.Write "Acceso denegado."
       Else
          Response.Write "Te has identificado como " & RS("Usuario")
       End If
       Set RS = Nothing
%>

Y en esta segunda página creamos dinámicamente una sentencia SQL que enviamos a la base de datos para la validación.
Si el usuario escribe Admin y 1234 la sentencia creada será:

Y como esta sentencia nos devuelve un registro dejaremos que el usuario entre en la Web. Si el usuario escribe por ejemplo ‘Admin’ y de contraseña cualquier otra cosa, la sentencia no nos devolverá registros y no permitiremos entrar a esa persona.
Pero ¿qué ocurre si el usuario escribe ‘ or ‘1’=’1 como usuario y lo mismo de contraseña?
En este caso la variable Consulta contendrá la cadena:

Y obviamente esta sentencia nos devuelve registros con lo que el usuario entrará en nuestra Web sin tener permiso.
Pero esto no es lo peor. Lo peor será que el usuario utilice estos trucos de inyección de SQL para ejecutar código arbitrario en nuestro servidor. Sentencias DDL, cambiar permisos, utilizar procedimientos almacenados y un largo etcétera. Qué ocurriría si alguien escribiese de contraseña cosas como:

Cómo evitarlo

Y ahora lo más importante, ¿qué podemos hacer para evitar estos errores?
Pues hay varios sistemas para evitarlo. Por ejemplo podemos filtrar las entradas de los usuarios reemplazando la aparición de ‘ por ‘’ (dos comillas simples) e incluso evitando que los usuarios puedan pasar caracteres como / “ ‘ o cualquier otro que se nos ocurra que puede causar problemas. Estos filtros pueden ser tan sencillos como utilizar la sentencia replace de Visual Basic:

Otro factor importante en cuanto a la seguridad es limitar al máximo los permisos del usuario que ejecuta estas sentencias para evitar posibles problemas. Por ejemplo utilizando un usuario distinto para las sentencias SELECT, DELETE, UPDATE y asegurándonos que cada ejecución de una sentencia ejecute una sentencia del tipo permitido.
Por supuesto utilizar el usuario ‘sa’ o uno que pertenezca al rol ‘db_owner’ para ejecutar las sentencias de uso habitual de la base de datos debería quedar descartado.
Una solución definitiva sería trabajar con procedimientos almacenados. El modo en el que se pasan los parámetros a los procedimientos almacenados evita que la inyección SQL pueda ser usada. Por ejemplo utilizando el siguiente procedimiento almacenado:

También deberíamos validar los datos que introduce el usuario teniendo en cuenta por ejemplo la longitud de los campos y el tipo de datos aceptados. Esto lo podemos hacer en el cliente con los RegularExpressionValidator o con los CustomValidators del VB.NET. De todos modos si la seguridad es importante todas estas validaciones hay que repetirlas en el servidor.

Por ultimo, y ya que estamos pensando en entornos Web, podemos programar en ASP.NET yy utilizar siempre que sea posible las clases System.Web.Security.FormsAuthentication para que los usuarios entren en nuestras aplicaciones Web.

Página 1 de 212