Estaba buscando hacer un script de login en PHP el cual fuera seguro. Encontré un pequeño portal Regexlib en el que podés buscar expresiones regulares subidas por usuarios.
Qué carajo es una expresión regular?
Wikipedia: Es una expresión que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. Específicamente, las expresiones regulares se construyen utilizando los operadores unión, concatenación y clausura de Kleene .
Y para qué carajo sirve una expresión regular?
En mi caso, me sirvió para hacer un poco más segura la entrada de texto en un input de un login, por ejemplo: evitar un código malicioso simple javascript.
Ejemplo:
En el input inSearch "Buscar Productos" que va a buscar.php se ingresa:
El resultado sería:
login.php:
e imprimiría una alerta de usuario con la cookie.
Por GET o POST podemos evitarlo de la siguientes formas (por ejemplo):
Actualmente RegExLib tiene más de 3400 expresiones regulares de más de 1997 contribuyentes.
En la página podés buscar la expresión según tu necesidad, te muestra un ejemplo de la expresión regular, que admite y que no admite y un rating correspondiente.
Ejemplo "mail":
Expresión regular:
Descripción:
Une una dirección de mail válida incluyendo IP's que son raramente usadas. Permite para a-z0-9_.- en el nombre de usuario, pero no terminando en un punto. Por ejemplo: user.@ domain.com es inválido y a-z0-9 como subdominio opcional con nombre del dominio y 2-7 caractér (a-z) td permitiendo por tld's cortos como ca y uno nuevo como museum.
Dejo la descripción original para el que no me entendió nada :
Matches a valid email address including ip's which are rarely used. Allows for a-z0-9_.- in the username, but not ending in a full stop i.e user.@ domain.com is invalid and a-z0-9- as the optional sub domain(s) with domain name and a 2-7 char (a-z) tld allowing for short tld's like ca and new ones like museum.
Permite:
username@ domain.com | u-s_e.r1@ s-ub2.domain-name.museum:8080 | user_name@ 123.123.123.12
No permite:
user@ domain | user@ domain.c | user.@ domain.com
Rating:
3/5
Sin duda deben haber mil formas de hacerlo más seguro, mejor, etc etc. Pero está bueno saberlo...
p.d.: separé los @ domain para que no sea un enlace al usuario
Qué carajo es una expresión regular?
Wikipedia: Es una expresión que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. Específicamente, las expresiones regulares se construyen utilizando los operadores unión, concatenación y clausura de Kleene .
Y para qué carajo sirve una expresión regular?
En mi caso, me sirvió para hacer un poco más segura la entrada de texto en un input de un login, por ejemplo: evitar un código malicioso simple javascript.
Ejemplo:
En el input inSearch "Buscar Productos" que va a buscar.php se ingresa:
"/><script>alert(document.cookie);</script>
El resultado sería:
login.php:
$_POST['inSearch]=""/><script>alert(document.cookie);</script>
e imprimiría una alerta de usuario con la cookie.
Por GET o POST podemos evitarlo de la siguientes formas (por ejemplo):
if ([url=http://www.php.net/manual/es/function.preg-match.php]!preg_match[/url](
'^([[email protected]]{1,255})$'
$_POST['inSearch'])
{
echo "<script>alert('No se admiten caractéres especiales');</script>";
Actualmente RegExLib tiene más de 3400 expresiones regulares de más de 1997 contribuyentes.
En la página podés buscar la expresión según tu necesidad, te muestra un ejemplo de la expresión regular, que admite y que no admite y un rating correspondiente.
Ejemplo "mail":
Expresión regular:
^[w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[a-z]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?$
Descripción:
Une una dirección de mail válida incluyendo IP's que son raramente usadas. Permite para a-z0-9_.- en el nombre de usuario, pero no terminando en un punto. Por ejemplo: user.@ domain.com es inválido y a-z0-9 como subdominio opcional con nombre del dominio y 2-7 caractér (a-z) td permitiendo por tld's cortos como ca y uno nuevo como museum.
Dejo la descripción original para el que no me entendió nada :
Matches a valid email address including ip's which are rarely used. Allows for a-z0-9_.- in the username, but not ending in a full stop i.e user.@ domain.com is invalid and a-z0-9- as the optional sub domain(s) with domain name and a 2-7 char (a-z) tld allowing for short tld's like ca and new ones like museum.
Permite:
username@ domain.com | u-s_e.r1@ s-ub2.domain-name.museum:8080 | user_name@ 123.123.123.12
No permite:
user@ domain | user@ domain.c | user.@ domain.com
Rating:
3/5
Sin duda deben haber mil formas de hacerlo más seguro, mejor, etc etc. Pero está bueno saberlo...
p.d.: separé los @ domain para que no sea un enlace al usuario

