WordPress页面静态缓存时间过长导致的 Nonce 失效的问题
我们知道,为了防CSRF攻击,WordPress使用随机数Nonce来验证用户操作,默认设置下,WordPress生成的Nonce 有效期是24小时,在Nonce开始的24小时内,某个操作的Nonce值都是一样的。
有时候这个nonce是输出的页面中的(比如使用 wp_nonce_field() 函数生成的表单字段),如果我们使用了静态页面缓存,这个 Nonce 值会和该页面中的其他 HTML 一起被缓存起来。如果静态页面缓存的有效期大于 24 小时。那么 24 小时后,页面中缓存的 Nonce 就会失效。再使用这个 Nonce 值去验证请求的时候,就会导致验证失败。
怎么解决这个问题呢?有两个办法。
缩短页面缓存有效期
最简单的办法就是缩短静态页面缓存有效期,把页面缓存的过期时候设置为小于 24 小时的数字。
不缓存包含 Nonce 值的页面
大部分缓存插件都提供了设置或者 Hooks,允许我们从缓存系统中排出某个页面。我们只要把包含 Nonce 值的页面从缓存中排除掉,不让系统缓存这个页面,就可以解决这个问题了。
先六个坑
错字。
多谢提醒!
wp super cache的话,可以启用动态缓存,页面中指定的字符,可以在每次打开都自定义替换。我就是这么用的。
谢谢分享,有机会试试。
缓存插件里可以直接设置缓存清除时间,我一般就设成24h
还有其他方法吗,坐等填坑