{"id":10922,"date":"2025-01-17T07:29:29","date_gmt":"2025-01-17T07:29:29","guid":{"rendered":"https:\/\/www.trustedhosting.in\/blog\/?p=10922"},"modified":"2025-01-17T07:29:29","modified_gmt":"2025-01-17T07:29:29","slug":"ways-to-secure-your-whmcs-installation","status":"publish","type":"post","link":"https:\/\/www.webystrata.com\/blog\/ways-to-secure-your-whmcs-installation\/","title":{"rendered":"More Ways to Secure Your WHMCS Installation"},"content":{"rendered":"<h1><a href=\"https:\/\/www.trustedhosting.in\/cpanel-hosting.html\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10923 size-full\" title=\"More Ways to Secure Your WHMCS Installation\" src=\"https:\/\/www.trustedhosting.in\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1.jpg\" alt=\"More Ways to Secure Your WHMCS Installation\" width=\"2000\" height=\"2000\" srcset=\"https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1.jpg 2000w, https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1-300x300.jpg 300w, https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1-1024x1024.jpg 1024w, https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1-150x150.jpg 150w, https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1-768x768.jpg 768w, https:\/\/www.webystrata.com\/blog\/wp-content\/uploads\/2025\/01\/21902030_6498830-1-1536x1536.jpg 1536w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/a><\/h1>\n<h1>More Ways to Secure Your WHMCS Installation<\/h1>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_40a52825-e291-440a-99d2-4b93eae8bdca\" class=\"text-block-content\">\n<p>eps as we develop each WHMCS version to help ensure a secure system. However, to go even further in protecting against security issues, we recommend taking a series of additional steps to secure your installation.<\/p>\n<\/div>\n<\/div>\n<div class=\"instructions screensteps-textblock screensteps-wrapper--alert screensteps-wrapper\" tabindex=\"0\" role=\"status\" aria-label=\"alert\">\n<div id=\"text-content_4b85ced3-bd8f-40dd-a7f8-e22699e80bda\" class=\"text-block-content\">\n<p>The steps below provide extra protection against hackers and other malicious attackers. If you have questions about security, contact your hosting provider or system administrator.<\/p>\n<\/div>\n<\/div>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_0d221e78-31d7-4063-bcd7-6e62423898fa\" class=\"text-block-content\">\n<p>To enhance the protection of your WHMCS installation, we recommend that you:<\/p>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"50f64691-e1db-4865-836c-c47049b5237a\">\n<h2 id=\"secure-the-writeable-directories\" tabindex=\"0\">1. Secure your installation&#8217;s writeable directories.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_ec2dc528-46c5-4322-9cb6-ce3b9b03345b\" class=\"text-block-content\">\n<p>We recommend moving all writeable directories to a private location in order to prevent web-based access. When you do this, you must also make necessary changes to your file storage settings and the templates cache.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650299\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650299\" data-internal-link=\"article\">Securing Writeable Directories<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"c75caae4-bef8-4805-a0d6-65af63dcf946\">\n<h2 id=\"securing-the-configuration-file\" tabindex=\"0\">2. Secure the configuration.php file.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_7b7a2a69-67df-4ce4-97e7-ebb9413b3fbb\" class=\"text-block-content\">\n<p>We recommend adjusting the permissions for the\u00a0<code>configuration.php<\/code>\u00a0file in your WHMCS root directory. This file contains sensitive data that you can&#8217;t recover without a backup copy of the file.<\/p>\n<p>Changing the file permissions helps to avoid accidentally overwriting, editing, or deleting the file.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650301\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650301\" data-internal-link=\"article\">Securing the Configuration File<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"6f75aaf1-1aae-4a92-8bfc-f69fa545932e\">\n<h2 id=\"moving-the-crons-directory\" tabindex=\"0\">3. Move the crons directory.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_5aac1f4c-c094-41b2-bc72-474eebaba32f\" class=\"text-block-content\">\n<p>We recommend moving the\u00a0<code>crons<\/code>\u00a0directory to a private directory above your web root. This will prevent web-based access and help to protect your WHMCS installation.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650302\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650302\" data-internal-link=\"article\">Moving the Crons Directory<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"f640e2a2-85fc-4914-8b32-542e031775cc\">\n<h2 id=\"4-restrict-access-to-your-whmcs-installation-s-admin-area\" tabindex=\"0\">4. Restrict access to your WHMCS installation&#8217;s Admin Area.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_ea68b944-f378-4991-b3d3-4f3a6559312f\" class=\"text-block-content\">\n<p>For increased protection, if your staff uses fixed IP addresses, you can restrict access to a specific set of IP addresses. This will help to prevent access by hackers and other malicious users.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650303\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650303\" data-internal-link=\"article\">Restricting Access by IP Address<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"1df96c2a-8004-44cb-b5e3-f3fd313b5954\">\n<h2 id=\"5-rename-the-whmcs-admin-area-directory\" tabindex=\"0\">5. Rename the WHMCS Admin Area directory.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_10e017ac-692c-471f-84ab-5d7e46b5f72c\" class=\"text-block-content\">\n<p>Customizing the name of your WHMCS\u00a0<code>admin<\/code>\u00a0directory makes it harder for bots and other malicious users to find the login URL for your WHMCS Admin Area.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650304\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650304\" data-internal-link=\"article\">Renaming the WHMCS Admin Directory<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"a0eff7d2-5d37-4bb1-9d42-4a76d912ac85\">\n<h2 id=\"6-enable-ssl-for-your-domain\" tabindex=\"0\">6. Enable SSL for your domain.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_7bd060ed-d410-47fb-a1cc-a3f3e74d85ed\" class=\"text-block-content\">\n<p>WHMCS often contains private and sensitive data that passes between WHMCS and end users&#8217; browsers. Having a valid SSL certificate that enables the use of HTTPS and encrypted communication is essential for data security.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/help.whmcs.com\/a\/1650306\" target=\"_blank\" rel=\"noopener\" data-internal-link-id=\"1650306\" data-internal-link=\"article\">Enabling SSL<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"03671f40-ba1c-441f-aaaf-e9713c6949d0\">\n<h2 id=\"7-restrict-the-whmcs-database-s-privileges\" tabindex=\"0\">7. Restrict the WHMCS database&#8217;s privileges.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_1a4a3e08-a245-4e3c-9fbd-64629b3f7fa1\" class=\"text-block-content\">\n<p>We recommend disabling any unneeded database privileges. WHMCS requires a specific set of permissions for day-to-day use and additional privileges during installation, upgrades, and module activations.<\/p>\n<p>For more information and lists of the required permissions, see\u00a0<a href=\"https:\/\/docs.whmcs.com\/System_Environment_Guide#Database_Privileges\" target=\"_blank\" rel=\"noopener\">Database Privileges<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"20abd1a0-4493-4581-a057-0c2be1192321\">\n<h2 id=\"8-prohibit-serving-requests-directly-from-the-vendor-directory\" tabindex=\"0\">8. Prohibit serving requests directly from the vendor directory.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_1582ed59-a1bc-468b-b311-6789c4d04325\" class=\"text-block-content\">\n<p>The\u00a0<code>vendor<\/code>\u00a0directory includes various common libraries that WHMCS uses. To prevent unexpected behavior and other issues, your server should not serve file requests directly from this path.<\/p>\n<p>If your server runs Apache, the included\u00a0<code>.htaccess<\/code>\u00a0file already protects against these problems. If, however, you use a different web server technology, you will need to update your configuration to prohibit serving files directly from the\u00a0<code>vendor<\/code>\u00a0directory.<\/p>\n<p>For steps to do this with NGINX, see\u00a0<a href=\"https:\/\/docs.whmcs.com\/Nginx_Directory_Access_Restriction\" target=\"_blank\" rel=\"noopener\">Nginx Directory Access Restriction<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"8c6a3f5e-7b1a-42a5-9dfe-86d5a9dd60a0\">\n<h2 id=\"9-defend-against-clickjacking\" tabindex=\"0\">9. Defend against clickjacking.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_0aac1752-a5f4-400c-be1a-e58cb6b7a8ec\" class=\"text-block-content\">\n<p>In a clickjacking attack, the attacker loads an external page (like the WHMCS Client Area) and attempts to trick the user into granting access to their information. You can prevent this by ensuring that your site always sends the proper Content Security Policy (CSP) frame-ancestors directive response headers.<\/p>\n<p>For steps to do this, see\u00a0<a href=\"https:\/\/owasp.org\/www-community\/attacks\/Clickjacking\" target=\"_blank\" rel=\"noopener\">OWASP Clickjacking<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"step step-depth-1\" data-step-uuid=\"c89d518e-f021-4fc7-a64c-194364ddde44\">\n<h2 id=\"10-take-general-server-hardening-steps\" tabindex=\"0\">10. Take general server hardening steps.<\/h2>\n<div class=\"instructions screensteps-textblock\" tabindex=\"0\">\n<div id=\"text-content_eb64c80a-e2fd-4158-a43d-748de36f3372\" class=\"text-block-content\">\n<p>The additional steps that you can take depend on your hosting control panel and server configuration. For example:<\/p>\n<ul>\n<li><a href=\"https:\/\/help.whmcs.com\/m\/installation\/l\/%5Bhttps:\/\/docs.cpanel.net\/knowledge-base\/security\/security-best-practices\/\" target=\"_blank\" rel=\"noopener\">cPanel&#8217;s Security Best Practices<\/a><\/li>\n<li><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A6_2017-Security_Misconfiguration\" target=\"_blank\" rel=\"noopener\">OWASP Security Misconfiguration<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>More Ways to Secure Your WHMCS Installation eps as we develop each WHMCS version to help ensure a secure system.&hellip;<\/p>\n","protected":false},"author":1,"featured_media":10923,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-whmcs"],"_links":{"self":[{"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/posts\/10922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/comments?post=10922"}],"version-history":[{"count":1,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/posts\/10922\/revisions"}],"predecessor-version":[{"id":10924,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/posts\/10922\/revisions\/10924"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/media\/10923"}],"wp:attachment":[{"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/media?parent=10922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/categories?post=10922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webystrata.com\/blog\/wp-json\/wp\/v2\/tags?post=10922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}