【问题标题】:Wrong password validation message using CakePHP 2.2.5使用 CakePHP 2.2.5 的错误密码验证消息
【发布时间】:2013-02-08 08:58:04
【问题描述】:

我有一个很奇怪的问题,我创建了一个简单的表单来将用户添加到数据库中。

代码运行良好,用户已正确保存到数据库中。

但是……

我在使用验证时遇到问题,这是关于密码字段的验证数组的摘录:

public $validate = array(        
    ...
    'password'  => array(
        'rule'     => array('minLength', 4),
        'required' => true,
        'message'  => "La password deve essere lunga almeno 4 caratteri"
    )
);

minLength 规则正常工作,但如果我尝试显示消息正在执行:

debug($this->User->validationErrors);

在我的控制器中。我看到了这个输出:

array(
    'password' => '*****'
)

为什么是“*”?? 我想得到我写在$validate数组中的消息。

这个问题只出现在密码字段上。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    这是一个必须实施的愚蠢的“安全功能”,以避免一些粗心的人在他们的网站上显示他们的数据库密码(因为他们忘记关闭调试)。 因此,如果“密码”、“模式”等键在数组中,则该值将被隐藏。

    只需使用 pr()、var_dump()、print_r() 或任何其他不这样做的方法。

    PS:你可以通过查看代码 (https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/Debugger.php#L449) 发现这一点

    【讨论】:

    • 我不认为阻止您在错误/调试消息中意外显示敏感信息是一种“愚蠢的“安全功能””
    • @mark,这是否意味着当我将调试模式切换到关闭时,我会看到我在 $validate 数组中写入的消息?
    • 不,那么您将什么也看不到(这就是 debug=0 == 生产模式的目的)。调试信息将不会显示。
    • @RichardAtHome 让那个“烦人”。在大多数情况下,您需要使用不同的方法来查看其内容。如果该方法最终出现在生产性网站中,结果会更糟(因为它可能会在没有调试的情况下持续存在)。如果您作为开发人员不会鲁莽地将调试留在生产模式下,那么一开始就不需要这种加扰。
    【解决方案2】:

    因为密码是散列的,并且有超过 4 个字符。您必须在 beforeSave 中检查密码和验证哈希后:)

    你用的是什么版本的 Cake?

    【讨论】:

    • 密码没有经过哈希处理.....我在我的用户模型中使用 beforeSave 对其进行哈希处理。这不是解决方案。我问为什么我看到 **** 而不是我的消息(我在模型的 $validate 数组中写的消息)
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多