Mostrando entradas con la etiqueta parte2. Mostrar todas las entradas
Mostrando entradas con la etiqueta parte2. Mostrar todas las entradas

lunes, 2 de marzo de 2015

[Parte 2]jQuery

jQuery - Conceptos basicos

jQuery es un framework construido utilizando las capacidades de javascript. Asi que usted puede utilizar todas las funciones y otras capacidades disponibles en javascript. 

Cadena

Una cadena en javascript es un objeto inmutable que contiene ninguno, o varios caracteres. Los siguientes son ejemplos validos de una cadena de javascript:

"Esto es una cadena Javascript"
'Esto es una cadena Javascript'
'Esto es "realmente" una cadena Javascript'
"Esto es 'realmente' una cadena Javascript"


Numeros

Los numeros en javascript son de formato IEEE 754 de doble precision de 64 bits. Ellos son inmutables al igual que las cadenas. Los siguientes son ejemplos validos de numeros en javascript:

5350
120.27
0.26


Booleanos

Un booleano en javascript puede ser falso o verdadero. Si un numero es cero, el valor predeterminado es falso. Los siguientes son ejemplos validos en booleano de javascript:

true // verdadero
false //  falso
0 // falso
1 // verdadero
"" // falso
"hola"  // verdadero

 

Objetos

Javascript soporta el concepto de objetos muy bien. Puede crear un objeto usando literalmente object de la siguiente manera:

var emp = {
    nombre : "Sara",
    edad : 10
}


Usted puede escribir y leer las propiedades de un objeto utilizando la notacion de puntos de la siguiente manera:

// Obtener las propiedades del objeto
emp.nombre // ==> Sara
emp.edad // ==> 10

// Estableciendo las propiedades del objeto
emp.nombre = "Deisi" // <== Daisi
emp.edad = 20 // <== 20


Arrays

Puede definir arrays utilizando literalmente array de la siguiente manera:

var x = [];
var y = [1, 2, 3, 4, 5];


Un array tiene la propiedad length que es util para la iteracion:

var x = [1, 2, 3, 4, 5];
for (var i = 0; i < x.length; i++){
    // Hacemos algo con x[i]
}


Funciones

Una funcion en javascript puede ser o bien nombrada o anonima. Una funcion nombrada se puede definir mediante la palabra clave function de la siguiente manera:

function nombrada(){
   
}


Una funcion anonima puede ser definida en forma similar que una funcion normal, pero no tendrá ningun nombre. Una funcion anonima se puede asignar a una variable o se pasa a un metodo como se muestra a continuacion:

var manejador = function(){
    // hacer algo aqui
}


jQuery hace uso de funciones anonimas con mucha frecuencia como sigue:

$(document).ready(function(){
    // Hacer algo aqui
});



Argumentos

La variable javascript arguments es una especie de array que tiene la propiedad de length. El siguiente ejemplo lo muestra muy bien:

function func(x){
    console.log(typeof x, arguments.length);
}

func(); // ==> "undefined", 0
func(1); // ==> "number", 1
func("1","2","3"); // ==> "string", 3


Los argumentos de los objetos tambien tienen una propiedad callee, que se refiere a la funcion que esta dentro de el. Por ejemplo:

function func(){
    return arguments.callee;
}

func(); // ==> func



Contexto

Javascript tiene la famosa palabra clave this que se refiere al contexto actual. Dentro de una funcion este contexto puede cambiar, dependiendo de como se llama la funcion:

$(document).ready(function(){
    // Esto hace referencia a window.document
});
$("div").click(function{
    // Esto se refiere al elemento div en el DOM
});


Puede especificar el contexto de una llamada utilizando los metodos incorporados call() y apply(). La diferencia entre ellos es la forma en que se pasan los argumentos. Call pasa todos los argumentos a traves de los arguments de la funcion, mientras apply acepta un array como arguments.


function scope(){
    console.log(this, arguments.length);
}

scope() // window, 0
scope.call("foobar",[1,2]); // ==> "foobar", 1
scope.apply("foobar",[1,2]); // ==> "foobar", 2



Ambito

El ambito de una variable es la region de su programa en el que se define. Las variables en javascript tendran solo dos ambitos.

Variables globales: una variable global tiene un alcance global que significa que se define por todas partes en su codigo javascript. 

Variables locales: una variable local sera visible solo dentro de la funcion donde se define. Los parametros de la funcion son siempre locales a esa funcion.

Dentro del cuerpo de una funcion, una variable local tiene prioridad sobre una variable global con el mismo nombre:

var miVar = "global"; // ==> declaramos una variable global

function (){
    var miVar = "local"; // ==> declaramos una variable local
    document.write(miVar); // ==> local
}


Llamadas

Una callback (llamada) es una funcion de javascript plana pasado a algun metodo como argumento o una opcion. Algunas llamadas son solo eventos, llamados a dar al usuario la oportunidad de reaccionar cuando se activa un determinado estado. El sistema de eventos de jQuery utiliza estas llamadas en todas partes, por ejemplo:

