WordPress privacy leak checker: who can read your commenters’ identities?
Enter your site. We read the public places where WordPress hands out commenter names, Gravatar email hashes and author links, and show the fix for each one.
Reads public pages only. Names and hashes are masked on the page. Nothing is stored. What we read
- About 10 seconds
- Commenters, hashes, authors, emails
- Fix for every leak
The checklist covers the identity leaks on this page and the five login leaks: the snippets for the comments and users routes, local avatars, the oEmbed filter and the rename steps. Free, one email a week after that, unsubscribe any time.
Free. Unsubscribe any time. Privacy policy
Why a commenter leak matters
WordPress loads comment avatars from gravatar.com/avatar/<hash>, where the hash is the MD5 of the commenter’s email. MD5 is fast to compute, so a list of a few billion likely addresses turns most hashes back into the email behind them. Researchers did exactly that with millions of Gravatar hashes in 2013 and again in 2020.
/wp-json/wp/v2/comments is open by default and returns the name, website and avatar URL of every approved comment, 100 at a time. One request gives a scraper your whole commenter list, ready to match against breach data and spam lists. Your readers never agreed to that.
How to fix it
Hide login names closes the users route, oEmbed author link and users sitemap in one switch. Avatar Privacy caches avatars on your own server so no hash leaves it. The two snippets below remove the comments route for logged-out visitors and strip the author from embeds.
Prefer code? Show the two snippets (for developers)
Comment forms post to wp-comments-post.php, not to this route, so comments keep working. Logged-in users and the block editor keep the route. Add to a child theme or a snippets plugin:
add_filter('rest_endpoints', function ($e) {
if (!is_user_logged_in()) {
unset($e['/wp/v2/comments'], $e['/wp/v2/comments/(?P<id>[\d]+)']);
}
return $e;
});Without a plugin, point every avatar at one image on your server and drop the author from embeds. Gravatar pictures disappear; the hash disappears with them.
// One local image for every avatar: no hash leaves your site.
add_filter('get_avatar_url', function ($url) {
return get_stylesheet_directory_uri() . '/assets/avatar.png';
});
// And strip the author from embeds of your posts.
add_filter('oembed_response_data', function ($d) {
unset($d['author_name'], $d['author_url']);
return $d;
});What we read
Nine public URLs, read the way a browser reads them.
Show the routes and pages we look at (technical)
/wp-json/wp/v2/commentsComments REST routeOpen by default. Names, websites and Gravatar avatar URLs of every commenter, 100 per page.
gravatar.com/avatar/<hash>Comment HTML on the newest postMD5 (32 characters) hashes can be matched back to an email address. SHA-256 (64) cannot, in practice.
/comments/feed/Comments feedEvery comment again as RSS, with the commenter’s name in dc:creator.
/wp-json/wp/v2/mediaMedia routeWhich user ID uploaded each file. Information only.
/wp-json/wp/v2/users and oEmbedAuthor identitiesAuthor slugs and the oEmbed author link. One line here; the username checker goes deeper.
mailto: and @ in the HTMLHome pageA count of email addresses written into the page, and whether the comment form shows the cookie consent checkbox.
Hide login names from visitors: the users route, ?author=N lookups, the users sitemap and the oEmbed author link, plus Fix author slugs with a 301 from the old link. Then run the username checker to confirm.
Related guides
Affiliate disclosure: some links on this page are affiliate links. If you buy through them, Digital Pritam may earn a commission at no extra cost to you. We only list deals we have checked on the brand’s own website, and commissions never change our picks. Prices can change at any time; always confirm the final price at checkout. Read our full affiliate disclosure.

WordPress username checker
How to change a WordPress username
WordPress security and backup
Wordfence vs Solid Security
WordPress cache checker
How we test deals