Free, no sign-up, read-only

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

Why a commenter leak matters

Gravatar MD5 hashes are email addresses in disguise

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.

The comments route lists every commenter

/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

SmartUsername plugin icon
Authors: install the free SmartUsername 1.3 and switch on Hide login names from visitors. Commenters: install Avatar Privacy or turn Gravatar off under Settings > Discussion, and close the comments route for visitors.

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)
Remove the comments route for visitors

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;
});
Local avatars and a quiet oEmbed

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 route

Open by default. Names, websites and Gravatar avatar URLs of every commenter, 100 per page.

gravatar.com/avatar/<hash>Comment HTML on the newest post

MD5 (32 characters) hashes can be matched back to an email address. SHA-256 (64) cannot, in practice.

/comments/feed/Comments feed

Every comment again as RSS, with the commenter’s name in dc:creator.

/wp-json/wp/v2/mediaMedia route

Which user ID uploaded each file. Information only.

/wp-json/wp/v2/users and oEmbedAuthor identities

Author slugs and the oEmbed author link. One line here; the username checker goes deeper.

mailto: and @ in the HTMLHome page

A count of email addresses written into the page, and whether the comment form shows the cookie consent checkbox.

SmartUsername plugin icon
Free plugin by Digital PritamSmartUsername 1.3 closes all five login leaks

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.

Get SmartUsername free

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.