$("body").click(function(event){
    console.log("click en: " + event.target);
});


La mayoria de las llamadas proporcionan argumentos y un contexto. En el ejemplo del controlador de eventos, la devolucion de la llamada se llama como argumento. Se necesitan algunas llamadas para devolver algo, otros hacen el valor de retorno opcional. Para evitar un envio de formularios, en el controlador de eventos submit colocamos return false de la siguiente manera:

$("#miformulario").submit(function(){
    return false;
});


Cierres

Los cierres se crean cada vez que se accede a una variable que se define fuera del ambito dentro de algun ambito interno. El ejemplo siguiente muestra como la variable contador es visible dentro de crear, de incrementar, y las funciones de impresion, pero no fuera de ellos:

function crear(){
    var contador = 0;
    return {
        incrementar : function(){
            contador++;
        },
        impresion : function(){
            console.log(contador);
        }
    }
}

var c = crear();
c.incrementar();
c.impresion(); // ==> 1



Este patron permite crear objetos con metodos que operan sobre los datos que no son visibles para el mundo exterior. Cabe señalar que la ocultacion de datos es la base misma de la programacion orientada a objetos.


El patron Proxy

Un proxy es un objeto que se puede utilizar para controlar el acceso a otro objeto. Se implementa la misma interfaz que este otro objeto y pasa cualquier metodo invocandolo a él. Este otro objeto a menudo se llama real subject (sujeto real). Un proxy puede ser instanciado en lugar de real subject y permite ser accedido de forma remota. Podemos ahorrar usando el metodo setArray de jQuery en un cierre y sobreescribiendolo de la siguiente manera:

(function(){
    // registramos todas las llamadas a setArray
    var proxied = jQuery.fn.setArray;

    jQuery.fn.setArray = function(){
        console.log(this, arguments);
        return proxied.apply(this, arguments);
    }
})();


Lo anterior envuelve su codigo en una funcion para ocultar la variable proxied. El proxy entonces registra todas las llamadas al metodo y los delegados de la llamada al metodo original. Utilizando apply(this, arguments) garantiza que la persona que llama no sera capaz de notar la diferencia entre el original y el metodo proxied.


Funciones incorporadas

Javascript viene junto con un util conjunto de funciones incorporadas. Estos metodos se pueden utilizar para manipular cadenas, numeros y fechas. A continuacion se describen las funciones de javascript importantes:

+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| Metodo        | Descripcion                                                                                                                     |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| charAt()      | Devuelve el caracter en el indice especificado.                                                                                 |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| concat()      | Combina el texto de dos cadenas y devuelve una nueva cadena.                                                                    |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| forEach()     | Llama una funcion para cada elemento de la matriz                                                                               |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| indexOf()     | Devuelve el indice dentro del objeto llamado String de la primera aparicion del valor especificado, o -1 si no es encontrado.   |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| length()      | Devuelve la longitud de una cadena.                                                                                             |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| pop()         | Elimina el ultimo elemento de una matriz y devuelve dicho elemento.                                                             |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| push()        | añade uno o mas elementos al final de una matriz y devuelve la nueva longitud de la matriz.                                     |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| reverse()     | Invierte el orden de los elementos de una matriz, el primero se convierte en el ultimo, y el ultimo se convierte en el primero. |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| sort()        | Ordena los elementos de una matriz                                                                                              |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| substr()      | Devuelve los caracteres de una cadena que comienza en el lugar especificado, por el numero de caracteres especificados.         |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| toLowerCase() | Devuelve el valor de la cadena llamada convertido en minusculas.                                                                |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| toString()    | Devuelve la representacion de una cadena del valor de un numero.                                                                |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
| toUpperCase() | Devuelve el valor de la cadena llamada convertido en mayusculas.                                                                |
+---------------+---------------------------------------------------------------------------------------------------------------------------------+
 
El modelo de objetos del documento

El modelo de objetos del documento (Document object model) es una estructura de arbol de diversos elementos de HTML de la siguiente manera:

<html>
<head>
    <title>Es el titulo</title>
</head>
<body>
    <div>
        <p>Este es un parrafo</p>
        <p>Este es el segundo parrafo</p>
        <p>Este es el tercer parrafo</p>
    </div>
</body>
</html>


Los siguientes son los puntos importantes sobre la estructura de arbol de arriba:

* El <html> es el ancestro de todos los demas elementos, en otras palabras, todos los demas elementos son descendientes de <html>

* El <head> y <body> no son solo elementos descendientes, son hijos de <html> tambien.

* Del mismo modo ademas de ser antepasado de <head> y <body>, <html> tambien es su padre.

* Los elementos <p> son los hijos (y descendientes) de <div>, descendientes de <body> y <html> y hermanos unos de otros elementos <p>.

