miércoles, 28 de febrero de 2018

FORMULARIOS EN HTML5

Los elementos y atributos para formularios en HTML5 proveen un mayor grado de marcado semántico que en HTML4 y eliminan gran parte del tedioso trabajo de programar y diseñar que se necesitaba en HTML4. Las funcionalidades de los formularios en HTML5 brindan una experiencia mejor para los usuarios al permitir que los formularios tengan un comportamiento más consistente entre diferentes sitios web y al darle una devolución inmediata acerca de la información ingresada. También proveen esta experiencia a los usuarios que han deshabilitado javascript en sus navegadores.
Este documento describe los elementos nuevos o que han cambiado que están disponibles en Gecko/Firefox.

El elemento <input>

 

El elemento <input> tiene nuevos valores para el atributo type.
  • search: El elemento representa una caja de búsqueda. Los saltos de línea son quitados del valor ingresado pero no se modifica ninguna otra sintaxis.
  • tel: El elemento representa un control para editar un número de teléfono, porque los números teléfonicos varían ampliamente en el mundo. Puedes usar atributos como pattern y maxlength para restringir los valores ingresados en la caja.
  • url: El elemento representa un control para editar una URL. Se quitan los saltos de línea y espacios en blanco antes y después del valor ingresados.
  • email: El elemento representa una dirección de correo electrónico. Los saltos de línea se quitan automáticamente del valor ingresado. Puede ingresarse una direccón de correo no válida, pero el campo de ingreso sólo funcionará si la dirección ingresada satisface la producción ABNF 1*( atext / "." ) "@" ldh-str 1*( "." ldh-str ) donde atext está definida en RFC 5322, sección 3.2.3 y ldh-str está definida en RFC 1034, sección 3.5.
    Nota: si el atributo multiple está agregado, pueden ingresarse muchas direcciones de correo electrónico en ese campo <input>, como una lista separada por espacios, pero no está implementado actualmente en Firefox.
El elemento <input> también tiene nuevos atributos:
  • list: El ID de un elemento <datalist> cuyo contenido, los elementos <option>, van a ser usados como ayudas y serán mostrados como propuestas en el área de sugerencias del campo input.
  • pattern: Una expresión regular contra la que es verificado el valor del control, que puede ser usada con valores de type de text, tel, search, url y email.
  • formmethod: Una cadena que indica qué método HTTP (GET, POST, PUT o DELETE) debe ser usado cuando se envía; sobrescribe el method del elemento <form>, si se define. El formmethod sólo se aplica cuando el type es image o submit, y, para los métodos PUT y DELETE, sólo funcionará con un destino que esté en el mismo dominio (política del mismo origen).

El elemento <form>


El elemento <form> tiene un nuevo atributo:
  • novalidate: Este atributo previene que el formulario sea validado antes del envío.

El elemento <datalist>


El elemento <datalist> representa la lista de elementos <option> como sugerencias cuando se llena un campo <input>.
Puedes usar el atributo list en un elemento <input> para enlazar a un campo de ingreso específico con un elemento <datalist> determinado.

<label>Superhéroe favorito</label>
<input list="superheroes" name="list" />
<datalist id="superheroes">
    <option label="Iron Man" value="Iron Man">
    <option label="The Hulk" value="The Hulk">
</datalist>

El elemento <Output>


El elemento <output> representa el resultado de un cálculo.
Puedes usar el atributo for para especificar una relación entre el elemento output y otros elementos en el documento que afectan el cálculo (por ejemplo, ingreso de datos o parámetros). El valor del atributo for es una lista separada por espacios de IDs de otros elementos.

El atributo placeholder


El atributo placeholder en elementos <input> y <textarea> provee una ayuda a los usuarios acerca de qué debe ser ingresado en el campo. El texto introducido en el placeholder no debe contener «enters» o saltos de línea.

<input type="email" id="user-email" placeholder="e.g. john.doe@mozilla.com" 
required/>

El atributo autofocus


El atributo autofocus te permite especificar que una parte del formulario debe tener foco para ingresar información cuando se carga la página, a menos que el usuario lo cambie, por ejemplo al escribir en otro lugar. Sólo un elemento del formulario en un documento puede tener el atributo autofocus, que es de tipo boolean. Este atributo puede ser aplicado a los elementos <input>, <button>, <select> y <textarea>. La excepción es que autofocus no puede ser aplicado a un elemento <input> si el atributo type hidden está seleccionado (esto quiere decir, no se puede enfocar automáticamente un elemento escondido).

<input type="text" id="user" autofocus />

La propiedad label.control del DOM


La interface HTMLLabelElement DOM brinda una propiedad extra, sumadas a las propiedades que corresponden a los atributos del elemento <label> de HTML. La propiedad control devuelve el controlador etiquetado, es decir el controlador para quien está hecha la etiqueta, que está determinado por el atributo for (si está definido) o por el primer elemento controlador descendiente.

Validación restringida


