在我开始讨论这个问题之前,让我解释一下我们如何设置事物。Ajax内部的wordpress安全
我们有一个proxy.php文件,其中类代理已与在休息创建/编辑/获取WordPress的职位,领域等
然后调用函数的定义,我们有一个proxyhandler.php,其中Proxy类被初始化并充当proxy.php和JavaScript文件之间的句柄。
在JavaScript文件中,我们有一个ajax调用proxyhandler.php,我们发送我们的秘密和其他数据。
现在,问题出现在这里: 我们通过使用md5自定义字符串+时间戳记来定义秘密,通过wp_localize_script。我们通过ajax发送经过描述的字符串和时间戳记到代理处理程序,在那里我们使用先前的(硬编码的内部代理处理程序)字符串和时间戳记再次生成一个md5字符串,然后检查针对所生成的字符串发送的那个字符串。如果他们是一样的,我们会继续做任何要求的事情,如果他们不合适的话,我们只是回到秘密不匹配。
现在真正的问题来了 - 通过使用wp_localize_script,秘密的变量是全局的,任何人都可以通过开发工具使用它,并可以发送任何ajax请求到他们想要的代理处理器。
什么是正确的程序,使其更安全?我们已经这样想了: 我们不是使用wp_localize_script,而是将脚本放在一个php文件中,我们使用一个php变量定义秘密,然后简单地将秘密文件回显到ajax中。这是否可行?还是有其他方法?
但是每个人都可以看到_ajax_nonce,因为它是在HTML内部打印的,所以如果你知道如何从控制台手动调用ajax,你可以提供这个随机数并通过? (ajax不限于登录用户) – trainoasis
@trainoasis这只是nonce动作名称。真正的是哈希和隐形。您可以查看[wp_verify_nonce()](https://developer.wordpress.org/reference/functions/wp_verify_nonce/#source-code)了解更多信息。 – MinhTri