Fuente: http://www.tutorialspoint.com/jquery/index.htm

domingo, 2 de marzo de 2014

[Parte 2] Seguridad en PHP

Formularios y URLs

En esta parte vamos a ver el tratamiento de formularios y URLS. Aprenderemos ataques como XSS, CSRF, falsificar formularios y enviar solicitudes manualmente.


Formularios y datos

Las tareas que hace PHP la mayoría son procesamiento de datos, son tareas tales como, por ejemplo: iniciar sesión, agregar elementos en carrito de compras, procesar una transacción por tarjeta de crédito, etc.


Los datos que se procesan pueden considerarse:

* maliciosos
* no maliciosos

Los no maliciosos podría ser por ejemplo, un email que tu sabes que muestras como salida, es algo de confianza por que tu mismo lo estas manipulando, tu mismo lo envías, pero por ejemplo, si alguien ingresa un email y no esta filtrada puede convertirse en un dato malicioso ya que no se filtra la entrada y no se escapa la salida.

Un usuario puede enviar los datos de tres formas predominantes:

* Por la url ($_GET)
* En el contenido de la solicitud ($_POST)
* En la cabecera HTTP ($_COOKIE)

La datos que se envian no cambian, sino la forma en que se envian, veamos un ejemplo:



Los datos son interceptados por Burp Suite Pro.

Ataques a URL semánticas

Los ataques de url semánticas son los cuales vas modificando la URL para ver que tipo de datos interesantes puedes obtener no solo por GET por que como ya vimos en las imágenes de arriba atrapamos los datos con Burp suite interceptándolos en el envió.

Las URL semánticas son las que tienen un significado para el usuario y son fáciles de recordar ya que van acorde con el contenido de la pagina web.

Otra de los aspectos importantes es que este tipo de URL pueden quedar almacenadas en buscadores como Google, de manera que pueden ser vistas por todo el publico y podemos empezar nuestro ataque.

Un ejemplo, podría ser un formulario donde los datos se envian por GET aunque comúnmente son por POST cambian su email alternativo para que su cambio de contraseña sea enviado a ese email.



De esta manera que pasa que no esta verificando al usuario por medio de sesiones sino por medio de un input, es tan facil como nosotros cambiar el usuario por el que nosotros queramos por ejemplo: user002 en lugar de user001 y el email por el de nosotros:


La manera de solucionar este problema seria el uso y manejo adecuado de sesiones. Un ejemplo de este tipo de ataque: http://www.securityfocus.com/archive/75/320768/2003-05-05/2003-05-11/0




Ataque de subida de archivos

Muchas de las paginas web hoy en día permiten la subida de archivos, tal y como son facebook, twitter, blogs, foros, etc. 

Un formulario de subida de archivos básico es como el siguiente:



Como se ve en la imagen, algo diferente que vemos a simple vista es que el formulario incluye enctype="multipart/form-data" esto se usa para la carga de archivos solamente, y también tenemos un campo oculto con una variable MAX_FILE_SIZE la cual tiene un valor de 1024 que seria lo máximo permitido para el peso del archivo aunque el HTML siempre se puede editar desde el lado del cliente no esta demás ponerlo, pero lo ideal seria validarlo desde el servidor, y por ultimo tenemos un campo llamado attachment de tipo file que es para buscar el archivo en nuestro ordenador que queramos subir.

Para procesar nuestro formulario desde el PHP seria usando el array superglobal $_FILES, veamos como se nos muestra el array en el navegador de manera que conozcamos como lo podemos usar:



Como se ve en la imagen tenemos las cabeceras y el archivo impreso en texto plano su variable $_FILES de esta manera podemos analizar rapidamente:

$_FILES['attachment']['name'] - Es el nombre de la imagen
$_FILES['attachment']['type'] - Es el tipo de archivo
$_FILES['attachment']['tmp_name'] - Donde se almacena el archivo temporalmente al subirse
$_FILES['attachment']['error'] - Es el tipo de error, en este caso por ejemplo, tuve que cambiar MAX_FILE_SIZE para que no me lanzase el error 2 que es el archivo excede el maximo tamaño permitido, podemos ver mas sobre ello aqui: http://www.php.net/manual/es/features.file-upload.errors.php
$_FILES['attachment']['size'] - Es el tamaño del archivo



El código de la imagen ha sido sacado de W3schools y es un ejemplo seguro de subir imágenes, en este caso como al procesar el formulario de las imágenes, lo primero que hacemos es tomar la extensión del archivo y verificar si es cualquier tipo de imagen, después verificamos que si el archivo que subimos concuerda con cualquier tipo de imagen permitido que nos muestre que se subió, si el archivo existe que nos muestre un mensaje de que existe, si el archivo no esta entre las extensiones permitidas es invalido, y si pasa algún error también lo mostrara.