El HTML5 brinda sintaxis y elementos de API para posibilitar la validación de formularios del lado del cliente. Aunque esta funcionalidad no reemplaza la validación del lado del servidor, que todavía es necesaria por seguridad e integridad de la información, la validación del lado del cliente puede brindar una experiencia de usuario mejor al darle al usuario una respuesta inmediata acerca de la información ingresada.

Sintaxis de HTML para la validación restringida


Los siguientes elementos de sintaxis de HTML5 pueden ser usados para restringir datos en el formulario.
  • El atributo required en los elementos <input>, <select> y <textarea> indica que se debe ingresar algún dato. (En el elemento <input>, required sólo se aplica con ciertos valores del atributo type.)
  • El atributo pattern en el elemento <input> restringe el valor para que concuerde con una expresión regular específica.
  • Los atributos min y max del elemento <input> restringen los valores máximos y mínimos que pueden ser ingresados.
  • El atributo step del elemento <input> (cuando se usa en combinación con los atributos min y max) restringe la granularidad de los valores ingresados. Un valor que no se corresponda con un valor permitido no será validado.
  • El atributo maxlength de los elementos <input> y <textarea> restringe el máximo número de caracteres (en puntos de código unicode) que el usuario puede ingresar.
  • Los valores url y email para type restringen el valor para una URL o dirección de correo válida respectivamente.
Además, puedes prevenir la validación restringida especificando el atributo novalidate en el elemento <form>, o el atributo formnovalidate en el elemento <button> y en el elemento <input> (cuando type es submit o image). Estos atributos indican que el formulario no será validado cuando se envie.

API de validación restringida


Las siguientes propiedades y métodos del DOM relacionadas con la validación restringida están disponibles para scripts del lado del cliente:
  • En objetos HTMLFormElement, el método checkValidity(), que devuelve verdadero si todos los elementos asociados del formulario que necesitan validación satisfacen las restricciones y falso si no lo hacen.
  • En elementos asociados al formulario:
    • la propiedad willValidate, que es falso si el elemento no satisface las restricciones.
    • la propiedad validity, que es un objeto ValidityState que representa los estados de validación en que está el elemento (p.e., condiciones de restricción que han fallado o exitosas).
    • la propiedad validationMessage, que es un mensaje que contiene todas las fallas en las restricciones que pertenecen a ese elemento.
    • el método checkValidity(), que devuelve falso si el elemento falla en satisfacer alguna de las restricciones o verdadero si pasa lo contrario.
    • el método setCustomValidity(), que establece un mensaje de validación personalizado, permitiendo imponer y validad restricciones más allá de las que están predefinidas.

domingo, 25 de febrero de 2018

E-mail links

Es posible crear enlaces o botones que, cuando se hace clic en ellos, abren un nuevo mensaje de correo electrónico saliente en lugar de vincularlo a un recurso o página. Esto se hace usando el elemento <a> y el esquema mailto: URL.

En su forma más básica y comúnmente utilizada, un enlace mailto: simplemente indica la dirección de correo electrónico del destinatario deseado. Por ejemplo:

 
<a href="mailto:nowhere@mozilla.org">Send email to nowhere</a>

Esto da como resultado un enlace que se ve así: Send email to nowhere.


De hecho, la dirección de correo electrónico es incluso opcional. Si lo deja de lado (es decir, su href es simplemente "mailto:"), el cliente de correo del usuario que no tenga una dirección de destino especificada abrirá una nueva ventana de correo electrónico de salida. Esto a menudo es útil como enlaces de "Compartir" en los que los usuarios pueden hacer clic para enviar un correo electrónico a la dirección que elijan.


Especificando detalles

Además de la dirección de correo electrónico, puede proporcionar otra información. De hecho, cualquier campo de encabezado de correo estándar se puede agregar a la URL de mailto que proporcione. Los más utilizados son "subject", "cc" y "body" (que no es un campo de encabezado verdadero, pero le permite especificar un breve mensaje de contenido para el nuevo correo electrónico). Cada campo y su valor se especifica como un término de consulta.

Aquí hay un ejemplo que incluye un cc, bcc, subject y body:
 


<a href="mailto:nowhere@mozilla.org?cc=name2@rapidtables.com&bcc=
  name3@rapidtables.com&subject=The%20subject%20of%20the%20email&body= 
The%20body%20of%20the%20email">
  Send mail with cc, bcc, subject and body
</a>

Nota: Los valores de cada campo deben estar codificados con URL, es decir, con caracteres que no sean de impresión (caracteres invisibles como pestañas, retornos de carro y saltos de página) y espacios con porcentaje de escape. También tenga en cuenta el uso del signo de interrogación (?) Para separar la URL principal de los valores de campo, y los símbolos ampersands (&) para separar cada campo en el mailto: URL. Esta es la notación de consulta URL estándar. Lea el método GET para comprender para qué se utiliza la notación de consulta de URL más comúnmente.  

Fuente https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks#E-mail_links

sábado, 24 de febrero de 2018

ENVÍO DE DATOS DE FORMULARIO



Este artículo analiza lo que sucede cuando un usuario envía un formulario: ¿a dónde van los datos y cómo lo manejamos cuando llega? También analizamos algunas de las inquietudes de seguridad asociadas con el envío de datos del formulario.

