Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";“验证”;CakePHP中的人名?_Php_Regex_Validation_Cakephp_Blacklist - Fatal编程技术网

如何";“验证”;CakePHP中的人名?

如何";“验证”;CakePHP中的人名?,php,regex,validation,cakephp,blacklist,Php,Regex,Validation,Cakephp,Blacklist,我有一个PHP脚本,应该检查“有效”的人名,但最近破解了一个带有空格的名字,所以我们在验证器中添加了空格。 除了这样做,还有没有办法向CakePHP的验证器添加黑名单来阻止所有“无效”字符,而不是允许使用“有效”字符 注意:我知道如何在PHP中实现这一点(通常),但使用CakePHP的验证程序语法是不同的。不要对名称的拼写进行任何假设。接受任何输入(是的,任何),并在显示时进行适当的转义,这样就不会出现XSS漏洞 我建议您在afterFind()上的模型中执行此转义,这样您就不会忘记它。如果需要

我有一个PHP脚本,应该检查“有效”的人名,但最近破解了一个带有空格的名字,所以我们在验证器中添加了空格。
除了这样做,还有没有办法向CakePHP的验证器添加黑名单来阻止所有“无效”字符,而不是允许使用“有效”字符


注意:我知道如何在PHP中实现这一点(通常),但使用CakePHP的验证程序语法是不同的。

不要对名称的拼写进行任何假设。接受任何输入(是的,任何),并在显示时进行适当的转义,这样就不会出现XSS漏洞

我建议您在afterFind()上的模型中执行此转义,这样您就不会忘记它。如果需要访问普通数据,请将原始数据保存在模型的单独字段中,如['unescaped_name']

不过,这种方法太幼稚了,因为您必须将几乎所有Unicode字符列入黑名单。您几乎只能将基本拉丁字符加上空格和撇号等常见怪癖进行白名单。再多的话,你就要打一场你赢不了的艰苦战斗。随着时间的推移,您可能会创建一个相当好的算法,但它永远不会100%万无一失。因此,要么限制您的用户使用基本的拉丁名称(希望不要疏远您的读者),要么完全跳过验证
*

*
或投资几年开发一种算法,覆盖没有“验证”的方法。你如何防止某人真正被称为:

罗伯特';落桌学生--



编辑:我真正的意思是,有些国家的人可能用不同的语言(如日语、汉语、韩语)命名,甚至可能包含符号如果一个网站在输入真实姓名时说你的名字“无效”,你会怎么想?

我同意其他评论,即验证名字可能是个坏主意

对于你能想到的几乎所有要验证的东西,都会有人的名字违反了你的规则。如果你对阻止真人输入姓名的想法感到满意,那么你可以随心所欲地验证它。但是,您输入的验证规则越多,就越有可能找到无法登录的真实用户

下面是一个页面链接,该页面描述了人们试图验证的一些明显(但不那么明显)的事情,这些事情可能会让他们绊倒:


如果您希望允许任何人访问您的站点,那么您真正希望的最好方法是强制设置最大字段长度,以适应您在数据库中分配的空间。即使这样,你也会惹恼别人。

是什么将人名归类为有效的?这似乎是一个相当武断的术语。你会将带有口音的字母归类为无效字母吗?我们的想法是该系统将基于“有效”和“真实”人名,因此我们将尽量避免使用太多会削弱对系统信任的特殊字符。我添加了引号,以表明我理解我所问的有多模糊。是否需要验证人名?也许您应该更改透视图,转而以非法值为目标。我的意思是,与其验证姓名并告知人们他们没有合适的人名,逻辑上的解决方案可能是将您知道永远不会成为人名一部分的值作为目标(一些示例
@^*$%?
var $validate = array(
    'name' => array(
        'rule' => '/^[^%#\/*@!...other characters you don\'t want...]+$/',  
        'message' => 'Only letters and integers, min 3 characters'
    )
);