Aquí en este imagen mostramos como queremos evitar la extensión JPG por una PHP, pero el caso es que no esta validando la cabecera Content-Type si no la extensión por lo cual nos arroja que el archivo es invalido, ya que no entre su lista de archivos permitidos.

Otra manera de evitar este tipo de ataques seria usar un archivo .htaccess (archivo para modificar directivas Apache sin tener que usar el archivo httpd.conf) y crear unas reglas donde solo permitamos imágenes y solamente eso. Esto se subiria claro en el directorio donde estamos subiendo las imágenes.



deny from all<Files ~ "^\w+\.(gif|jpe?g|png)$">order deny,allowallow from all</Files>






Cross Site Scripting (XSS)

Esta es una de las vulnerabilidades mas conocidas.




Cualquier aplicación que muestre un campo de entrada puede ser victima de este ataque, este ataque se puede dar en foros, blogs, y webs de las mas conocidas, para poner como ejemplo a Google.

Un ejemplo de este ataque podría ser el siguiente:



¿Y que pasa con esto? Que como no esta validado podemos inyectar script en la pagina web, esto lo hacemos por que nuestro html es interpretado tal y como nosotros quisiésemos un ejemplo seria obtener las cookies del usuario y poder ingresar a su web con su nivel de privilegios.




Esto nos daría un resultado como el siguiente:


Lo ideal para eliminar este ataque seria usar HTMLENTITIES aunque también existen librerías tales como htmlpurifier si es que quieres aceptar algunas etiquetas html, veamos el ejemplo anterior con nuestro código de nuevo:




Cross site request forgery (CSRF)

El CSRF (del ingles cross site request forgery o falsificación de petición en sitios cruzados) es un tipo de exploit malicioso de un sitio web en el que comandos no autorizados son transmitidos por un usuario en el cual el sitio web confía. 

Un ejemplo de este ataque puede ser una aplicación en la cual puedes comprar lapices o plumas...




Esta aplicacion lo que hace es que compras lapices o plumas,con lo cual si lo compras (aunque en este caso es de ejemplo por que nisiquiera llenamos datos :P) correctamente te dice que tu compra se realizo correctamente pero sino te dice que hubo un error al procesar el pedido  

Se estarán preguntando, ¿Pero no esta por method $_GET?, Bueno en realidad el PHP tiene $_REQUEST el cual acepta $_POST y $_GET pero les mostrare como se puede explotar de las dos maneras, por que muchos piensan que si es $_POST este ataque no puede ser vulnerado, pero no es así en realidad.


Como ves en este ejemplo, se realiza la compra, y esto sin que el usuario que ejecuto esto haya confirmado su compra, imagina que tuvieses un XSS Persistente, de esta manera te puedes montar un Phishing con XSS y realizar un Ataque CSRF o solamente puedes enviar la pagina, ejemplo de método POST:



No creo que sea necesario explicar lo que realiza, pero de todas maneras lo diré, lo que hace es ejecutar los campos por método post en cuanto carga esta pagina, los campos están ocultos y se procesan rápidamente, y el ataque ha sido realizado.

Entonces, ¿Que tan malo es este ataque?,pues con el puedes realizar muchos tipos de cosas (ya sean administrativas el usuario que lo tiene que ejecutar es el administrador ...) como por ejemplo, eliminar un usuario por la URL al no tener un token o una pagina donde te diga que si deseas proceder con la acción tan importante, puede realizar el ataque.

La manera de asegurarse en PHP de que no pase esto es como ya comentamos los "tokens" o una pagina donde diga que si desea proceder con tal acción, aunque aveces es fastidioso ese tipo de paginas se opta muchas veces por los tokens...

Los tokens pueden ser algo (como un PIN por ejemplo) que identifique ser que el usuario que esta realizando tal acción tiene suficientes permisos para realizarla y es ese usuario en realidad y no otro, y ¿por que aumenta esto nuestra seguridad? por que el usuario atacante no sabe cual es nuestro token entonces no podrá ejecutar su ataque CSRF ;).



¿Que esta pasando aquí?, como ves estamos haciendo nuestra compra y como el token es correcto nos da un mensaje de que nuestra compra se realizo con éxito, en este caso el token no tiene limitación, es decir, no tiene fecha de caducidad algo que también se puede aplicar :P, bueno pero antes que eso, veamos que podría hacer si fuera el atacante, pues solo tratar de adivinar el token algo que seria muy difícil :P entonces si no tengo el token mi exploit falla:

Y pues por ultimo les muestro el código con el que estaba haciendo las pruebas, que en realidad no seria así programado en una aplicación web real, pero para un ejemplo, puede verse como en realidad son usados los tokens:



Y en el ejemplo de tiempo como lo habíamos dicho mas arriba, seria por ejemplo esto:


Un ejemplo en una aplicación web famosa tal y como es Wordpress, podemos ver este tipo de ataque en la siguiente URL: http://www.exploit-db.com/exploits/18791/