Requisitos previos: alfabetización básica en informática, comprensión de HTML y conocimiento básico de HTTP y programación del lado del servidor.
Objetivo: comprender qué sucede cuando se envían los datos del formulario, incluida la obtención de una idea básica de cómo se procesan los datos en el servidor

¿A dónde van los datos?

Aquí discutiremos qué sucede con los datos cuando se envía un formulario.
La web se basa en una arquitectura cliente / servidor muy básica que se puede resumir de la siguiente manera: un cliente (generalmente un navegador web) envía una solicitud a un servidor (la mayoría de las veces un servidor web como Apache, Nginx, IIS, Tomcat, etc.), usando el protocolo HTTP. El servidor responde la solicitud utilizando el mismo protocolo.



En el lado del cliente, un formulario HTML no es más que una forma conveniente y fácil de usar para configurar una solicitud HTTP para enviar datos a un servidor. Esto permite al usuario proporcionar información para ser entregada en la solicitud HTTP.
Nota: Para tener una mejor idea de cómo funcionan las arquitecturas cliente-servidor, lea el módulo de primeros pasos de programación del lado del servidor.

Del lado del cliente: definir cómo enviar los datos

El elemento <form> define cómo se enviarán los datos. Todos sus atributos están diseñados para permitirle configurar la solicitud que se enviará cuando un usuario presione un botón de enviar. Los dos atributos más importantes son action y method.

El atributo action

Este atributo define dónde se envían los datos. Su valor debe ser una URL válida. Si no se proporciona este atributo, los datos se enviarán a la URL de la página que contiene el formulario.
En este ejemplo, los datos se envían a una URL absoluta - http://foo.com:
<fom action="http://foo.com">
Aquí, usamos una URL relativa: los datos se envían a una URL diferente en el servidor:
<fom action="/somewhere_else">
Cuando se especifica sin atributos, como se muestra a continuación, los datos de <form> se envían a la misma página donde está presente el formulario:
<form>
Muchas páginas anteriores usan la siguiente notación para indicar que los datos deben enviarse a la misma página que contiene el formulario; esto fue necesario porque hasta HTML5, se requería el atributo de acción. Esto ya no es necesario.
<form action="#">
Nota: Es posible especificar una URL que utiliza el protocolo HTTPS (HTTP seguro). Cuando hace esto, los datos se cifran junto con el resto de la solicitud, incluso si el formulario en sí está alojado en una página insegura a la que se accede mediante HTTP. Por otro lado, si el formulario está alojado en una página segura pero especifica una URL HTTP insegura con el atributo de acción, todos los navegadores muestran una advertencia de seguridad al usuario cada vez que intentan enviar datos porque los datos no se cifrarán.

El atributo method

Este atributo define cómo se envían los datos. El protocolo HTTP proporciona varias formas de realizar una solicitud; Los datos del formulario HTML pueden transmitirse a través de varios diferentes, los más comunes son el método GET y el método POST.

Para entender la diferencia entre esos dos métodos, retrocedamos y examinemos cómo funciona HTTP. Cada vez que desee llegar a un recurso en la Web, el navegador envía una solicitud a una URL. Una solicitud HTTP consta de dos partes: un encabezado que contiene un conjunto de metadatos globales sobre las capacidades del navegador y un cuerpo que puede contener la información necesaria para que el servidor procese la solicitud específica.

El método GET

El método GET es el método utilizado por el navegador para pedirle al servidor que le devuelva un recurso determinado: "Hola, servidor, quiero obtener este recurso". En este caso, el navegador envía un cuerpo vacío. Como el cuerpo está vacío, si se envía un formulario con este método, los datos enviados al servidor se anexan a la URL.

Considere la siguiente forma:
<form action="http://foo.com" method="get">
  <div>
    <label for="say">What greeting do you want to say?</label>
    <input name="say" id="say" value="Hi">
  </div>
  <div>
    <label for="to">Who do you want to say it to?</label>
    <input name="to" value="Mom">
  </div>
  <div>
    <button>Send my greetings</button>
  </div>
</form>

Dado que se ha utilizado el método GET, verá que la URL www.foo.com/?say=Hi&to=Mom aparece en la barra de direcciones del navegador cuando envía el formulario.
Los datos se anexan a la URL como una serie de pares nombre/valor. Después de que la dirección web de la URL haya finalizado, incluimos un signo de interrogación (?) Seguido de los pares nombre/valor, cada uno separado por un símbolo comercial (&). En este caso, estamos pasando dos datos al servidor:

    - say, que tiene un valor de Hi
    - to, que tiene un valor de Mom

La solicitud HTTP se ve así:
GET /?say=Hi&to=Mom HTTP/1.1
Host foo.com

Puede encontrar este ejemplo en GitHub - get-method.html

El método POST

El método POST es un poco diferente. Es el método que utiliza el navegador para comunicarse con el servidor cuando solicita una respuesta que tenga en cuenta los datos proporcionados en el cuerpo de la solicitud HTTP: "Hola, servidor, eche un vistazo a estos datos y envíeme un resultado apropiado". Si se envía un formulario utilizando este método, los datos se anexan al cuerpo de la solicitud HTTP.

