php regex validation cakephp blacklist

Cómo "validar" los nombres humanos en CakePHP



regex validation (4)

Tengo un script PHP que se supone que verifica los nombres humanos "válidos", pero recientemente se rompió contra un nombre con un espacio, así que agregamos espacios a nuestro validador.
En lugar de hacer esto, ¿hay alguna forma de agregar una lista negra al validador de CakePHP para bloquear todos los caracteres "no válidos", en lugar de permitir los "válidos"?

NOTA: Sé cómo hacer esto en PHP (generalmente) pero usar la sintaxis del validador de CakePHP es diferente.


Validación de expresiones regulares personalizadas

var $validate = array( ''name'' => array( ''rule'' => ''/^[^%#//*@!...other characters you don/'t want...]+$/'', ''message'' => ''Only letters and integers, min 3 characters'' ) );

Sin embargo, este es un enfoque demasiado ingenuo, ya que tendrías que incluir en la lista negra casi todo el rango de caracteres Unicode. Puedes hacer listas blancas de personajes latinos básicos más caprichos comunes como espacios y apóstrofes. Más que eso y lucharás en una batalla cuesta arriba que no puedes ganar. Es posible que pueda crear un algoritmo razonablemente bueno con el tiempo, pero nunca será 100% infalible. Así que restrinja a sus usuarios a nombres latinos básicos (y espere no alienar a su público) u omita la validación por completo * .

* O invierta algunos años en desarrollar un algoritmo que cubra <100% de los nombres humanos, trabajando el 99.9% del tiempo.


Estoy de acuerdo con los otros comentarios de que validar un nombre es probablemente una mala idea.

Para prácticamente todo lo que pueda pensar para validar, habrá alguien con un nombre que rompa su regla. Si está contento con la idea de que va a estar bloqueando el ingreso de personas reales a sus nombres, entonces puede validarlo tanto como desee. Pero cuantas más reglas de validación pongas, más probabilidades hay de encontrar una persona real que no pueda iniciar sesión.

Aquí hay un enlace a una página que describe algunas de las cosas obvias (y no tan obvias) que las personas intentan validar, que pueden hacerles tropezar:

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

Si desea permitir que alguien ingrese a su sitio, lo mejor que puede esperar es forzar una longitud máxima de campo para que se ajuste al espacio que ha asignado en su base de datos. Incluso entonces vas a molestar a alguien.


No haga suposiciones sobre cómo se puede escribir un nombre. Acepte cualquier entrada (sí, cualquiera ) y realice el escapado correcto al mostrarlo, para que no tenga vulnerabilidades XSS.

Te sugiero que hagas esto escapando en el modelo en afterFind (), para que no lo olvides en alguna parte. Guarde los datos originales en un campo separado del modelo, como [''unescaped_name''], si necesita acceder a los datos simples.


No hay forma de "validar". ¿Cómo puedes evitar que alguien realmente llame?

Robert ''); DROP TABLE Students; -

http://xkcd.com/327/

EDITAR: Lo que realmente quiero decir es que las personas en algunos países pueden tener su nombre en un idioma diferente (por ejemplo, japonés, chino, coreano) e incluso pueden contener símbolos. ¿Cómo piensas si un sitio dice que tu nombre es "NO VÁLIDO" cuando él / ella está ingresando sus nombres reales?