WordPress: WLWManifest Is A Legacy Feature With Security Implications. Here’s How To Disable It

In the evolving landscape of content management systems, certain features persist long after their original purpose has faded into obscurity. The Windows Live Writer Manifest (WLWManifest) in WordPress is one such artifact, representing a bygone era of desktop blogging tools while potentially introducing unnecessary security risks to modern WordPress installations.

WLWManifest Origins and Purpose

The WLWManifest feature was introduced to WordPress to support Microsoft’s Windows Live Writer (WLW), a desktop blogging application that was part of the Windows Live Essentials suite. This manifest file, typically found at /wp-includes/wlwmanifest.xml, provides the necessary information for Windows Live Writer to interface with WordPress blogs, enabling users to write and publish content directly from their desktops.

Windows Live Writer gained popularity among bloggers in the late 2000s and early 2010s. It offered a rich text editing experience that was superior to many web-based editors of the time. The WLWManifest link in WordPress headers was a discovery mechanism, allowing the desktop application to configure itself for different WordPress installations automatically.

The Decline of Windows Live Writer

Microsoft discontinued Windows Live Writer in 2017, along with the rest of the Windows Live Essentials suite. While the application was open-sourced as Open Live Writer under the .NET Foundation, development has been minimal. The last significant update to Open Live Writer was released in 2017, and the project has seen little activity since then.

Despite this obsolescence, many WordPress installations continue to include the WLWManifest link in their headers, serving no practical purpose for the vast majority of users.

Security Implications

The presence of the WLWManifest link in WordPress headers has attracted attention from security researchers for several reasons:

<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns="1schemas.microsoft.com/wlw/manifest/weblog">
  <options>
    <clientType>WordPress</clientType>
    <supportsKeywords>Yes</supportsKeywords>
    <supportsGetTags>Yes</supportsGetTags>
    <supportsNewCategories>Yes</supportsNewCategories>
    <supportsNewCategoriesInline>Yes</supportsNewCategoriesInline>
    <supportsCommentPolicy>Yes</supportsCommentPolicy>
    <supportsSlug>Yes</supportsSlug>
    <supportsExcerpt>Yes</supportsExcerpt>
    <supportsPages>Yes</supportsPages>
    <supportsPageParent>Yes</supportsPageParent>
    <supportsAuthor>Yes</supportsAuthor>
    <supportsCustomDate>Yes</supportsCustomDate>
    <supportsFeaturedImage>Yes</supportsFeaturedImage>
    <supportsPostAsDraft>Yes</supportsPostAsDraft>
    <supportsCustomFields>Yes</supportsCustomFields>
    <supportsTrackbacks>Yes</supportsTrackbacks>
  </options>
</manifest>

While the wlwmanifest.xml file contains only basic feature capability information and doesn’t expose sensitive data like version numbers, its removal is considered a security best practice under the principle of reducing unnecessary exposure. This approach aligns with the general security concept of minimizing attack surfaces by removing unused features and endpoints.

Removing WLWManifest from WordPress

Given these security considerations and the obsolete nature of Windows Live Writer, removing the WLWManifest link from WordPress is a recommended security hardening measure. Add the following code to your child theme’sfunctions.php file:

add_action('wp_head', function() {
    remove_action('wp_head', 'wlwmanifest_link');
}, 1);

You may also want to add code to redirect the visitor (or crawler) to a 403 page, declaring the URL forbidden.

add_action('template_redirect', function() {
    if (strpos($_SERVER['REQUEST_URI'], 'wlwmanifest.xml') !== false) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
    }
}, 1);

Verifying Removal

After implementing the code in functions.php, it’s important to verify that the changes have taken effect. Clear both your WordPress cache (if you’re using a caching plugin) and your browser cache, then navigate directly to yourdomain.com/wp-includes/wlwmanifest.xml in your browser.

If you added the additional code, you’ll receive a 403 Forbidden error. If not, a 404 Not Found error. If you still see the manifest file or get a different response, double-check that your functions.php code was added correctly and that all caching layers (including any CDN or server-level caching) have been cleared.

Conclusion

The continued presence of WLWManifest in WordPress installations represents a common challenge in web development: balancing backward compatibility with security best practices. While removing this legacy feature is a relatively simple process, it exemplifies the importance of regularly auditing and updating web applications to remove obsolete components that may pose unnecessary security risks.

For modern WordPress installations, removing the WLWManifest link is a recommended security practice that helps reduce the attack surface of your website without impacting functionality for the vast majority of users. As with any security modification, it should be part of a comprehensive security strategy rather than an isolated change.

Exit mobile version