Veamos un ejemplo: esta es la misma forma que vimos en la sección GET anterior, pero con el atributo method establecido en POST.
<form action="http://foo.com" method="post">
  <div>
    <label for="say">What greeting do you want to say?</label>
    <input name="say" id="say" value="Hi">
  </div>
  <div>
    <label for="to">Who do you want to say it to?</label>
    <input name="to" value="Mom">
  </div>
  <div>
    <button>Send my greetings</button>
  </div>
</form>
Cuando el formulario se envía utilizando el método POST, no obtiene datos agregados a la URL, y la solicitud HTTP se ve así, con los datos incluidos en el cuerpo de la solicitud en su lugar:
 
POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

say=Hi&to=Mom
 
El encabezado Content-Length indica el tamaño del cuerpo y el encabezado Content-Type indica el tipo de recurso enviado al servidor. Discutiremos estos encabezados más adelante.
Nota: Puede encontrar este ejemplo en GitHub - post-method.html 

Ver solicitudes HTTP

Las solicitudes HTTP nunca se muestran al usuario (si desea verlas, debe usar herramientas como Firefox Network Monitor o Chrome Developer Tools). Como ejemplo, los datos de su formulario se mostrarán de la siguiente manera en la pestaña Red de Chrome:

 Lo único que se muestra al usuario es la URL llamada. Como mencionamos anteriormente, con una solicitud GET el usuario verá los datos en su barra de URL, pero con una solicitud POST no lo harán. Esto puede ser muy importante por dos razones:

  1.  Si necesita enviar una contraseña (o cualquier otro dato sensible), nunca use el método GET o corre el riesgo de mostrarlo en la barra de URL, lo que sería muy inseguro.
 2.   Si necesita enviar una gran cantidad de datos, se prefiere el método POST porque algunos navegadores limitan el tamaño de las URL. Además, muchos servidores limitan la longitud de las URL que aceptan.

En el lado del servidor: recuperar los datos

Sea cual sea el método HTTP que elija, el servidor recibe una cadena que se analizará para obtener los datos como una lista de pares clave / valor. La forma de acceder a esta lista depende de la plataforma de desarrollo que utilice y de los marcos específicos que pueda usar con ella. La tecnología que utiliza también determina cómo se manejan las claves duplicadas; a menudo, el valor recibido más recientemente para una clave dada tiene prioridad.

Ejemplo:  Raw PHP

PHP ofrece algunos objetos globales para acceder a los datos. Suponiendo que haya utilizado el método POST, el siguiente ejemplo simplemente toma los datos y los muestra al usuario. Por supuesto, lo que hagas con los datos depende de ti. Puede mostrarlo, almacenarlo en una base de datos, enviarlo por correo electrónico o procesarlo de alguna otra manera.
<?php
  // The global $_POST variable allows you to access the data sent with the 
  // POST method by name
  // To access the data sent with the GET method, you can use $_GET
  $say = htmlspecialchars($_POST['say']);
  $to  = htmlspecialchars($_POST['to']);

  echo  $say, ' ', $to;
?>
Este ejemplo muestra una página con los datos que enviamos. Puede ver esto en acción en nuestro ejemplo de archivo php-example.html, que contiene el mismo formulario de ejemplo que vimos anteriormente, con un méthod POST y una action de php-example.php en nuestro ejemplo anterior. Cuando se envía, envía los datos del formulario a php-example.php, que contiene el código PHP que se ve en el bloque anterior. Cuando se ejecuta este código, la salida en el navegador es Hi Mom.

Nota: Este ejemplo no funcionará cuando lo cargue localmente en un navegador: los navegadores no pueden interpretar el código PHP, de modo que cuando se envíe el formulario, el navegador solo ofrecerá descargar el archivo PHP por usted. Para que funcione, necesita ejecutar el ejemplo a través de un servidor PHP de algún tipo. Buenas opciones para las pruebas locales de PHP son MAMP (Mac y Windows) y AMPPS (Mac, Windows, Linux).

Ejemplo: Python

Este ejemplo muestra cómo usaría Python para hacer lo mismo: mostrar los datos enviados en una página web. Utiliza el  Flask framework para representar las plantillas, gestionar el envío de datos de formulario, etc. (ver python-example.py).
from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def form():
    return render_template('form.html')

@app.route('/hello', methods=['GET', 'POST'])
def hello():
    return render_template('greeting.html', say=request.form['say'], 
      to=request.form['to'])

if __name__ == "__main__":
    app.run()

Las dos plantillas a las que se hace referencia en el código anterior son las siguientes:

 form.html: la misma forma que vimos anteriormente en la sección del método POST, pero con la acción establecida en {{url_for ('hello')}}. (Esta es una plantilla Jinja2, que es básicamente HTML pero puede contener llamadas al código Python que ejecuta el servidor web contenido entre llaves) url_for ('hello') básicamente dice "redirigir a / hello cuando se envía el formulario" .)
 greeting.html: esta plantilla solo contiene una línea que representa los dos bits de datos que se le pasan cuando se procesa. Esto se realiza a través de la función hello () que se muestra arriba, que se ejecuta cuando se navega a / hello URL.