Falsificar Formularios

Falsificar un formulario es modificarlo de tal manera que quede como tu quieras y puedas enviar los datos tal y como tu quieras, en este caso seria el atacante...

Imaginemos que tenemos un formulario el cual envía un correo al administrador, este correo seria un mensaje de reporte o un mensaje que tu quisieras, todo funciona normalmente si no falsifican el formulario:



Enviamos el mensaje:


Tal como se ve lo recibimos correctamente, pero si miramos el código fuente el correo puede ser falsificado...


La imagen anterior estamos usando el complemento Firebug para firefox tambien esta disponible en Google Chrome.


Como vemos hay un campo oculto, que es el correo al cual se envían todos los mensajes, ¿que pasaría con esto?, si fuésemos el atacante podríamos enviar mensajes desde la aplicación a quien nosotros queramos y con el correo que nosotros queramos :3


Como podemos ver hemos metido otro correo en el valor de ese campo con solo dar doble clic podemos editarlo usando firebug.


Y al enviarlo se envía al correo que nosotros deseemos, estamos falsificando el formulario por medio de firebug.

O también podemos copiar el código HTML de la pagina y editarlo en nuestra maquina y enviarlo en action a esa web, para asegurar el código en ese caso seria checar la cabecera Referer (De donde viene la petición) o validar y filtrar los campos tal y como debe de hacerse, o simplemente declarar en el PHP y no en el formulario las cosas que no son necesarias, este correo podría ser declarado en el PHP como una constante por ejemplo.


Falsificando Solicitudes HTTP

Como vimos en la parte de arriba usamos burp suite estábamos viendo las cabeceras, en este caso podríamos falsificar solicitudes HTTP con el mismo Burp suite usando la acción de repetir la solicitud, pero para no complicarlo lo haremos con el live http headers que esta disponible como complemento para firefox, también existe tamper data...



Un ejemplo fácil y no seria vulnerable, pero si mostramos como podemos falsificar la solicitud HTTP:



Como podemos ver el color elegido fue, el color rojo, podemos falsificar la solicitud dando clic en repetir y poner el color que nosotros queramos aunque no se encuentre en esa lista :)



¿Por que es importante esto de falsificar solicitudes HTTP?, simplemente por que si tenemos datos que enviamos por POST y no los validamos y escapamos correctamente todo eso puede ser editado de la manera que quiera el atacante, y aunque enviemos datos por AJAX (sin que la pagina cargue) podemos ver todas las cabeceras enviando solicitudes HTTP.

Para corregir esto como se ya se dijo en la parte 1 es validar y escapar datos de entrada.

Hasta aqui la parte 2 espero que les haya gustado, nos vemos en la proxima parte, comentarios y criticas constructivas son recibidas :)

Referencias:

Essential PHP Security
Wikipedia
SecurityFocus
Acunetix
W3schools

viernes, 11 de octubre de 2013

[BootStrap] MiniTutorial Parte 2

Tipografía


Para empezar explicando esto debemos darnos cuenta que tipo de tipografía usamos en nuestro CSS de bootstrap.


Como te puedes dar cuenta Usamos la tipografia Helvenica Neue, Helvetica, Arial, Sans-serif ... Esto quiere decir que si en el ordenador donde estas no existe Helvetica Neue entonces utilizara Helvetica y sino Arial asi sucesivamente. Este tipo de letras la incluyen la mayoria de los computadores de hoy en día.
El tamaño de nuestras letras por defecto es de 14px y el espacio entre ellas es de 20px y un color gris a la fuente. Y los párrafos incluyen un margen abajo de 10px.

Encabezados

Los encabezados tienen un estándar para el tamaño de manera que los niveles van desde h1 hasta h6 cada uno tiene su tamaño, que serian los siguientes:

h1 {
  font-size: 38.5px;
}

h2 {
  font-size: 31.5px;
}

h3 {
  font-size: 24.5px;
}

h4 {
  font-size: 17.5px;
}

h5 {
  font-size: 14px;
}

h6 {
  font-size: 11.9px;
}

Una cosa muy interesante es que si agregas la etiqueta small dentro de un encabezado le da un estilo diferente para empezar por el color y que la fuente no sera mas negrita, pero mejor te lo muestro:



Si te das cuenta los encabezados normales solo agregamos un tamaño a la fuente, negrita y también agregamos algunos párrafos para que te dieras cuenta, como le agrega el margen de 10px abajo. Pero cuando usamos la etiqueta small dentro de un encabezado puedes ver como su color cambia, y además le quita la negrita.



También podemos agregarle la clase .lead a nuestro párrafos de manera que cambiara el tamaño, la separación y negrita...

.lead {
  margin-bottom: 20px;
  font-size: 21px;
  font-weight: 200;
  line-height: 30px;
}


Letras pequeñas


