我们知道,为了防CSRF攻击,WordPress使用随机数Nonce来验证用户操作,默认设置下,WordPress生成的Nonce 有效期是24小时,在Nonce开始的24小时内,某个操作的Nonce值都是一样的。
有时候这个nonce是输出的页面中的(比如使用 wp_nonce_field() 函数生成的表单字段),如果我们使用了静态页面缓存,这个 Nonce 值会和该页面中的其他 HTML 一起被缓存起来。如果静态页面缓存的有效期大于 24 小时。那么 24 小时后,页面中缓存的 Nonce 就会失效。再使用这个 Nonce 值去验证请求的时候,就会导致验证失败。
怎么解决这个问题呢?最简单的办法就是减小静态页面缓存有效期,把页面缓存的过期时候设置为小于 24 小时的数字。
至于有没有其他更好的方法来避免这个问题,我暂时还没时间测试,先留个坑,找到了更好的办法之后,再来填上。
6 thoughts on “WordPress页面静态缓存时间过长导致的 Nonce 失效的问题”
先六个坑
错字。
多谢提醒!
wp super cache的话,可以启用动态缓存,页面中指定的字符,可以在每次打开都自定义替换。我就是这么用的。
谢谢分享,有机会试试。
缓存插件里可以直接设置缓存清除时间,我一般就设成24h
还有其他方法吗,坐等填坑