Nota: De nuevo, este código no funcionará si solo intenta cargarlo en un navegador directamente. Python funciona de manera diferente a PHP: para ejecutar este código localmente, necesitarás instalar Python / PIP, luego instalar pip3 install Flask. En este punto, debería poder ejecutar el ejemplo usando python3 python-example.py, luego navegando a localhost: 5000 en su navegador.

Otros lenguajes y frameworks

Hay muchas otras tecnologías del lado del servidor que puede usar para el manejo de formularios, como Perl, Java, .Net, Ruby, etc. Simplemente elija la que más le guste. Dicho esto, vale la pena señalar que es muy poco común usar estas tecnologías directamente porque esto puede ser complicado. Es más común usar uno de los muchos frameworks que facilitan el manejo de formularios, como:

    Symfony para PHP
    Django para Python (un poco más pesado que Flask, pero con más herramientas y opciones).
    Express para Node.js
    Ruby On Rails para Ruby
    Grails para Java
    etc.

Vale la pena señalar que incluso utilizando estos frameworks, trabajar con formularios no es necesariamente fácil. Pero es mucho más fácil que tratar de escribir todas las funciones desde cero y le ahorrará mucho tiempo.

Nota: está más allá del alcance de este artículo enseñarle cualquier lenguajes o frameworks del lado del servidor. Los enlaces de arriba le brindarán ayuda, en caso de que desee aprenderlos.

Un caso especial: envío de archivos

El envío de archivos con formularios HTML es un caso especial. Los archivos son datos binarios, o considerados como tales, mientras que todos los demás datos son datos de texto. Debido a que HTTP es un protocolo de texto, existen requisitos especiales para manejar datos binarios.

El atributo enctype

Este atributo le permite especificar el valor del encabezado HTTP Content-Type incluido en la solicitud generada cuando se envía el formulario. Este encabezado es muy importante porque le dice al servidor qué tipo de datos se envían. Por defecto, su valor es application/x-www-form-url-encoded. En términos humanos, esto significa: "Esto es información de formulario codificada en parámetros de URL".

Si desea enviar archivos, debe realizar tres pasos adicionales:

-  Establezca el atributo method en POST porque el contenido del archivo no puede colocarse dentro de los parámetros de URL.
 -  Establezca el valor de enctype en multipart/form-data porque los datos se dividirán en varias partes, una para cada archivo más una para los datos de texto incluidos en el cuerpo del formulario (si el texto también se ingresa en el formulario).
 -  Incluya uno o más widgets de file-picker para permitir que los usuarios seleccionen los archivos que se cargarán.
Por ejemplo:
<form method="post" enctype="multipart/form-data">
  <div>
    <label for="file">Choose a file</label>
    <input type="file" id="file" name="myFile">
  </div>
  <div>
    <button>Send the file</button>
  </div>
</form>

Nota: Algunos navegadores admiten el atributo multiple en el elemento <input>, que permite elegir más de un archivo para cargar con solo un elemento <input>. Cómo maneja el servidor esos archivos realmente depende de la tecnología utilizada en el servidor. Como se mencionó anteriormente, usar un framework hará su vida mucho más fácil.

Advertencia: Muchos servidores están configurados con un límite de tamaño para archivos y solicitudes HTTP para evitar abusos. Es importante verificar este límite con el administrador del servidor antes de enviar un archivo.

Problemas comunes de seguridad

Cada vez que envía datos a un servidor, debe considerar la seguridad. Los formularios HTML son, con diferencia, los vectores de ataque más comunes (lugares donde pueden ocurrir ataques) contra servidores. Los problemas nunca provienen de los propios formularios HTML; provienen de cómo el servidor maneja los datos.

Dependiendo de lo que esté haciendo, hay algunos problemas de seguridad muy conocidos con los que se enfrentará:

XSS y CSRF

Cross-Site Scripting (XSS) y Cross-Site Request Forgery (CSRF) son tipos comunes de ataques que ocurren cuando muestra datos enviados por un usuario al usuario o a otro usuario.

XSS permite a los atacantes inyectar el script del lado del cliente en páginas web vistas por otros usuarios. Los atacantes pueden usar una vulnerabilidad de secuencias de comandos entre sitios para eludir los controles de acceso, como la misma política de origen. El efecto de estos ataques puede variar desde una molestia menor a un riesgo de seguridad significativo.

Los ataques CSRF son similares a los ataques XSS ya que comienzan de la misma manera, al inyectar secuencias de comandos del lado del cliente en las páginas web, pero su objetivo es diferente. Los atacantes de CSRF intentan escalar los privilegios a los de un usuario de mayor privilegio (como un administrador de sitio) para realizar una acción que no deberían poder realizar (por ejemplo, enviar datos a un usuario que no es de confianza).