Anteriormente vimos que podíamos usar dentro de los encabezados la etiqueta small que lo que hacia era cambiar el color y quitarle la negrita... en caso de que la uses sola, el tamaño de la letra no estará a su 100% sino solo estará a su 85%.

Negritas

Para utilizar negritas no usaremos la etiqueta b sino utilizaremos la etiqueta strong, de esta manera en nuestro bootstrap.css ya viene definido su estilo como negrita.

Itálicas


Al igual que en negritas en una letra itálica no usaremos la etiqueta i sino utilizaremos em por que sus estilos vienen en bootstrap.css

Clases para alinear el texto

 

En bootstrap existen unas clases para alinear nuestro texto, las cuales son:

.text-left - alinea el texto a la izquierda
.text-right - alinea el texto a la derecha
.text-center - alinea el texto al centro

Clases para dar énfasis a nuestro texto



Estas clases son muy utiles ya que le daran un estilo muy lindo a nuestros mensajes informativos, de error, o que se realizaron correctamente...

.muted - agrega un estilo de un color apagado
.text-warning - agrega un estilo de un color como de advertencia
.text-error - agrega un estilo de un color como de error
.text-info - agrega un estilo de un color como de informativo
.text-success - agrega un estilo de un color como de algo que se ha realizado correctamente

En caso de que uses estas clases en enlaces lo que hace es subir un poquito el volumen del color cuando pasas el ratón encima de ellos.

Abreviaciones



La etiqueta abbr sirve para darle abreviación a una palabra para que salga lo que significa agregamos el atributo title donde iría nuestro texto (en bootstrap se le agrega un borde abajo y cuando pasar el ratón sobre encima de el sale un cursor de ayuda) de lo que significa y usaremos una clase llamada .initialism que lo que hará sera agregar nuestra letra en mayúsculas.

Direcciones (localización)



Para mostrar la dirección de algo usamos la etiqueta address que tiene unos estilos como display:block, margen, tamaño de letra y espacio entre lineas.

Bloque de cita



Un bloque de cita se indica para eso mismo para citar alguna palabra que dijo alguien de algo largo solo una parte un bloque, en este caso utilizamos la etiqueta blockquote para ello, en este caso utilizamos small junto a la etiqueta cite para identificar quien es el autor de el texto citado anteriormente.

El blockquote si miras atentamente tiene un borde al lado izquierdo, además de un margen para los párrafos dentro de el, si hay dentro de el una etiqueta small lo muestra en bloque y con un color gris.

También puedes usar la clase .pull-right que alinearía hacia la derecha nuestro texto citado...

blockquote.pull-right {
  float: right;
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
}

Listas ordenadas y  no ordenadas

Si dirán que estamos viendo HTML xD, pues de eso se trata ver como se aplica nuestro CSS a nuestro HTML y los cambios que esta produciendo, no se desesperen si han llegado aqui :P

Las listas ordenadas y no ordenadas no producen mucho efecto solo que como antes habíamos reseteado todo el html entonces bootstrap agrego algunos margenes...




Algo que es muy interesante al crear las listas es que hay dos clases .unstyled que lo que hace es remover el ·  e .inline que lo que hace es mostrarlas en linea.
Estos dos son muy importantes a la hora de poder crear un menu...

Listas de definición



Las listas de definición como su nombre lo dice son para poner algún elemento que quieras definir algo, por ejemplo que es un blogger... donde con la etiqueta dl definimos una lista de definición y con dt el termino de la definicion y con dd la definicion del termino... lo uncio que hace bootstrap en este caso es darle un margen y negrita al termino de la definicion. Otra cosa importante es que tenemos una clase .dl-horizontal que lo que hace es mover horizontalmente el texto de la definicion de manera que se vea mejor formateado.

Código



Hay dos formas de mostrar código con bootstrap utilizando la etiqueta code o también utilizando la etiqueta pre aunque la diferencia mas significativa es que con code el código se muestra en linea agregando un color significativo y con pre se muestra en bloque.


Tablas

Al igual que todas las tablas normales del html podemos tener los siguientes elementos en una tabla:

table - etiqueta que crea la tabla
caption - subtitulo de la tabla
thead - cuerpo de títulos
tbody - cuerpo de la tabla
th -campo de titulo
tr - fila de la tabla
td - campo de la tabla

Con eso dicho hay una clase .table que tiene los estilos básicos para la creación de una tabla.



También tenemos algunas clases para la tabla, de manera que tenga diferentes estilos.

.table-striped - le da color a una fila si y a otra no 1 si y otra no
.table-bordered - le deja a la tabla un borde redondeado
.table-hover - cuando pasas el cursor encima de una fila le da un color de fondo
.table-condensed - no deja separación entre las celdas lo que hace que la fila se vea mas pequeña (condensada)

Veamos un ejemplo utilizando .table-striped:


Recuerda que si no miras mucho la diferencia puedes darle clic a la imagen para verla mas grande.

