{"id":168739,"date":"2017-10-25T13:00:02","date_gmt":"2017-10-25T13:00:02","guid":{"rendered":"https:\/\/premium.wpmudev.org\/blog\/?p=168739"},"modified":"2019-09-20T21:40:34","modified_gmt":"2019-09-20T21:40:34","slug":"cross-site-contaminations","status":"publish","type":"post","link":"https:\/\/wpmudev.com\/blog\/cross-site-contaminations\/","title":{"rendered":"The Dangers of Cross-Site Contamination and How to Prevent It"},"content":{"rendered":"<p>One of the worst things about flu season is the inevitability that you\u2019re going to get sick. You might work in an office environment where coworkers come in with runny noses.<\/p>\n<p>Or maybe you take the bus to a co-work space where other commuters cough and touch the same railing you\u2019re holding onto.<\/p>\n<p>Or perhaps you work from the \u201csafety\u201d of your home where your kids are likely to share some nasty germ they picked up at school with you.<\/p>\n<p>No matter where you go or who you\u2019re surrounded by, sometimes it feels like nowhere is safe.<\/p>\n<p>But that\u2019s what happens when you work and live in close proximity to others. If one person is infected, it\u2019s only a matter of time before it spreads.<\/p>\n<p>And that\u2019s exactly how cross-site contaminations happen.<\/p>\n<p>Security is obviously a major concern for everyone who comes into contact with a website, be that the owner of the site, the person shopping on it, or the developer who built it.<\/p>\n<p>That\u2019s because there seems to be danger at every turn.<\/p>\n<p>But let\u2019s say you decide to make the economical and efficient decision to put multiple websites on a single network (whether that\u2019s from using <a href=\"https:\/\/wpmudev.com\/blog\/ultimate-guide-multisite\/\" target=\"_blank\" rel=\"noopener\">WordPress Multisite<\/a> or simply running them from the same hosting account).<\/p>\n<p>An insecurity within just one of those websites could put the entire network in danger.<\/p>\n<p>Abiding by <a href=\"https:\/\/wpmudev.com\/blog\/ultimate-guide-wordpress-security\/\" target=\"_blank\" rel=\"noopener\">WordPress security best practices<\/a> is a good place to start, but it might not be enough. If you\u2019re running a network of WordPress sites all from one place, then this post is for you.<\/p>\n<p>I\u2019m going to briefly cover who these cross-site contamination concerns pertain to and then give you a special checklist of tips to use when running a network of websites.<\/p>\n<div  class=\"wpdui-pic-regular  \"> <img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/Security_Patches_02_600.png\" alt=\"Security camera with patch\" width=\"600\" height=\"300\" \/> <\/div>\n<h2>Who Should Be Concerned About Cross-Site Contaminations in WordPress?<\/h2>\n<p>Let\u2019s face it: hackers are needing to get more creative about how they crack into websites these days.<\/p>\n<p>WordPress may be an easy target because of its popularity, but it\u2019s not an easy platform to break into if the people who build and manage websites abide by security best practices.<\/p>\n<p>Of course, that logic starts to waver a bit when the number of websites on your network increases.<\/p>\n<p>Here are some of ways in which you might consolidate your web properties, unintentionally putting them at risk for cross-site contamination:<\/p>\n<h3>WordPress Multisite<\/h3>\n<p>You\u2019ve created a <a href=\"https:\/\/wpmudev.com\/blog\/network-of-multisite-networks\/\" target=\"_blank\" rel=\"noopener\">Multisite network<\/a> within WordPress.<\/p>\n<p>While it\u2019s a great feature for web developers who want to easily manage a network of sites all from one WordPress installation, this also means that one bad apple could easily poison the whole batch.<\/p>\n<p>In essence, with all these shared resources, files, plugins, logins, and so on stored in the same place, this increases the risk that one website harmed could lead to all sites on the network being compromised.<\/p>\n<h3>Multi-Domain Hosting Account<\/h3>\n<p>The same goes for websites that share a hosting account (not necessarily those <em>on<\/em> shared hosting; just those that share one account).<\/p>\n<p>All it takes is one website that\u2019s not properly secured (through a bad plugin or a weak password) and hackers can wreak havoc through the entire network of sites.<\/p>\n<p>There are a number of parties who could potentially be affected by this:<\/p>\n<ul>\n<li>Agencies that want to manage all their clients\u2019 sites on one hosting account.<\/li>\n<li>Developers who want to do the same.<\/li>\n<li>Developers who use their hosting account for testing and staging websites.<\/li>\n<li>Businesses that have a number of web properties under their main brand umbrella and want to keep them all together.<\/li>\n<\/ul>\n<h3>Re-selling Web Hosting<\/h3>\n<p>Web developers who sell hosting either as a full-time or side gig may find this to be a lucrative way to make extra money with WordPress.<\/p>\n<p>That said, if you don\u2019t accurately <a href=\"https:\/\/wpmudev.com\/blog\/web-hosting-design-business-wordpress-multisite\/\" target=\"_blank\" rel=\"noopener\">configure your hosting platform<\/a>, you could put all your clients\u2019 sites at risk in the process.<\/p>\n<p>I can\u2019t stress this enough: all it takes is one website to get infected to take down your entire network.<\/p>\n<p>Imagine how devastating that would be to your business.<\/p>\n<p>You assured clients that you\u2019d take care of their website and you honestly believed that everything would be okay.<\/p>\n<p>But you left a seemingly harmless staging site unattended or you trusted that your hosting clients would properly secure their individual sites\u2026 and something went wrong. So, now what?<\/p>\n<p>Well, you need to <em>not<\/em> wait until the \u201cnow\u201d.<\/p>\n<p>You need to take action now to properly secure your network of WordPress sites from cross-site contaminations.<\/p>\n<h2>Checklist: 8 Things You Need to Do to Fend Off Cross-Site Contaminations<\/h2>\n<p>Obviously, this checklist is not meant to replace the <a href=\"https:\/\/wpmudev.com\/blog\/ultimate-wordpress-security-checklist\/\" target=\"_blank\" rel=\"noopener\">WordPress security checklist<\/a> you already work off of. Those tips hold true whether you\u2019re running one WordPress site or an entire network.<\/p>\n<p>The following checklist, however, should be added to that list if you intend on managing a network of websites.<\/p>\n<h3>1. Scan Every Site<\/h3>\n<div  class=\"wpdui-pic-regular  \">\n<figure class=\"wp-caption alignnone\" data-caption=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/Cross-Site-Contaminations-Defender-Security-Plugin.png\" alt=\"Cross-Site Contaminations - Defender Security Plugin\" width=\"600\" height=\"334\" \/><figcaption class=\"wp-caption-text\">The WPMU DEV Defender plugin.<\/figcaption><\/figure>\n<\/div>\n<p>The whole point in bringing together various websites into a single shared hosting account or WordPress Multisite is so you can more conveniently and effectively manage them all at once.<\/p>\n<p>Nevertheless, those websites are still unique web properties that need to be treated as such.<\/p>\n<p>So, rather than assume that the security procedures used by your hosting provider are enough, use a security scanning plugin for <em>every single one<\/em> of your WordPress sites.<\/p>\n<p><a href=\"https:\/\/wordpress.org\/plugins\/defender-security\/\" rel=\"noopener\" target=\"_blank\">Defender<\/a>, of course, does a great job of regularly scanning your site, enforcing stringent security practices, and documenting all activity, so I\u2019d suggest starting there.<\/p>\n<h3>2. Add Separate Firewalls<\/h3>\n<div  class=\"wpdui-pic-regular  \">\n<figure class=\"wp-caption alignnone\" data-caption=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/cloud-fare.png\" alt=\"Cloudflare can be used to add more protection to your websites\" width=\"600\" height=\"231\" \/><figcaption class=\"wp-caption-text\">A firewall is needed for each and every site on your network.<\/figcaption><\/figure>\n<\/div>\n<p>You know that when you sign up with a trusted hosting source they usually tout the secure firewall placed on their servers to keep intruders out.<\/p>\n<p>However, if you\u2019re running your WordPress sites from the same hosting account, that means your network is secured by only one firewall and that there is no separate barrier standing between each of your sites.<\/p>\n<p>Since this is why cross-contaminations happen, it\u2019s important to add a firewall to every website.\u00a0<a href=\"https:\/\/wordpress.org\/plugins\/cloudflare\/\" rel=\"noopener\" target=\"_blank\">Cloudflare<\/a> have you covered in this department.<\/p>\n<p>Their web application firewall\u00a0comes with built-in rulesets, including rules that mitigate WordPress specific threats and vulnerabilities.<\/p>\n<p>Once the WAF is enabled, you can rest easy knowing your site is protected from the latest threats.<\/p>\n<h3>3. Use a Trustworthy Multisite Plugin<\/h3>\n<div  class=\"wpdui-pic-regular  \">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/06\/wp-ultimo.png\" alt=\"WP Ultimo is a great plugin for managing multisite\" width=\"600\" height=\"260\" \/>\n<\/div>\n<p>If your network vulnerability stems from using WordPress Multisite, then the best thing you can do is get a reliable Multisite management plugin like <a href=\"https:\/\/wpultimo.com\" rel=\"noopener\" target=\"_blank\">WP Ultimo.<\/a><\/p>\n<p>This way, you know you\u2019ll have more control over what your clients do with their websites while you get to use a plugin you know is safe and secure, too.<\/p>\n<h3>4. Block Multisite Spam<\/h3>\n<div  class=\"wpdui-pic-regular  \">\n<figure class=\"wp-caption alignnone\" data-caption=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/akismet-spam.png\" alt=\"Akismet is a great plugin for fighting spam\" width=\"600\" height=\"271\" \/><figcaption class=\"wp-caption-text\">Use a plugin like Akismet to fight spam<\/figcaption><\/figure>\n<\/div>\n<p>Of course, don\u2019t forget about comment spam.<\/p>\n<p>It\u2019s one of the reasons why many blogs decide to <a href=\"https:\/\/wpmudev.com\/blog\/wordpress-comments-off\/\" target=\"_blank\" rel=\"noopener\">turn comments off<\/a> completely.<\/p>\n<p>When you\u2019re running a large network of sites\u2014especially when you have little to no control over blog content or the comments popping up on it\u2014you\u2019ll want the <a href=\"https:\/\/wordpress.org\/plugins\/akismet\/\" rel=\"noopener\" target=\"_blank\">Akismet plugin<\/a> to keep your sites safe from spam and other harmful injections.<\/p>\n<h3>5. Clean Out Old Domains<\/h3>\n<p>The larger your network of sites grows, the easier it becomes to lose track of them.<\/p>\n<p>That\u2019s why you should schedule time\u2014ideally, at least once a month or quarter\u2014to review your hosting or Multisite account.<\/p>\n<ul>\n<li>Any old or unused domains should be tossed out.<\/li>\n<li>The same goes for testing and staging sites. Once the WordPress site goes live, you have no need for those.<\/li>\n<li>If you encounter any sites that haven\u2019t been updated in a year\u2019s time, inquire with the site owner to see if it still needs to be hosted.<\/li>\n<\/ul>\n<p>By keeping your server clear of old domains, you\u2019ll cut down on the possibility that hackers stumble upon them and take advantage of the perfect breeding ground of unmonitored activity, un-updated core and plugins, and so on.<\/p>\n<h3>6. Keep Plugins and Themes Updated<\/h3>\n<div  class=\"wpdui-pic-regular  \">\n<figure class=\"wp-caption alignnone\" data-caption=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/Cross-Site-Contaminations-Outdated-Plugin.png\" alt=\"Cross-Site Contaminations - Outdated Plugin\" width=\"600\" height=\"52\" \/><figcaption class=\"wp-caption-text\">Spend a lot of time in the WordPress repository? Then you&#8217;ll recognize this.<\/figcaption><\/figure>\n<\/div>\n<p>If you\u2019re bringing websites together into the same WordPress installation or hosting account, you\u2019re hopefully using the same set of reliable plugins and themes for them as well.<\/p>\n<p>While WordPress Multisite simplifies the process of keeping \u201cshared\u201d plugins and themes updated across all sites, it\u2019s still important to regularly review each third-party integration.<\/p>\n<p>You never know when a developer has decided to stop supporting them, a plugin has been flagged by WordPress, or a new security flaw is introduced into one of them.<\/p>\n<p>However, sometimes it can be a hassle to keep up with all of the WP updates, as well as the countless plugins and themes.<\/p>\n<p>That&#8217;s when a plugin or a piece of software that automatically updates for you would come in real handy&#8230;<\/p>\n<p>For example, WPMU DEV members have the luxury of having <a href=\"https:\/\/wpmudev.com\/updates\/\" target=\"_blank\" rel=\"noopener\">Automate<\/a> on their side, which\u00a0automatically runs updates and backups for them.<\/p>\n<div  class=\"wpdui-pic-regular  \">\n<figure class=\"wp-caption alignnone\" data-caption=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-600x600 size-600x600\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2017\/10\/automate-wpmudev.png\" alt=\"A look at WPMU DEV'S Automate\" width=\"600\" height=\"262\" \/><figcaption class=\"wp-caption-text\">Automate makes tedious WordPress updates a thing of the past.<\/figcaption><\/figure>\n<\/div>\n<h3>7. Properly Configure Server<\/h3>\n<p>It doesn\u2019t matter if we\u2019re talking about WordPress Multisite or a shared hosting account. To keep sites safe, you need to be smart about configuring your network.<\/p>\n<p>Here are some simple tips to help you do this:<\/p>\n<p><strong>Create separate accounts for website platforms:<\/strong> If you build websites using platforms other than WordPress, then you should have separate accounts for WordPress sites, Drupal sites, Joomla sites, etc.<\/p>\n<p><strong>Avoid mixing and matching host functions:<\/strong> This refers to type of hosting. So, if you\u2019re in the business of selling web hosting, you may also be providing clients with email hosting. Never mix and match hosting functions. These need to remain separate.<\/p>\n<p><strong>Keep test websites and live websites separate:<\/strong> While you may be inclined to put your websites in development and testing phases on the same account as those that are live, don\u2019t do it.<\/p>\n<p>It\u2019s much safer if you keep them separate, especially if you\u2019re not good about remembering to delete the old dev or staging sites once you\u2019re done.<\/p>\n<p>Better yet, just use separate testing and <a href=\"https:\/\/wpmudev.com\/blog\/benefits-of-staging-environments-in-wordpress-development\/\" target=\"_blank\" rel=\"noopener\">staging environment<\/a> tools for that part of your process so you can avoid this problem altogether.<\/p>\n<h3>8. Use a Trusted Host<\/h3>\n<p>Ultimately, the security of your websites comes down to how well you secure each and every one of them.<\/p>\n<p>However, if you\u2019re not starting with a trusted host that provides you with secure and properly configured servers, then you may still run into trouble in the long run.<\/p>\n<p>This most commonly happens by not following best practices to secure each site and keeping users contained to their respective sites.<\/p>\n<p>Of course, if you\u2019re still worried about cross-site contaminations in your network, you can always host each website separately using something more secure and isolated like VPS or dedicated server hosting.<\/p>\n<p>While that defeats the purpose of creating a multi-site network, it does avoid the potential for cross-website contamination.<\/p>\n<h2>Wrapping Up<\/h2>\n<p>All it takes is one bad apple to ruin it for the rest\u2014and sometimes it\u2019s hard to see that rotten apple when you have too many others to keep an eye on.<\/p>\n<p>That\u2019s why every website in your network needs to be protected.<\/p>\n<p>If you don\u2019t care enough about that website to protect it, then it does not belong in WordPress Multisite or sharing space on a hosting account with your other websites.<\/p>\n<p>It\u2019s as simple as that. Abide by the tips above and you\u2019ll be able to harden your network\u2019s security enough to where you won\u2019t have to worry about cross-site contaminations anymore.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the worst things about flu season is the inevitability that you\u2019re going to get sick. You might work in an office environment where coworkers come in with runny noses. Or maybe you take the bus to a co-work space where other commuters cough and touch the same railing you\u2019re holding onto. Or perhaps [&hellip;]<\/p>\n","protected":false},"author":518583,"featured_media":168764,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"blog_reading_time":"","wds_primary_category":0,"wds_primary_tutorials_categories":0,"footnotes":""},"categories":[1117],"tags":[39,10810,9958,9976,11140],"tutorials_categories":[],"class_list":["post-168739","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-multisite","tag-hosting","tag-wordpress-security","tag-multisite-2","tag-plugins-3","tag-staging"],"_links":{"self":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/168739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/users\/518583"}],"replies":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/comments?post=168739"}],"version-history":[{"count":9,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/168739\/revisions"}],"predecessor-version":[{"id":179065,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/168739\/revisions\/179065"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media\/168764"}],"wp:attachment":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media?parent=168739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/categories?post=168739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tags?post=168739"},{"taxonomy":"tutorials_categories","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tutorials_categories?post=168739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}