Los ataques XSS explotan la confianza que un usuario tiene en un sitio web, mientras que los ataques CSRF explotan la confianza que un sitio web tiene para sus usuarios.

Para evitar estos ataques, siempre debe verificar los datos que un usuario envía a su servidor y (si necesita mostrarlos) intente no mostrar el contenido HTML tal como lo proporciona el usuario. En su lugar, debe procesar los datos proporcionados por el usuario para que no los muestre al pie de la letra. Casi todos los frameworks en el mercado actual implementan un filtro mínimo que elimina los elementos HTML <script>, <iframe> y <object> de los datos enviados por cualquier usuario. Esto ayuda a mitigar el riesgo, pero no necesariamente lo erradica.

Inyección SQL

La inyección SQL es un tipo de ataque que intenta realizar acciones en una base de datos utilizada por el sitio web objetivo. Esto generalmente implica el envío de una solicitud SQL con la esperanza de que el servidor la ejecute (generalmente cuando el servidor de aplicaciones intenta almacenar datos enviados por un usuario). Este es en realidad uno de los principales vectores de ataque contra sitios web.

Las consecuencias pueden ser terribles, desde la pérdida de datos hasta ataques que toman el control de la infraestructura de un sitio web completo mediante el uso de escalada de privilegios. Esta es una amenaza muy seria y nunca debe almacenar datos enviados por un usuario sin realizar una desinfección (por ejemplo, al usar mysql_real_escape_string () en una infraestructura PHP/MySQL).

Inyección de encabezado HTTP e inyección de correo electrónico

Este tipo de ataques pueden ocurrir cuando su aplicación genera encabezados HTTP o correos electrónicos basados ​​en los datos ingresados ​​por un usuario en un formulario. Esto no dañará directamente su servidor ni afectará a sus usuarios, pero son una puerta abierta a problemas más profundos, como el secuestro de sesiones o los ataques de phishing.

Estos ataques son en su mayoría silenciosos, y pueden convertir tu servidor en un zombie.
Sé paranoico: nunca confíes en tus usuarios

Entonces, ¿cómo luchas contra estas amenazas? Este es un tema mucho más allá de esta guía, pero hay algunas reglas para tener en cuenta. La regla más importante es: nunca confíes en tus usuarios, incluyéndote a ti; incluso un usuario de confianza podría haber sido secuestrado.

Todos los datos que llegan a su servidor deben ser revisados ​​y desinfectados. Siempre. Sin excepción.
1. Escapa de personajes potencialmente peligrosos. Los caracteres específicos con los que debe tener precaución varían según el contexto en el que se usan los datos y la plataforma del servidor que emplea, pero todos los idiomas del lado del servidor tienen funciones para esto.
2. Limite la cantidad de datos entrantes para permitir solo lo que sea necesario.
3. Archivos cargados Sandbox (almacénelos en un servidor diferente y permita el acceso al archivo solo a través de un subdominio diferente o incluso mejor a través de un nombre de dominio completamente diferente).

Debería evitar muchos/la mayoría de los problemas si sigue estas tres reglas, pero siempre es una buena idea obtener una revisión de seguridad realizada por un tercero competente. No suponga que ha visto todos los posibles problemas.

Nota: El artículo de seguridad del sitio web de nuestro tema de aprendizaje del lado del servidor analiza las amenazas anteriores y las posibles soluciones con más detalle.

Conclusión

Como puede ver, enviar datos de formulario es fácil, pero asegurar una aplicación puede ser complicado. Solo recuerde que un desarrollador front-end no es quien debe definir el modelo de seguridad de los datos. Sí, como veremos, es posible realizar la validación de los datos del lado del cliente, pero el servidor no puede confiar en esta validación porque no tiene forma de saber realmente qué sucede realmente en el lado del cliente.


fuente: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_and_retrieving_form_data

miércoles, 14 de febrero de 2018

REGISTROS DNS



  ¿Que son los DNS y que registros existen?
Cuando buscamos una web por internet, ésta se carga gracias a unas direcciones IP que localizan los dispositivos que contienen dicha página. Hoy en día, casi nos cuesta recordar el número de nuestro teléfono móvil, así que recordar esta serie de números separados por puntos no es muy práctico, así que los servidores utilizan nombres de dominios que resultan más sencillos de recordar. Para traducir estos nombres de dominios en direcciones IP, están las DNS.
Los servidores DNS guían la información de manera que indican hacia qué servidor se debe encaminar la consulta para poder mostrar la información que se ha pedido, o marcan la ruta de un correo electrónico hacia su destino.

¿Qué tipo de registros existen y para qué sirven?
El lugar donde se configuran las entradas DNS para cada dominio son los servidores de nombres. Los diferentes tipos de entradas de registro son:
  • Registro A: Este registro se utiliza para convertir nombres de host en direcciones IP.
  • Registro CNAME: Se utiliza para crear nombres de host adicionales (alias), y para crear diferentes servicios bajo una misma dirección IP.
  • Registro NS: indica los servidores de DNS autorizados para el dominio, es decir, a quién hay que preguntar para saber acerca de los registros de midominio.com.
  • Registro MX: Se utiliza para asociar un nombre de dominio a una lista de servidores de correo para la recepción de emails. Nos interesa si queremos realizar redirecciones de nuestro correo o utilizar nuestro correo electrónico con otro proveedor.
  • Registro SPF: define qué servidores están autorizados para enviar correo electrónico con nuestro dominio.
