Are the default salts secure?

时间:2016-02-27 作者:Ronni Skansing

安装新的wordpress时,应该做的一件事是更新wp-config.php.

该部分如下所示

define(\'AUTH_KEY\',         \'put your unique phrase here\');
define(\'SECURE_AUTH_KEY\',  \'put your unique phrase here\');
define(\'LOGGED_IN_KEY\',    \'put your unique phrase here\');
define(\'NONCE_KEY\',        \'put your unique phrase here\');
define(\'AUTH_SALT\',        \'put your unique phrase here\');
define(\'SECURE_AUTH_SALT\', \'put your unique phrase here\');
define(\'LOGGED_IN_SALT\',   \'put your unique phrase here\');
define(\'NONCE_SALT\',       \'put your unique phrase here\');
如果客户端确实更改了这些盐或常量丢失,wordpress将在数据库中保存这些值。

用来产生它所用的盐wp_generate_password(64, true, true)可以在1993行的pluggable中找到执行此操作的代码。

现在的问题是:

是的wp_generate_password 与推荐的https://api.wordpress.org/secret-key/1.1/salt/

当这种方法回退到数据库中时,数据库中的盐是否会降低安全性。

不设置这些值并让它们在数据库中随机生成,这是否有任何安全隐患?

3 个回复
最合适的回答,由SO网友:kaiser 整理而成

是的wp_generate_password() 与推荐的https://api.wordpress.org/secret-key/1.1/salt/?由于明显的原因,这些细节无法回答,其内部内容公众并不知道。如果我们能够回答这个问题,那么就可以知道允许对过程进行反向工程的细节。这可能会导致安全性降低。请注意,有些人仍然可以尝试将大量请求设置到此Url,然后尝试对过程进行反向工程,从观察气泡到表面的内容。

当这种方法回退时,数据库中的盐是否会降低安全性do not want 将安全详细信息/身份验证凭据保存在其他人可以访问的任何位置。这包括:

版本控制

  • 命令行历史记录
  • 数据库或文件备份
    • 请将您的身份验证凭据和相关数据(如“salt”)保存在.env 文件(请参见Dotenv package), 在部署服务机密安全港中,在单独的配置文件(例如AWS凭据文件)中,因此仅在单个位置。

      不设置这些值并让它们在运行中随机生成到db中是否有任何安全隐患invalidate your users log in sessions 通过使您的用户cookie无效。这些常量有一个原因:它们应该保持不变,并且不会根据请求进行更改。

      Edit: 正如@gmazzap向我指出的那样,我不是在谈论保存到数据库中的值,而是在谈论“动态生成”的常量。如果您将其保存到数据库中,请参阅第2点关于安全性的内容。

      如需进一步补充,请按照the link 从@马克·卡普伦处,详细阅读@gmazzap答案(并对两者进行投票)。

      Additional Note/Reminder: 始终向从API服务器检索到的数据中添加一些自己的伪随机字符。永远不要随便提供您的凭据或数据库。你不会相信人们倾向于发电子邮件,把钱存到U盘上,他们的私人dropbox帐户上,或者没有密码的笔记本电脑硬盘上…

      Edit: 正如@stephenharris在[聊天]中指出的,有一个有趣的blog post around that topic 这比我们这里的答案要详细得多。

    SO网友:gmazzap

    Is wp_generate_password() 与推荐的https://api.wordpress.org/secret-key/1.1/salt/

    @kaiser said API salt生成的内部细节未知,但老实说,API返回一个64个字符的字符串,其中每个字符都是wp_generate_password().

    请注意,如果服务器具有PHP 7,则用于从92个glyph中选择一个glyph的随机整数将使用PHP 7 CSPRNG 我怀疑API会有比这更强大的功能。在较早的PHP版本中,随机值由mt_rand.

    考虑到这一点,考虑到密码的强大性更多地取决于加密算法,而不是所使用的salt,我可以说,是的,wp_generate_password 很可能与API产生的盐一样安全。

    当这种方法回退到数据库中时,数据库中的盐是否会降低安全性。

    在这一点上,我同意@kaiser.

    让我们假设有人获得了您的数据库转储的副本,用于备份。在数据库转储中,他们可以看到您的用户密码,但已加密。

    如果他们能接触到盐,他们就更容易入侵你的网站。

    此外,通过了解所使用的salt、用户ID和用户元(存储会话令牌的位置),可以很容易地为任何用户复制nonce值,而无需知道“解密”的密码。

    当然,如果恶意用户获得了您的数据库副本,您的安全性将受到严重威胁,但通过在数据库中存储盐,您可以让恶意用户的生活变得更轻松。

    不设置这些值并让它们在数据库运行时随机生成,是否有任何安全隐患?

    如果盐根本没有凝固,它们是由wp_generate_password() 只有当WP第一次尝试访问它们时,才会将其存储到数据库中,并且在后续请求中,才会从数据库中提取它们。

    如前所述wp_generate_password() 其本身并不坏,但由于它们存储在db中,因此其安全性影响正如前一点所述:如果有人可以访问您的db副本,那么如果该db副本包含盐,则更为危险。

    然而,当盐使用非安全值时,真正的安全影响是。事实上,如果在配置中设置了弱值,WP将不会生成任何值,但会使用该弱值。。简言之,如果在构型无盐和弱盐之间进行选择,前者肯定更好。

    请注意,在WP的最新版本(不确定是哪个版本)中,默认值\'put your unique phrase here\' 被忽略,因此如果wp-config.php 包含任何salt的该值,WordPress将忽略该值并使用生成的值wp_generate_password() 这比存储在config中的弱值好,但比存储在config中的强值差(因为将盐存储在db…)。即使同一盐值用于多次盐,也会使用自动生成的值。

    注意:SALT的更改将注销更改前登录您网站的所有用户,包括更改时未登录但在更改前登录时选择了“记住我”选项的用户。

    当使用“安装程序”安装WordPress时(无需手动创建wp-config.php) 盐值是从API提取值生成的。

    SO网友:Mark Kaplun

    这取决于您的机器可以实现的随机性。我不记得确切的细节了,只记得文字出版社。如果您的机器的随机性不够好,那么就有org-API。

    可能不会。如果有人能够访问您的DB或代码,那么无论如何,您都会感到厌烦,而获取盐分是您面临的最不重要的问题。

    这样做的理由是什么?从DB获取这8个值将使服务的每个页面都稍微慢一点,而不会给您的安全性增加任何价值。

    编辑:为什么随机性(熵)首先重要,可能是https://security.stackexchange.com/questions/61676/why-do-wordpress-installations-retrieve-the-crypto-secrets-remotely-on-installat 会比我解释得更好

    问题是盐不应该被猜测,因此它们是通过中继某些随机数生成器生成的,而大多数操作系统都有这种生成器。但并非所有随机生成器都是平等创建的,例如,如果您的生成器没有从环境中获取一些值作为输入,它将生成相同的数字序列,因此,任何检查操作系统行为的人都可以想出将要生成的前1000个数字,将它们用作盐,并更容易猜测您的密码。

    这在共享托管环境中尤其有问题,在共享托管环境中,所有站点都使用相同的随机生成器,因此可以访问随机生成的数字序列,并且基于操作系统的知识和它使用的随机算法可以猜测下一个和以前生成的数字。

    旁注:这就是为什么智能手机和其他软件要求您在初始化设备/软件时进行一些随机输入的原因。该随机输入作为随机数生成的基础,并确保每个设备将生成不同的数字序列。

    使用wordpress的优势。org作为您的随机数生成器,是因为您知道,如果不访问服务器,它生成的数字是不可能猜测的,因为您不知道正在使用哪个算法,它是如何初始化的,以及您当前所在的序列。

    但正如我链接到的问题所说,依靠外部服务进行中继也是一个安全问题。我觉得这有点偏执,因为这种攻击方式需要大多数攻击者所缺乏的复杂性(在攻击wordpress网站的情况下),我也不会担心随机生成器的质量,但如果你这样做,你所要做的就是自己生成盐,也许可以使用一些与服务器无关的随机生成器软件,并更新配置文件。

    相关推荐

    wordpress admin security

    我用不同的工具扫描我的网站,但它没有显示恶意脚本。但当我在管理仪表板中看到时,我在body标签下面看到了奇怪的方形符号。我试图检查管理索引文件,根索引文件,但什么都没有。有人放了这个脚本。而且,当我试图采取备份它不允许我采取。使用BackupFordPress插件。然而,所有其他的事情都在运行,但在管理方面仍然存在一些问题。如何检测和删除此项。