Как «проверить» человеческие имена в CakePHP?

У меня есть PHP-скрипт, который должен проверять «правильные» имена людей, но недавно взломал имя с пробелом, поэтому мы добавили пробелы в наш валидатор.
Вместо того, чтобы сделать это, есть ли способ добавить черный список в валидатор CakePHP, чтобы заблокировать все «недопустимые» символы, вместо того, чтобы разрешать «допустимые» символы?

ПРИМЕЧАНИЕ: я знаю, как сделать это в PHP (в целом), но использование синтаксиса валидатора CakePHP отличается.

 chustar04 окт. 2010 г., 09:42
Я добавил цитаты, чтобы показать, что я понимаю, насколько нечетко то, о чем я спрашиваю.
 Russell Dias04 окт. 2010 г., 09:49
Есть ли необходимость проверять человеческие имена вообще? Возможно, вам следует сменить перспективу и нацелить недопустимые значения. Под этим я подразумеваю вместо проверки имен и информирования людей о том, что онине имеют подходящего человеческого имени, логическим решением может быть нацеливание на значения, которые, как вы знаете,никогда быть частью человеческого имени (несколько примеров@|^*$%?)
 chustar04 окт. 2010 г., 09:41
Идея состоит в том, что система будет основана на «действительных» и «настоящих» человеческих именах, поэтому мы стараемся избегать слишком большого числа специальных символов, которые могут ослабить доверие к системе.
 Russell Dias04 окт. 2010 г., 09:38
Что классифицирует человеческое имя какдействительный? Это кажется довольно произвольным термином для решения. Будете ли вы классифицировать письма с акцентами как недействительные?

Ответы на вопрос(4)

как имя может быть написано. Принять любой вклад (да,любой), и выполняйте правильное экранирование при его отображении, чтобы не получить уязвимостей XSS.

Я бы посоветовал вам сделать это в модели afterFind (), чтобы вы не забыли об этом. Сохраните исходные данные в отдельном поле модели, например ['unescaped_name'], если вам нужен доступ к простым данным.

онить:

Роберт'); DROP TABLE Студенты; -

http://xkcd.com/327/

РЕДАКТИРОВАТЬ: На самом деле я имею в виду, что люди в некоторых странах могут иметь свое имя на другом языке (скажем, на японском, китайском, корейском) и даже могут содержать символы.Как вы будете думать, если сайт говорит, что ваше имя «НЕДОПУСТИМО», когда он вводит свои настоящие имена?

Проверка пользовательских регулярных выражений

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

Это слишком наивный подход, так как вам придется занести в черный список почти весь диапазон символов Юникода. Вы можете в значительной степени сделать только белый список основных латинских символов плюс общие причуды как пробелы и апострофы. Более того, и вы будете сражаться в тяжелом сражении, которое вы не можете выиграть. Возможно, со временем вы сможете создать достаточно хороший алгоритм, но он никогда не будет на 100% надежным. Так что либо ограничьте своих пользователей простыми латинскими именами (и не надейтесь на отчуждение вашей аудитории), либо полностью пропустите проверку*.

* Или потратьте несколько лет на разработку алгоритма, охватывающего <100% человеческих имен, работающего в 99,9% случаев.

Решение Вопроса

что проверка имени, вероятно, плохая идея.

Для проверки практически всего, что вы можете придумать, найдется человек с именем, нарушающим ваше правило. Если вы довольны идеей, что вы будете блокировать ввод реальных имен настоящими людьми, вы можете проверить их столько, сколько захотите. Но чем больше правил проверки вы введете, тем больше у вас шансов найти настоящего человека, который не сможет войти.

Вот ссылка на страницу, которая описывает некоторые очевидные (и не очень очевидные) вещи, которые люди пытаются проверить, что может сбить их с толку:

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

Если вы хотите разрешитькто-нибудь на ваш сайт, тогда лучшее, на что вы действительно можете надеяться - это установить максимальную длину поля, чтобы она соответствовала пространству, выделенному в вашей базе данных. Даже тогда вы собираетесь кого-то раздражать.

 deceze04 окт. 2010 г., 11:25
+1 Отличная ссылка, спасибо!

Ваш ответ на вопрос