Configurando adecuadamente estos registros podemos exprimir al máximo todas las funcionalidades que poseen las DNS de nuestro dominio.
  
Información obtenida de https://www.hostinet.com

LAS DIRECCIONES IP Y EL SISTEMA DE NOMBRES DE DOMINIO

Una dirección IP identifica un ordenador o cualquier otro dispositivo de red, como un router o switch, en Internet. Cualquier dispositivo que se conecta a Internet, ya sea un ordenador, una tableta o un teléfono móvil, tiene asignada una dirección IP. En la actualidad existen dos sistemas de direccionamiento, dos conjuntos de direcciones IP, IPv4 e IPv6.
Las direcciones IPv4 se expresan por un número binario de 32 bits, permitiendo un espacio de direcciones de hasta 4.294.967.296. Todo esto seguramente te suena a chino pero lo que quizás no te suenan a chino son números como estos, alguna vez lo habrás visto en tu
ordenador o en tu teléfono móvil. ¡Esto son direcciones IP, representadas de una forma más fácil de entender para nosotros los humanos! Quizás pensarás que este número es muy grande, que es suficiente para asignar una dirección IP a cada dispositivo actual que se conecta a Internet, pero no es así. ¡Este número se ha quedado muy pequeño, así que se ha tenido que ampliar! Para eso se ha desarrollado IPv6.
Las direcciones IPv6 se expresan por un número binario de 128 bits, permitiendo un espacio de direccionamiento de hasta 3.4×1038, lo que permite que cada persona en la Tierra pueda hacer uso de millones de direcciones IP. Como las direcciones IPv6 son más largas se emplea la notación hexadecimal: cuatro dígitos hexadecimales separados por dos puntos. Se emplea esta notación porque si se siguiera utilizando la de IPv4 tendríamos que escribir números como estos. IPv6 tiene que sustituir a IPv4, pero por diversas razones su implantación está siendo muy lenta. Hasta ahora hemos visto que tenemos los nombres de dominio y también tenemos las direcciones IP, y entre ambos existe una correspondencia.
¿Cómo se realiza esa correspondencia? Los nombres de dominio se transforman en direcciones IP mediante un sistema llamado DNS, Domain Name System o Sistema de Nombres de Dominio en español. El funcionamiento de DNS es un poco complejo, básicamente es una base de datos distribuida entre diferentes ordenadores, los servidores de DNS, que se comunican entre sí. Pero de forma simplificada cada servidor DNS posee una tabla con la correspondencia entre los nombres de dominio y las direcciones IP, y cuando un servidor no dispone de una correspondencia concreta, sabe a qué servidor le tiene que preguntar para obtener la respuesta, la correspondencia entre nombre de dominio y dirección IP. El uso de DNS ofrece numerosas ventajas. Dos son muy fáciles de entender.
Por un lado, los nombres de dominio son más fáciles de recordar, aunque algunos nombres
pueden ser realmente largos e inútiles. Por otro lado, el nombre de dominio es más fiable.
La dirección IP puede cambiar con el tiempo por diversas razones sin que tenga que cambiar el nombre de dominio.


Material obtenido de  http://google.es/activate

martes, 13 de febrero de 2018

NOMBRES DE DOMINIO