Otra cosa muy interesante en las tablas es que puedes usar una clase para las filas, las cuales pueden ser las siguientes:



Formularios



Otras de las características muy buenas que incluye bootstrap al igual que las tablas son los formularios que tienen un par de clases la cual puedes crear unos efectos muy lindos.

Como puedes ver ahí en la imagen incluimos algunas clases, pero expliquemos una de las cosas que agrega bootstrap.css en nuestro formulario.

Por ejemplo la etiqueta legend que anteriomente habiamos reseteado ahora contiene un estilo de un borde abajo de un color como gris...

Y los inputs  contienen un color como gris también pero al tomar el foco cambian su color a azul, placeholder es un atributo html que muestra atrás lo que se puede hacer en ese input... (marcador de posición). Además de eso se muestran en bloque de linea y contienen una transición que dura como 2 seg al seleccionar el input de manera que se mire un poco de retraso, otra cosa es que cuando tiene el foco le agrega un box shadow lo que hace que ese color azul se vea como algo único.


.help-block - Es una clase para mostrar ayuda, lo único que hacen en los estilos es darle que se muestre en bloque y su letra algo gris bajo.


.checkbox - Esta clase da un poco de separación por dentro, entre los elementos del checkbox.

.btn - Esta clase de algo de separación, transición, pero algo de lo mas útil es que hace un gradient (inclinación) o una imagen gris con CSS3 es algo muy útil, además de agregar un efecto cuando toma foco.

Formularios opcionales capas

Espero que se acuerden del primer minitutorial de bootstrap donde comentabamos algo acerca de las capas; si leen esto y no han leido lo otro lo entenderan pero se relacionan al verlo.

Formulario de búsqueda



Como su nombre lo dice solo es un formulario para que su estilo gracias a las clases usadas sea como uno de búsqueda y podamos usarlo para nuestra programación back-end, para alguna búsqueda en la base de datos, por ejemplo.

.search-query - lo que hace es redondear los inputs
.form-search - hace que los inputs se muestren inline-block
.input-medium - Le da al input un tamaño de 150px


Formularios en linea

Cuando digo formulario en linea me refiero que los formularios se muestran uno de detrás de otro de manera que están en linea, y no en bloque...



como pueden ver lo único nuevo acá es la clase .form-inline que lo que hace es mostrar el formulario de manera que este en linea como dije anteriormente...
se muestra en una sola linea y lo puedes ver en la imagen anterior.

Formularios horizontales




  Aquí puedes ver los estilos de cada uno de las clases que estamos usando:


Como ves no es nada difícil de interpretar solo vemos que los elementos se acomodan como deben de ser. Gracias a las clases aplicadas.


Controles de formularios soportados


Bootstrap soporta los controles mas usados, como son:
input, textarea, checkbox, radio y select.
Y no solo esos sino que además también soporta los controles de HTML5:
datetime, datetime-local, date, month, time, week, number, email, url, search, tel y color.

input



El input text es el mas usado, una de las características de estos es que incluye un resplandor azul al obtener el foco o estar activo.

textarea



El textarea es uno de los mas usados, ya que se usa para cuando necesitas escribir múltiples lineas, no cambia mucho los estilos.

Checkbox y botones de radio







Con checkbox y botones de radio tu puedes elegir una opcion dentro de la lista de opciones, cuando creas checkbox puedes seleccionar varias opciones en una lista, pero cuando creas un boton de radio puedes seleccionar solo 1 opcion dentro de toda la lista.

Como puedes ver en la imagen anterior, usamos algunas clases en los labels, como son la clase .checkbox que habiamos visto mas atras y la clase .radio, estas clases lo unico que hacen es darle margen y hacer que se muestren en bloque...



Otra cosa es que por ejemplo podríamos usar la clase .inline para formar una fila de checkbox de los cuales elegir varias opciones.

selects



Los selects son cuando quieres poner demasiadas o varias opciones, lo puedes usar, pero si quieres usar y seleccionar mas de 1 sola opción necesitas utilizar el atributo multiple.

Controles de formulario extendidos

Ademas de los formularios comunes, bootstrap te ofrece unos complementos para los formularios.

Campos de entrada adjunto y antepuesto



.add-on - agrega un pequeño estilo parecido al del boton (.btn)
.input-prepend - junto a la clase add-on decide agregándolo al principio el pequeño botón (el estilo)
.input-append  -  junto a la clase add-on decide agregándolo al final el pequeño botón (el estilo)


Si ves la imagen de arriba el @ y el .00 son los que estan en la clase add-on y acada uno de ellos estan en sus capas que tienen sus clases input-prepend e input-append.

De hecho puedes combinarlos tanto como quieras:




Tamaño de los controles del formulario



En bootstrap podemos usar unas clases que nos darán un tamaño predeterminado para los inputs de manera que le podemos dar un mejor estilo o el tamaño que gustemos a cada input.


