简短回答:不。您可以使用普通字符串进行操作,md5\'ing它们不会改变任何东西。
nonce由三条主要信息组成:
时间:当前time()
除以43200即为nonce。这就是让nonce每12小时更改一次的原因(12小时内43200秒)。
您提供的操作字符串。下面将对此进行详细介绍。
用户ID。每个用户获得不同的nonce。
现在,这些元素被串联起来,然后nonce本身就是wp_hash()
这个组合字符串的。这个wp_hash()
函数会自动对哈希进行盐分,在这种情况下使用NONCE\\u键和NONCE\\u SALT常量,这应该在wp配置中定义。php文件,该文件应该是特定站点的唯一文件。
(请注意,如果您碰巧有默认值“在此处放置您的唯一短语”在该文件中,无论出于何种原因,WordPress都会在内部为键/盐生成随机的64个字符的值,并将其存储在数据库中。它不会将默认值用作实际盐。它也不允许对任何值使用重复的键或盐。不过,您应该在wp配置中定义密钥和盐。php文件,而不是依赖于此。您可以从以下位置获取该文件的随机行:https://api.wordpress.org/secret-key/1.1/salt/)
因此,为了复制nonce,您需要所有这些信息。可以推断出时间和用户ID。操作字符串可能已知。但是salt是一个秘密值,攻击者不应该知道它,这使得复制nonce是不可行的。
也就是说,“action”字符串应该尽可能地唯一于特定情况。每个操作都应该有所不同,比如delete\\u thing、update\\u thing和create\\u thing。如果它作用于某个特定的事物,那么它应该包含一些“ID”,比如针对该特定事物的“delete_thing_123”。
在操作字符串中包含复杂数据并不一定会增加任何真正的安全性,比如MD5哈希。nonce已经使用带有salt秘密值的HMAC消息摘要方法构建。但是,对于相同的操作,nonce将是相同的,因此该操作应该特定于该情况,以便使nonce在多个情况下不可预测。用于删除一个项目的nonce不会删除任何项目、类型的东西。
还要注意,生成nonce的操作值应该完全由内部生成。在任何情况下,都不应使用用户输入来确定生成nonce的操作。如果用户可以注入数据来确定操作字符串,那么他们可以提前获得nonce。nonce需要是唯一的静态字符串,可能连有ID。
TL;DR:使用带有ID的普通字符串(如果有ID有意义的话)。一切都很好。