Difference between revisions of "Security Checklist/Joomla! Setup"

From Joomla! Documentation

< Security Checklist
m (marker template added)
 
(59 intermediate revisions by 18 users not shown)
Line 1: Line 1:
{{RightTOC}}
+
<noinclude><languages /></noinclude>
 +
{{review|outdated content - missing J4 and J5 recommendations}}
 +
{{Split|Informations for EOL versions will be moved to a separate page. [[User:M-b-o|m-b-o (Mike Brandner)]] ([[User talk:M-b-o|talk]]) 17:35, 19 April 2020 (CDT)}}
 +
{{:Security Checklist/TOC/<translate><!--T:1--> en</translate>}}
 +
<translate>== Configuring Joomla!== <!--T:2--></translate>
  
== Configuring Joomla!==
+
<translate>===Install official versions of Joomla!=== <!--T:3--></translate>
 +
: <translate><!--T:4--> To avoid breaking your site, search the forums for reports of incompatible extensions before upgrading to a new version of Joomla.</translate>
  
===Install official versions of Joomla!===
+
: <translate><!--T:5--> Upgrade to the [https://downloads.joomla.org/latest latest stable version of Joomla!] as soon as possible.</translate>
: To avoid braking your site, search the forums for reports of incompatible extensions before upgrading to a new version of Joomla.
 
  
: Upgrade to the [http://www.joomla.org/download.html latest stable version of Joomla!] as soon as possible.  
+
: <translate><!--T:6--> Download Joomla! from official sites only, such as [https://downloads.joomla.org/ downloads.joomla.org], and check the [[How_to_determine_a_package_checksum|MD5 hash</translate>]].
  
: Download Joomla! from official sites only, such as [http://joomlacode.org/ JoomlaCode.org], and check the [http://www.joomla.org/content/category/5/39/95/ MD5 hash].
+
: <translate><!--T:7--> Use [[Web_page_diagnostic_tools|Web Page Diagnostic Tools]], i.e. Firefox Developer Tools, Microsoft Edge (Chromium) Developer Tools, Chrome Developer Tools, etc. to ensure that all files were installed correctly.</translate>
  
: Use [http://extensions.joomla.org/component/option,com_mtree/task,viewlink/link_id,1146/Itemid,35/ Joomla Diagnostics] to ensure that all files were installed correctly. (Note: the version of Joomla Diagnostics made for the initial release of 1.5 does not work for 1.5.3.)
+
<translate>===Change the default administrator username=== <!--T:8--></translate>
 +
: <translate><!--T:9--> Change the user name of the default admin user. This simple step effectively increases the security of this critical account 50% by modifying one of the two variables attackers must know to gain access. The password is the other variable. Change it early and often.</translate> '''(<translate><!--T:10--> [[Security_and_Performance_FAQs#Why_should_I_immediately_change_the_name_of_the_default_admin_user_after_a_new_install.3F|FAQ]]</translate>)'''
  
===Change the default administrator username===
+
<translate>===Protect directories and files=== <!--T:11--></translate>
: Change the user name of the default admin user. This simple step effectively increases the security of this critical account 50% by modifying one of the two variables attackers must know to gain access. The password is the other variable. Change it early and often. '''([[Security_and_Performance_FAQs#Why_should_I_immediately_change_the_name_of_the_default_admin_user.3F|FAQ]])'''
+
: <translate><!--T:12--> Ensure that all configurable paths to writable or uploadable directories (document repositories, image galleries, caches) are outside of public_html. Check third party extensions such as DOCMan and Gallery2 for editable paths to writable directories.</translate>
  
===Protect directories and files===
+
: {{JVer|1.5}}{{JVer|2.5}}{{JVer|3.x}}{{JVer|4.x}} <translate><!--T:13--> In the Back-End Global Configuration, change the log path. Some extensions use the built in JLog class. This will, by default write logs to http://yousite/logs in Joomla 3.5 and lower or http://yousite/administrator/logs in new Joomla 3.6+ installs. Change this to a place that a casual browser cannot find (and don't pick /tmp/), or lock it down with http authentication. Because we are dealing with Open Source software, attackers can read the code of third-party extensions and may be able to guess log file names.</translate>
: Increase the security of the critical ''configuration.php'' file by moving it outside of the ''public_html'' directory. '''([[Security_and_Performance_FAQs#How_do_I_move_confidential_files_outside_of_public_html.3F|FAQ]])'''
 
  
: Ensure that all configurable paths to writable or uploadable directories (document repositories, image galleries, caches) are outside of public_html. Check third party extensions such as DOCMan and Gallery2 for editable paths to writable directories.  
+
: {{JVer|1.5}}{{JVer|2.5}}{{JVer|3.x}}{{JVer|4.x}} <translate><!--T:14--> In the Back-End Global Configuration, change the temp folder path.</translate>
  
: [[Image:Compat_15.png]] In the Back-End Global Configuration, change the log path. Some extensions use the built in JLog class. This will, by default write logs to http://yousite/logs. Change this to a place that a casual browser cannot find (and don't pick /tmp/), or lock it down with http authentication. Because we are dealing Open Source software, attackers can read the code of third-party extensions and may be able to guess log file names.
+
: <translate><!--T:15--> If the log and temp paths are changed and PHP ''open_basedir'' configuration directive is set, make sure that the new paths fall within the scope of ''open_basedir''.</translate>
  
: [[Image:Compat_15.png]] In the Back-End Global Configuration, change the temp folder path.
+
: <translate><!--T:16--> There is currently no easy way to move the Joomla! /image and /media directories. This is because thousands of third party extensions expect to find these important directories at the current location. The best plan is to make sure open_basedir is properly set for all the user accounts on your server. Check with your host if unsure.</translate>
  
: There is currently no easy way to move the Joomla! /image and /media directories. This is because thousands of third party extensions expect to find these important directories at the current location. The best plan is to make sure open_basedir is properly set for all the user accounts on your server. Check with your host if unsure.
+
<translate>===Adjust file and directory permissions=== <!--T:17--></translate>
 +
'''<translate><!--T:18--> This option no longer appears in Joomla.</translate>'''
 +
<translate><!--T:19--> On Older versions of Joomla : Once your site is configured and stable, write-protect critical directories and files by changing directory permissions to 755, and file permissions to 644. There is a feature in Site --> Global Configuration --> Server to set all folder and file permissions at once. Test third party extensions afterwards, and carefully review the code of any extension that has trouble with such settings. Note: Depending on your server's permissions, you may need to temporarily reset to more open permissions when installing more extensions with the Joomla! installer.</translate>
 +
<translate><!--T:20--> '''This option no longer appears in Joomla.''' but is included for historical purposes.</translate>
  
===Adjust file and directory permissions===
+
<translate>===Remove unneeded files === <!--T:21--></translate>
: Once your site is configured and stable, write-protect critical directories and files by changing directory permissions to 755, and file permissions to 644. There is a feature in Site --> Global Configuration --> Server to set all folder and file permissions at once. Test third party extensions afterwards, and carefully review the code of any extension that has trouble with such settings. Note: Depending on your server's permissions, you may need to temporarily reset to more open permissions when installing more extensions with the Joomla! installer.
+
: <translate><!--T:22--> Remove all design templates not needed by your site. Never put security logic into template files.</translate>
  
===Remove unneeded files ===
+
: {{JVer|1.5}} <translate><!--T:23--> Disable the XML-RPC server if you don't need it.</translate>
: Remove all design templates not needed by your site. Never put security logic into template files.
 
  
: [[Image:Compat_15.png]] Remove the XML-RPC server if you don't need it.
+
: <translate><!--T:24--> Clean up after installs. The installation process will require you to delete the installation directory and all its contents. Do this; do not simply rename it. If you upload files to your site as compressed archives (xxxx.zip for example), don't forget to remove the compressed file. Check the /temp/ directory as temporary files may remain there after a failed installation attempt.</translate>
  
: Clean up after installs. The installation process will require you to delete the installation directory and all its contents. Do this; do not simply rename it. If you upload files to your site as compressed archives (xxxx.zip for example), don't forget to remove the compressed file. Check the /temp/ directory as temporary files may remain there after a failed installation attempt.
+
: <translate><!--T:25--> In general, do not leave any unneeded files (compressed or otherwise) on a public server. Each unused (and perhaps long forgotten) file is a potential security hole.</translate>
  
: In general, do not leave any unneeded files (compressed or otherwise) on a public server. Each unused (and perhaps long forgotten) file is a potential security hole.
+
<translate>===Turn Register Globals Emulation OFF=== <!--T:26--></translate>
  
===Turn Register Globals Emulation OFF===
+
: {{JVer|1.0}} <translate><!--T:27--> Turn Joomla's Register Globals Emulation OFF. Although this setting is somewhat safer than PHP register_globals, you are much better off avoiding such settings all together (as well as any applications that require them). On pre-1.0.13 versions of Joomla, this setting is found in the globals.php file. As of version 1.0.13, it can be turned off in the Back-end, under Global Settings.</translate>
  
: [[Image:Compat_10.png]] Turn Joomla's Register Globals Emulation OFF. Although this setting is somewhat safer than PHP register_globals, you are much better off avoiding such settings all together (as well as any applications that require them). On pre-1.0.13 versions of Joomla, this setting is found in the globals.php file. As of version 1.0.13, it can be turned off in the Back-end, under Global Settings.  
+
: {{JVer|1.5}}{{JVer|2.5}}{{JVer|3.x}} <translate><!--T:28--> Joomla 1.5 and greater, does not use register globals, and in fact has smart code to defeat this setting even if it's turned on at the PHP level. Note that although this makes Joomla itself safer, any server with register globals turned on is potentially vulnerable. Any shared server with register globals turned on is more than likely a sitting duck. Any hosting provider that insists register globals should be turned on is ignorant, incompetent, or worse. Was that blunt enough?</translate>
  
: [[Image:Compat_15.png]] Joomla 1.5 and greater, does not use register globals, and in fact has smart code to defeat this setting even if it's turned on at the PHP level. Note that although this makes Joomla itself safer, any server with register globals turned on is potentially vulnerable. Any shared server with register globals turned on is more than likely a sitting duck. Any hosting provider that insists register globals should be turned on is ignorant, incompetent, or worse. Was that blunt enough?
+
: <translate><!--T:29--> For more information on register_globals, please see</translate> [[Security_Checklist/Hosting_and_Server_Setup#Don.27t_use_PHP_register_globals|<translate><!--T:30--> Security Checklist: PHP: register_globals</translate>]].
  
: For more information on register_globals, please see [[Security_Checklist_2_-_Hosting_and_Server_Setup#Don.27t_use_PHP_register_globals|Security Checklist: PHP: register_globals]].
+
<translate>== Installing Joomla! Extensions == <!--T:31--></translate>
  
== Installing Joomla! Extensions ==
+
<translate>===Backup before installing === <!--T:32--></translate>
 +
: <translate><!--T:33--> Before installing extensions, always backup your site's files and database. This follows a very basic principle:</translate>
  
===Backup before installing ===
+
: '''''<translate><!--T:34--> Thou shalt at all times be able to return your site to a previous working state.</translate>'''''
: Before installing extensions, always backup your site's files and database. This follows a very basic principle:
 
  
: '''''Thou shalt at all times be able to return your site to a previous working state.'''''
+
: <translate><!--T:35--> Therefore, it's smart to set up a simple and fast backup script to automate this task. If you don't set up an easy process in advance, you'll be sorely tempted to do a quick upgrade without backing up first. This very understandable tendency is however one of the chief causes of premature hair loss, sudden career changes, and even death.</translate>
  
: Therefore, it's smart to set up a simple and fast backup script to automated this task. If you don't set up an easy process in advance, you'll be sorely tempted to do a quick upgrade without backing up first. This very understandable tendency is however one of the chief causes of premature hair loss, sudden career changes, and even death.
+
<translate>===Check for extension vulnerabilities=== <!--T:36--></translate>
 +
: <translate><!--T:37--> Most security vulnerabilities are caused by third party extensions. Before installing extensions, check the Official List of Vulnerable 3rd Party/Non Joomla! Extensions. There's an entire site dedicated to vulnerable third party extensions at [https://vel.joomla.org/ vel.joomla.org] we recommend you keep an eye on it!</translate>
  
===Check for extension vulnerabilities===
+
<translate>===Download from trusted sites=== <!--T:38--></translate>
: Most security vulnerabilities are caused by third party extensions. Before installing extensions, check the Official List of Vulnerable 3rd Party/Non Joomla! Extensions. There's an entire forum dedicated to vulnerable third part extensions. Subscribe to it.
+
: <translate><!--T:39--> The fully qualified and official definition of a "trusted site" is one that '''YOU''' trust.</translate>
  
===Download from trusted sites===  
+
<translate>===User beware! Check the code quality=== <!--T:40--></translate>
: The fully qualified and official definition of a "trusted site" is one that '''YOU''' trust.
+
: <translate><!--T:41--> Third party extensions come in all flavors of quality and age. Although Joomla! coding standards exist, third party developers are not required to follow them. Extensions listed on the official Joomla! site are not reviewed for compliance, however if verified vulnerabilities are reported, they will be removed from the list until they are fixed.</translate>
  
===User beware! Check the code quality===
+
<translate>===Test, test, test...=== <!--T:42--></translate>
: Third party extensions come in all flavors of quality and age. Although Joomla! coding standards exist, third party developers are not required to follow them. Extensions listed on the official Joomla! site are not reviewed for compliance, however if verified vulnerabilities are reported, they will be removed from the list until they are fixed.
+
: <translate><!--T:43--> Test all extensions on a development site before installing on a production site. Then test on the production site. Don't forget to check the logs for runtime errors and warnings.</translate>
  
===Test, test, test...===
+
<translate>===Remove junk files=== <!--T:44--></translate>
: Test all extensions on a development site before installing on a production site. Then test on the production site. Don't forget the check the logs for runtime errors and warnings.
+
: <translate><!--T:45--> Remove all unused extensions and double check that related folders and files were actually removed by uninstall scripts. Note that during uninstall, many third party extensions will leave related files on your site, and related database tables complete with data. This is either a feature or a bug depending on your point of view. Any files left on your server remain accessible from the Web via direct URLs, such as http://yousite.com/modules/bad_module.</translate>
  
===Remove junk files===
+
<translate>===Avoid encrypted code=== <!--T:46--></translate>
: Remove all unused extensions and double check that related folders and files were actually removed by uninstall scripts. Note that during uninstall, many third party extensions will leave related files on your site, and related database tables complete with data. This is either a feature or a bug depending on your point of view. Any files left on your server remain accessible from the Web via direct URLs, such as http://yousite.com/modules/bad_module.
+
: <translate><!--T:47--> Joomla is (and despite disinformation campaigns, always has been) a GNU GPL project. This means that all extensions to Joomla must also be free (as in freedom) and open (as in readable code). Encrypted code may be safe, but you can't determine this for yourself, and so you must trust the developers. Using others' encrypted code puts you back in the world of proprietary software where you must wait for security patches from the developer, hoping that attackers don't find your site first before a fix is released.</translate>
  
===Avoid encrypted code===
+
: <translate><!--T:48--> You are often not free to modify, improve, or share encrypted code. These restrictions make encrypted code less valuable to the community as a whole, and reduce the overall viability of the Joomla project which depends on open sharing among all participants.</translate>
: Joomla is (and dispite disinformation campaigns, always has been) a GNU GPL project. This means that all extensions to Joomla must also be free (as in freedom) and open (as in readable code). Encrypted code may be safe, but you can't determine this for yourself, and so you must trust the developers. Using others' encrypted code puts you back in the world of proprietary software where you must wait for security patches from the developer, hoping that attackers don't find your site first before a fix is released.
 
  
: You are often not free to modify, improve, or share encrypted code. These restrictions make encrypted code less valuable to the community as a whole, and reduce the overall viability of the Joomla project which depends on open sharing among all participants.
+
: <translate><!--T:49--> Of course, code that is not distributed to others is exempt from GNU GPL distribution requirements. Thus you can encrypt Joomla-related code on your own servers, providing you do not share it with others.</translate>
  
: Of course, code that is not distributed to others is exempt from GNU GPL distribution requirements. Thus you can encrypt Joomla-related code your own servers providing you do not share it with others.
+
<translate>==Additional Joomla! Hardening Tips and Tricks == <!--T:50--></translate>
  
==Additional Joomla! Hardening Tips and Tricks ==
+
===Running on a non-vhost environment===
 +
When you are running Joomla on a non-vhost environment please make sure that you set the <code>live_site</code> setting within the configruation.php to your domain in order to protect you against potential '''Host Header Injection'''. All sites that are running within an vhost setup are not affected by this issue.
  
===Avoid shared servers if possible===
+
<translate>===Avoid shared servers if possible=== <!--T:51--></translate>
: For maximum security, avoid a shared server on which you don't know or can't trust all the other users or their code quality.
+
: <translate><!--T:52--> For maximum security, avoid a shared server on which you don't know or can't trust all the other users or their code quality.</translate>
  
===Use an SSL server===
+
<translate>===Enable SSL on your server=== <!--T:53--></translate>
: SSL servers are currently the only way to securely process confidential transactions and secure user authentication. SSL works by encrypting all HTTP communications between the Web server and Web clients. Thus, even if a transmission is intercepted, it can not be read.  
+
: <translate><!--T:55--> Servers with SSL correctly configured are currently the only way to securely process confidential transactions and secure user authentication. SSL works by encrypting all HTTP communications between the Web server and Web clients. Thus, even if a transmission is intercepted, it cannot be read. For more information read our [[Enabling_HTTPS_on_your_site|dedicated article]] in this Security Checklist (if you haven't already)</translate>
  
: Joomla! 1.0.x does not allow you to assign an SSL server to individual sub-directories. Search the forums for "Tommy Hack" for one way to deal with this. Joomla! 1.5 has greatly improved SSL options.
+
: <translate><!--T:56--> Joomla! 1.0.x does not allow you to assign an SSL server to individual sub-directories. Search the forums for "Tommy Hack" for one way to deal with this. Joomla! 1.5 and higher supports configuration of SSL options out of the box.</translate>
  
===Use Apache's .htaccess===
+
<translate>===Use Apache's .htaccess=== <!--T:57--></translate>
: For an additional layer of password protection, you can use .htaccess to password protect critical  directories. This is usually adequate for blocking the typical script kiddie, but be aware that .htaccess password protection alone is not a highly secure method. It MUST be combined with an SSL server for maximum protection. An SSL server is required for protecting your site from more sophisticated attacks, such as packet sniffing.
+
: <translate><!--T:58--> For an additional layer of password protection, you can use .htaccess to password protect critical  directories. This is usually adequate for blocking the typical script kiddie, but be aware that .htaccess password protection alone is not a highly secure method. It MUST be combined with an SSL server for maximum protection. An SSL server is required for protecting your site from more sophisticated attacks, such as packet sniffing.</translate>
  
===Switch to Joomla! 1.5===
+
<translate>===Switch to Joomla! 3.x=== <!--T:59--></translate>
: [[Image:Compat_10.png]] The most significant upgrade in Joomla!'s history includes powerful security and performance enhancements.
+
{{JVer|3.0}} <translate><!--T:60--> The most significant upgrade in Joomla!'s history includes powerful security and performance enhancements.</translate>
* [http://www.joomla.org/content/view/4483/118/ Joomla 1.5 Overview]
+
* [[Why_Migrate|<translate><!--T:61--> Why Migrate?</translate>]]
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&frs_package_id=3587 Joomla Downloads]
+
* [https://downloads.joomla.org/cms Joomla Downloads]
  
=== Add Joomla! Security Announcements to your site ===
+
<translate>=== Add Joomla! Security Announcements to your site === <!--T:62--></translate>
: The Joomla! Security Team supports and RSS feed that provides the latest Joomla security information. The following FAQ explains how to add this feed to your site.
+
: <translate><!--T:63--> The Joomla! Security Team supports and RSS feed that provides the latest Joomla security information. The following FAQ explains how to add this feed to your site.</translate>
  
* [http://docs.joomla.org/Security_and_Performance_FAQs#How_can_I_add_the_Joomla.21_Security_Announcements_Feed_to_the_Admin_Control_Panel.3F How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?]
+
* [[Security_and_Performance_FAQs#How_can_I_add_the_Joomla.21_Security_Announcements_Feed_to_the_Admin_Control_Panel%3F| <translate><!--T:64--> How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?</translate>]]
 
 
== Choose A Checklist==
 
# [[Security Checklist 1 - Getting Started|Getting Started]]
 
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]
 
# [[Security Checklist 3 - Testing and Development|Testing and Development]]
 
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]
 
# [[Security Checklist 5 - Site Administration|Site Administration]]
 
# [[Security Checklist 6 - Site Recovery|Site Recovery]]
 
  
 
<!-- KEEP THIS AT THE END OF THE PAGE -->
 
<!-- KEEP THIS AT THE END OF THE PAGE -->
[[Category:Security Checklist]]
+
[[Category:Security Checklist{{#translation:}}]]

Latest revision as of 13:23, 25 March 2024

Other languages:
Deutsch • ‎English • ‎français • ‎português do Brasil
Copyedit.png
This Article Needs Your Help

This article is tagged because it NEEDS REVIEW. You can help the Joomla! Documentation Wiki by contributing to it.
More pages that need help similar to this one are here. NOTE-If you feel the need is satistified, please remove this notice.



Configuring Joomla![edit]

Install official versions of Joomla![edit]

To avoid breaking your site, search the forums for reports of incompatible extensions before upgrading to a new version of Joomla.
Upgrade to the latest stable version of Joomla! as soon as possible.
Download Joomla! from official sites only, such as downloads.joomla.org, and check the MD5 hash.
Use Web Page Diagnostic Tools, i.e. Firefox Developer Tools, Microsoft Edge (Chromium) Developer Tools, Chrome Developer Tools, etc. to ensure that all files were installed correctly.

Change the default administrator username[edit]

Change the user name of the default admin user. This simple step effectively increases the security of this critical account 50% by modifying one of the two variables attackers must know to gain access. The password is the other variable. Change it early and often. (FAQ)

Protect directories and files[edit]

Ensure that all configurable paths to writable or uploadable directories (document repositories, image galleries, caches) are outside of public_html. Check third party extensions such as DOCMan and Gallery2 for editable paths to writable directories.
Joomla 1.5Joomla 2.5Joomla 3.xJoomla 4.x In the Back-End Global Configuration, change the log path. Some extensions use the built in JLog class. This will, by default write logs to http://yousite/logs in Joomla 3.5 and lower or http://yousite/administrator/logs in new Joomla 3.6+ installs. Change this to a place that a casual browser cannot find (and don't pick /tmp/), or lock it down with http authentication. Because we are dealing with Open Source software, attackers can read the code of third-party extensions and may be able to guess log file names.
Joomla 1.5Joomla 2.5Joomla 3.xJoomla 4.x In the Back-End Global Configuration, change the temp folder path.
If the log and temp paths are changed and PHP open_basedir configuration directive is set, make sure that the new paths fall within the scope of open_basedir.
There is currently no easy way to move the Joomla! /image and /media directories. This is because thousands of third party extensions expect to find these important directories at the current location. The best plan is to make sure open_basedir is properly set for all the user accounts on your server. Check with your host if unsure.

Adjust file and directory permissions[edit]

This option no longer appears in Joomla. On Older versions of Joomla : Once your site is configured and stable, write-protect critical directories and files by changing directory permissions to 755, and file permissions to 644. There is a feature in Site --> Global Configuration --> Server to set all folder and file permissions at once. Test third party extensions afterwards, and carefully review the code of any extension that has trouble with such settings. Note: Depending on your server's permissions, you may need to temporarily reset to more open permissions when installing more extensions with the Joomla! installer. This option no longer appears in Joomla. but is included for historical purposes.

Remove unneeded files[edit]

Remove all design templates not needed by your site. Never put security logic into template files.
Joomla 1.5 Disable the XML-RPC server if you don't need it.
Clean up after installs. The installation process will require you to delete the installation directory and all its contents. Do this; do not simply rename it. If you upload files to your site as compressed archives (xxxx.zip for example), don't forget to remove the compressed file. Check the /temp/ directory as temporary files may remain there after a failed installation attempt.
In general, do not leave any unneeded files (compressed or otherwise) on a public server. Each unused (and perhaps long forgotten) file is a potential security hole.

Turn Register Globals Emulation OFF[edit]

Joomla 1.0 Turn Joomla's Register Globals Emulation OFF. Although this setting is somewhat safer than PHP register_globals, you are much better off avoiding such settings all together (as well as any applications that require them). On pre-1.0.13 versions of Joomla, this setting is found in the globals.php file. As of version 1.0.13, it can be turned off in the Back-end, under Global Settings.
Joomla 1.5Joomla 2.5Joomla 3.x Joomla 1.5 and greater, does not use register globals, and in fact has smart code to defeat this setting even if it's turned on at the PHP level. Note that although this makes Joomla itself safer, any server with register globals turned on is potentially vulnerable. Any shared server with register globals turned on is more than likely a sitting duck. Any hosting provider that insists register globals should be turned on is ignorant, incompetent, or worse. Was that blunt enough?
For more information on register_globals, please see Security Checklist: PHP: register_globals.

Installing Joomla! Extensions[edit]

Backup before installing[edit]

Before installing extensions, always backup your site's files and database. This follows a very basic principle:
Thou shalt at all times be able to return your site to a previous working state.
Therefore, it's smart to set up a simple and fast backup script to automate this task. If you don't set up an easy process in advance, you'll be sorely tempted to do a quick upgrade without backing up first. This very understandable tendency is however one of the chief causes of premature hair loss, sudden career changes, and even death.

Check for extension vulnerabilities[edit]

Most security vulnerabilities are caused by third party extensions. Before installing extensions, check the Official List of Vulnerable 3rd Party/Non Joomla! Extensions. There's an entire site dedicated to vulnerable third party extensions at vel.joomla.org we recommend you keep an eye on it!

Download from trusted sites[edit]

The fully qualified and official definition of a "trusted site" is one that YOU trust.

User beware! Check the code quality[edit]

Third party extensions come in all flavors of quality and age. Although Joomla! coding standards exist, third party developers are not required to follow them. Extensions listed on the official Joomla! site are not reviewed for compliance, however if verified vulnerabilities are reported, they will be removed from the list until they are fixed.

Test, test, test...[edit]

Test all extensions on a development site before installing on a production site. Then test on the production site. Don't forget to check the logs for runtime errors and warnings.

Remove junk files[edit]

Remove all unused extensions and double check that related folders and files were actually removed by uninstall scripts. Note that during uninstall, many third party extensions will leave related files on your site, and related database tables complete with data. This is either a feature or a bug depending on your point of view. Any files left on your server remain accessible from the Web via direct URLs, such as http://yousite.com/modules/bad_module.

Avoid encrypted code[edit]

Joomla is (and despite disinformation campaigns, always has been) a GNU GPL project. This means that all extensions to Joomla must also be free (as in freedom) and open (as in readable code). Encrypted code may be safe, but you can't determine this for yourself, and so you must trust the developers. Using others' encrypted code puts you back in the world of proprietary software where you must wait for security patches from the developer, hoping that attackers don't find your site first before a fix is released.
You are often not free to modify, improve, or share encrypted code. These restrictions make encrypted code less valuable to the community as a whole, and reduce the overall viability of the Joomla project which depends on open sharing among all participants.
Of course, code that is not distributed to others is exempt from GNU GPL distribution requirements. Thus you can encrypt Joomla-related code on your own servers, providing you do not share it with others.

Additional Joomla! Hardening Tips and Tricks[edit]

Running on a non-vhost environment[edit]

When you are running Joomla on a non-vhost environment please make sure that you set the live_site setting within the configruation.php to your domain in order to protect you against potential Host Header Injection. All sites that are running within an vhost setup are not affected by this issue.

Avoid shared servers if possible[edit]

For maximum security, avoid a shared server on which you don't know or can't trust all the other users or their code quality.

Enable SSL on your server[edit]

Servers with SSL correctly configured are currently the only way to securely process confidential transactions and secure user authentication. SSL works by encrypting all HTTP communications between the Web server and Web clients. Thus, even if a transmission is intercepted, it cannot be read. For more information read our dedicated article in this Security Checklist (if you haven't already)
Joomla! 1.0.x does not allow you to assign an SSL server to individual sub-directories. Search the forums for "Tommy Hack" for one way to deal with this. Joomla! 1.5 and higher supports configuration of SSL options out of the box.

Use Apache's .htaccess[edit]

For an additional layer of password protection, you can use .htaccess to password protect critical directories. This is usually adequate for blocking the typical script kiddie, but be aware that .htaccess password protection alone is not a highly secure method. It MUST be combined with an SSL server for maximum protection. An SSL server is required for protecting your site from more sophisticated attacks, such as packet sniffing.

Switch to Joomla! 3.x[edit]

Joomla 3.0 The most significant upgrade in Joomla!'s history includes powerful security and performance enhancements.

Add Joomla! Security Announcements to your site[edit]

The Joomla! Security Team supports and RSS feed that provides the latest Joomla security information. The following FAQ explains how to add this feed to your site.