/wp-admin/includes/ajax-actions.php 和 /wp-includes/comment.php 中添加以下两行(详细信息见报告):
remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
add_filter( 'pre_comment_content', 'wp_filter_kses' );session.cookie_httponly = True
基于哈希的防御 WordPress 尚未实现 CSRF 验证令牌,因为如果实现,将影响 WordPress 的 trackbacks 和 pingbacks 功能。服务器无法区分非法 CSRF 请求与合法的 PINGBACK/TRACEBACK 请求,WordPress 会自动将没有正确 CSRF 令牌的评论视为 PINFBACK 和 TRACEBACK 请求,并使用白名单过滤器过滤该评论。
为防御此 CSRF 漏洞,我们在表单中添加了一个名为 hashnonce 的新字段,用于验证评论是否由管理员发送。管理员使用其 Cookie 对评论字段的值签名。
评论字段值的签名使用 md5 生成哈希值(见图)。
当管理员尝试采纳 PINFBACK 和 TRACEBACK 且无法提供 _wp_unfiltered_html 时,我们会使用 wp_verify_hashNonce。如果验证失败,将报告错误。即使验证成功,逻辑错误也已得到纠正,并将使用 "wp_filter_kses" 过滤评论。
修改的代码:
第三种方法源自 https://github.com/sijiahi/Wordpress_cve-2019-9787_defense