Las URLs son las direcciones que se emplean para localizar los recursos en Internet. Una URL se compone de varias partes. Aunque una URL se escribe de izquierda a derecha, vamos a analizarla al revés. De derecha a izquierda tenemos:
http://www.ua.es/es/estudios/index.html
El documento: index.html
La ruta al documento: /es/estudios
El nombre de dominio (ua.es), que puede contener un subdominio: www.
Y el esquema (http://), que suele ser el protocolo de acceso o de comunicación.
El nombre de dominio es un nombre único que normalmente se emplea para identificar un sitio web en Internet. Hasta hace unos años, en los nombres de dominio sólo se podían usar los caracteres ASCII. La tabla ASCII contiene 128 caracteres, numerados del 0 al 127, pero sólo hay 95 caracteres ASCII imprimibles, numerados del 32 al 126. La tabla ASCII contiene las letras del alfabeto inglés, pero no contiene otras letras, como las vocales acentuadas o la eñe, lo cual plantea un problema para el español. Debido a esto, antes no podían existir nombres de dominio como españa.es o coruña.es Sin embargo, gracias a la introducción del Nombre de dominio internacionalizado, ya es posible utilizar nombres de dominio con caracteres en otros idiomas. Pero por ahora no está muy extendido su uso.
Aunque se pueda identificar un ordenador por su nombre de dominio, en realidad internamente en Internet se identifican los ordenadores por medio de la dirección IP.
Como existe una correspondencia entre los nombres de dominios y las direcciones IP, en una URL también se puede escribir una dirección IP en vez del nombre de dominio.
Un nombre de dominio puede ser el nombre de una empresa, el nombre de una institución, el nombre de una organización, el nombre de una persona o cualquier cosa que uno quiera.
Los nombres de dominio se organizan en diferentes niveles. Los dominios de primer nivel se organizan en genéricos y territoriales. Los genéricos son dominios de propósito general y eran inicialmente los que acababan en .com, .edu, .gob, .mil, .net y .org, pero posteriormente se han añadido otros como .biz, .mobi y .xxx. El registro de nombres de dominio bajo .com, .org y .net no está sometido a ningún tipo de comprobación previa, se asignan siguiendo el principio de “primero en llegar primero servido”. Los territoriales son los que identifican el país, como .es para España, .ec para Ecuador, .fr para Francia o .de para Alemania. El registro de nombres de dominio territoriales está sometido a las normas de cada país. Por ejemplo, en España lo gestiona la organización red.es y podemos encontrar toda la información sobre su funcionamiento en dominios.es
Los dominios de nivel 2 son los que normalmente registramos al solicitar un dominio, como por ejemplo idesweb.es o sergiolujanmora.es
En algunos países existe un tercer nivel de organización. Por ejemplo, en España existen los dominios controlados .com.es, .nom.es, .org.es, .gob.es y .edu.es que permiten que existan dominos como datos.gob.es o mecd.gob.es Ya para terminar, vamos analizar una dirección o URL. Por ejemplo, en esta dirección podemos distinguir los niveles:
.es como nivel 1 o de nivel superior, dominio territorial.
.ua como nivel 2 y www.dlsi como nombre de máquina o host.

Material obtenido de  http://google.es/activate

LAS URLs

Tim Berners-Lee es considerado el padre de la Web, ya que desarrolló las tres tecnologías fundamentales de la Web: HTML, HyperText Markup Language, el lenguaje de marcado o etiquetado que se emplea para crear, para escribir, los documentos o páginas web. HTTP, HyperText Transfer Protocol, el protocolo o lenguaje con el que se comunican el navegador y el servidor web y que se emplea para transmitir los documentos web por Internet.
URL, Uniform Resource Locator, el localizador de recursos uniforme, el sistema de localización o direccionamiento de los documentos web.
esquema://máquina.directorio.archivo
Este es el formato básico de una URL, aunque también puede incluir otros datos, como el nombre de usuario y la contraseña de acceso a un ordenador, el puerto de conexión, o una combinación de todo lo anterior. Por ejemplo, esta URL está formada por estas partes: el esquema, la máquina, el directorio y el archivo. ¿Qué es el esquema en una URL?. El esquema suele representar el protocolo, es decir, el mecanismo o método que se emplea para recuperar un recurso a través de una red de ordenadores. A veces, en vez de esquema se emplea el término servicio, en el contexto de una URL son equivalentes. Los esquemas más conocidos son http, https, ftp, mailto y file. Las URLs son un elemento básico de la Web, ya que son las que definen los hiperenlaces o hipervínculos y permiten definir el hipertexto, que permite relacionar información de diversas fuentes por medio de enlaces. Hay que ser muy cuidadosos a la hora de definir una URL. Tim Berners-Lee, el padre de la Web, nos avisa de ello con la siguiente frase:
Es el deber de un webmaster asignar URIs que sean capaces de ser válidas durante 2 años, 20 años, 200 años.
¿Qué es lo que quiere decir Tim Berners-Lee con este consejo?
Un sitio web no es algo estático, un sitio web evoluciona con el tiempo, se modifican las
páginas, se eliminan las páginas y se añaden páginas nuevas. Cuando se asigna una URL a una página web, esa URL debe ser válida durante toda la existencia de esa página web. No se debe de modificar por posibles cambios que afecten a otras páginas del sitio web. Si una URL deja de ser válida, los visitantes de un sitio web se pueden encontrar con la desagradable sorpresa de “página no encontrada”, el famoso error 404. A veces, una URL puede ser muy larga y complicada, por lo que puede ser difícil de memorizar, de copiar o de comunicar. Para solucionar este problema se emplean los acortadores de URL, un mecanismo que permite convertir una URL larga en una URL corta. Estos sistemas se han popularizado en los últimos años debido a la aparición de sistemas como Twitter, que limitan la longitud de los textos que se pueden escribir. Los acortadores de URL más populares en la actualidad son el de Google, el de bitly y el de owly.
Hay más cosas que deberías saber sobre las URLs, por ejemplo, deberías saber qué son las URLs amigables y porqué son importantes, pero eso te lo dejo como ejercicio para que lo investigues.

Ya por último, una precisión. Desde 1994, en los estándares de Internet, el concepto de URL ha sido incorporado dentro del más general de URI (Uniform Resource Identifier, en español identificador uniforme de recurso), pero el término URL aún se utiliza ampliamente.

Material obtenido de  http://google.es/activate
i

Git. Trabajar con remotos

Para poder colaborar en cualquier proyecto Git, necesitas saber cómo gestionar repositorios remotos. Los repositorios remotos son versione...