no creo que sea necesario explicar como se usa la clase en un input pero por si acaso: <input class="acavalaclase" />



No solo podemos usar estas clases, no se si te acuerdas del sistema cuadricula? de la primera parte de bootstrap, bueno pues usaremos las mismas clases solo que se aplican a inputs y textarea... y a cada una tiene su tamaño...




Como puedes ver .span12 es el mayor y .span1 el menor puedes ver la imagen de arriba como referencia. No solo puedes usarlo en inputs sino tambien en selects,textarea,etc.

Texto que no puede ser editado



Una forma de dar un estilo donde tendrías un input con un texto que no puede ser editado es usando la clase .uneditable-input. Con el cual si pasas el ratón encima de el se pondrá una flechita de stop (alto,para) indicando que no puede ser editado.

Formulario de acciones


El formulario de acciones es un formulario como su nombre lo dice que podriamos poner acciones tales como Cancelar, Enviar, Guardar, Reestablecer...



.form-actions - da unas separaciones, margenes, color de fondo, borde, y otra cosa es que muestra el contenido en table...

.btn-primary - da ese efecto de azul al botón lo mismo cuando le pasas el botón encima, gracias a esta clase el botón cambia y es la manera de decir que podría ser un botón primario que se diferencia de los demás.

Texto de ayuda


.help-inline - muestra un texto de ayuda en linea (me refiero a su formato) es decir, en una sola linea

.help-block - muestra un texto de ayuda en bloque

Campo de entrada desabilitado



El atributo disabled podemos ver como le da un color y el cursor cambia su forma de manera que indica que ese input no puede ser cambiado.

Entradas de validación

Este tipo de cosas aunque no lo creas son de las mas usadas en una pagina web, como antes vimos con el texto también podía tomar diferentes color dependiendo de la situación (error,warning,info,success) es lo mismo con los inputs.






La mayoria de las cosas ya las habiamos visto, los divs esos agrupan cada input, y le aplicamos su clase dependiendo del estado hay un color.
No solo podemos aplicar un estado de esta manera podriamos usar alguna pseudoclase del css, por ejemplo:



Como puedes ver en el ejemplo, cuando el email esta mal el input lo muestra en rojo, pero cuando esta bien lo muestra en azul. Esto tambien lo podemos modificar nosotros mismos que tal si quisieramos un verde cuando este bien?

agregamos nuestro propio estilo, y listo.

Botones

Las siguientes clases no solo pueden ser aplicadas en los botones sino tambien en los enlaces.

Como puedes ver solo es cuestion de aplicar estas clases, a nuestro boton con lo cual le daremos unos efectos muy vistosos, como los que estan viendo, algunos que se usan para indicar una determinada accion.

Tamaño de los botones

Al igual que en los inputs podemos darle unas clases para modificar el tamaño de nuestros botones (buttons).

Como puedes ver en la imagen tenemos diferentes clases para los tamaños.

.btn-large - para un boton largo
.btn-small - para un boton pequeño
.btn-mini - para un boton mas pequeño

Otra cosa que podemos hacer con los botones es mostrarlos en bloque, usando la clase .btn-block con lo cual toma todo el ancho de la pagina:


Deshabilitar botón (estilos)

Veamos como cambian los estilos cuando usamos la clase .disabled


Como puedes ver lo que mas se nota es como agrega la opacidad al boton.

Imágenes



Otra de las cosas que dan mucho efecto son las clases de las imagenes:

.img-rounded - agrega un border radius de 6px en cada esquina
.img-circle - redondea completamente una imagen
.img-polaroid - agrega un pequeño borde con el cual parece un cuadro

Iconos



Bootstrap tiene 140 iconos en un sprite, sino sabes que son los sprites puedes ver este tema:
http://arthusu.blogspot.mx/2013/09/css-sprites-en-imagen-w3schools.html

Estos iconos han sido proporcionados por: http://glyphicons.com/


una manera de utilizar estos iconos son con las clases que vienen a su lado...
para ello usamos la etiqueta i...



Como puedes ver usamos una clase .btn-toolbar es una barra de herramientas de botones, la cual da algunos margenes. y .btn-group con la cual agrupamos los enlaces de los botones la cual tambien incluye unos margenes.
Lo importante en estos casos es como agregamos los iconos usando la etiqueta i.

Navegación



.nav y nav-list - da unos margenes para que se vea como una lista de navegacion
.active - hace que el enlace se vea con fondo azul como que esta activo
i class="clasedelicono" - le pone el icono como una imagen sprite


Hasta aqui ha llegado la segunda parte de este minitutorial nos vemos en la tercera parte espero traerle un poco mas de sorpresas, muchos diran estamos aprendiendo HTML y CSS a la ves, pues eso es algo que podria decirse correcto en si, bootstrap lo unico que hace es facilitarnos todo este proceso.

Version PDF Online

Descargar PDF

Referencias:

http://getbootstrap.com