<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How to secure WordPress admin directory on IIS 7.0</title>
	<atom:link href="http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/feed/" rel="self" type="application/rss+xml" />
	<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/</link>
	<description>IIS, FastCGI, PHP and other interesting stuff</description>
	<lastBuildDate>Fri, 12 Mar 2010 03:11:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: John</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1523</link>
		<dc:creator>John</dc:creator>
		<pubDate>Wed, 09 Dec 2009 16:09:49 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1523</guid>
		<description>Ruslany,
You were right, I did not have URL authorization enabled, and I got confused because I was using VS development server alongside IIS7 (http://www.4guysfromrolla.com/articles/122408-1.aspx cleared this up for me) and the behavior was different for each. So, I am beginning to understand now, but I have a follow up question. Does plugging the asp.net modules into the pipeline (i.e. removing and then adding FormsAuthenticationModule) also enable authentication on static content through the system.web authentication rule? If so, what is the advantage to using the system.webServer namespace? Thanks again.
John</description>
		<content:encoded><![CDATA[<p>Ruslany,<br />
You were right, I did not have URL authorization enabled, and I got confused because I was using VS development server alongside IIS7 (<a href="http://www.4guysfromrolla.com/articles/122408-1.aspx" rel="nofollow">http://www.4guysfromrolla.com/articles/122408-1.aspx</a> cleared this up for me) and the behavior was different for each. So, I am beginning to understand now, but I have a follow up question. Does plugging the asp.net modules into the pipeline (i.e. removing and then adding FormsAuthenticationModule) also enable authentication on static content through the system.web authentication rule? If so, what is the advantage to using the system.webServer namespace? Thanks again.<br />
John</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ruslany</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1521</link>
		<dc:creator>ruslany</dc:creator>
		<pubDate>Tue, 08 Dec 2009 21:14:52 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1521</guid>
		<description>@ John, a possible reason why this does not work is if you do not have IIS URL Authorization module installed and enabled. Open the Server Manager, go to Roles node and then find the Role Services list. In that list check if URL Authorization is installed.</description>
		<content:encoded><![CDATA[<p>@ John, a possible reason why this does not work is if you do not have IIS URL Authorization module installed and enabled. Open the Server Manager, go to Roles node and then find the Role Services list. In that list check if URL Authorization is installed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1519</link>
		<dc:creator>John</dc:creator>
		<pubDate>Tue, 08 Dec 2009 17:43:14 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1519</guid>
		<description>Hello,
I am confused about the location element. For some reason, the following does not work for me (I am using this technique to secure a PhpMyAdmin site):
&lt;location path=&quot;3_2_4&quot;&gt;
    &lt;system.webServer&gt;
        &lt;security&gt;
            &lt;authorization&gt;
              &lt;add accessType=&quot;Deny&quot; users=&quot;?&quot; /&gt;
            &lt;/authorization&gt;
        &lt;/security&gt;
    &lt;/system.webServer&gt;
  &lt;/location&gt;

But the following does work:
&lt;location path=&quot;3_2_4&quot;&gt;
    &lt;system.web&gt;
        &lt;authorization&gt;
          &lt;deny users=&quot;?&quot; /&gt;
        &lt;/authorization&gt;
    &lt;/system.web&gt;
  &lt;/location&gt;

I thought that in integrated pipeline mode, that the system.webServer namespace was the one that was in charge of securing all files (php,jpg etc), but in my case only system.web works. Can you clarify please? Sorry for the double post, I forgot to encode the first one. Much appreciated.
John</description>
		<content:encoded><![CDATA[<p>Hello,<br />
I am confused about the location element. For some reason, the following does not work for me (I am using this technique to secure a PhpMyAdmin site):<br />
&lt;location path=&quot;3_2_4&quot;&gt;<br />
    &lt;system.webServer&gt;<br />
        &lt;security&gt;<br />
            &lt;authorization&gt;<br />
              &lt;add accessType=&quot;Deny&quot; users=&quot;?&quot; /&gt;<br />
            &lt;/authorization&gt;<br />
        &lt;/security&gt;<br />
    &lt;/system.webServer&gt;<br />
  &lt;/location&gt;</p>
<p>But the following does work:<br />
&lt;location path=&quot;3_2_4&quot;&gt;<br />
    &lt;system.web&gt;<br />
        &lt;authorization&gt;<br />
          &lt;deny users=&quot;?&quot; /&gt;<br />
        &lt;/authorization&gt;<br />
    &lt;/system.web&gt;<br />
  &lt;/location&gt;</p>
<p>I thought that in integrated pipeline mode, that the system.webServer namespace was the one that was in charge of securing all files (php,jpg etc), but in my case only system.web works. Can you clarify please? Sorry for the double post, I forgot to encode the first one. Much appreciated.<br />
John</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: avn</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1501</link>
		<dc:creator>avn</dc:creator>
		<pubDate>Mon, 30 Nov 2009 20:47:09 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1501</guid>
		<description>update
this behavior is only in Firefox and not in IE (this is why on the server is working fine as I used the IE) it seems it is a bug/feature:) in how the flash in browser treat cookies needed by IIS.
Anyway the issue still remain...</description>
		<content:encoded><![CDATA[<p>update<br />
this behavior is only in Firefox and not in IE (this is why on the server is working fine as I used the IE) it seems it is a bug/feature:) in how the flash in browser treat cookies needed by IIS.<br />
Anyway the issue still remain&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: avn</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1500</link>
		<dc:creator>avn</dc:creator>
		<pubDate>Mon, 30 Nov 2009 20:02:04 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1500</guid>
		<description>Hi,
nice and useful.
Now I followed your instructions and get a secure wp-admin. I have a issue. If I tried to upload a file through new-media.php in flash mode it asking me a login in a window after showing progress on file upload.  when giving credentials give me the famous webconfig uncustomized error. In normal mode is working fine.also direct from server is working fine in both modes.
I suppose that  this is due to flash uploader not sending the cookie to server.
Any ideea?</description>
		<content:encoded><![CDATA[<p>Hi,<br />
nice and useful.<br />
Now I followed your instructions and get a secure wp-admin. I have a issue. If I tried to upload a file through new-media.php in flash mode it asking me a login in a window after showing progress on file upload.  when giving credentials give me the famous webconfig uncustomized error. In normal mode is working fine.also direct from server is working fine in both modes.<br />
I suppose that  this is due to flash uploader not sending the cookie to server.<br />
Any ideea?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ruslany</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1385</link>
		<dc:creator>ruslany</dc:creator>
		<pubDate>Sat, 17 Oct 2009 23:07:34 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1385</guid>
		<description>@Chris: Thanks for your comment - these are very valid questions/issues. Let me try to answer them one by one:

1. The reason I choose not to use built-in IIS basic authentication is because it relies on the built-in Windows accounts, which makes this option not feasible in a shared hosting environment. Plus with basic authentication the base64 encoded password is sent on every request, while with FBA the password is sent on a login request only, while all the other requests use session cookie. So basic auth may be actually less secure because the password is exposed on the wire for longer time.
2. You could encrypt the xml file with the password if you want to, but since it is located in App_Data folder it is already protected by IIS Request Filtering module and hence will not be exposed to the site visitors.
3. Using SSL is the best option of course, but again it is not always possible in a shared hosting environment. If you used SSL then it would not even be necessary to use this extra protection with FBA.
4. Yes, it is very recommended to use different user name and password for the WordPress and FBA. In fact that&#039;s what I use on my site. I will update the article to make it clear.

Overall, this kind of protection is not super strong, but it is better than nothing, especially if somebody uses shared hosting environment for their WordPress blog.</description>
		<content:encoded><![CDATA[<p>@Chris: Thanks for your comment &#8211; these are very valid questions/issues. Let me try to answer them one by one:</p>
<p>1. The reason I choose not to use built-in IIS basic authentication is because it relies on the built-in Windows accounts, which makes this option not feasible in a shared hosting environment. Plus with basic authentication the base64 encoded password is sent on every request, while with FBA the password is sent on a login request only, while all the other requests use session cookie. So basic auth may be actually less secure because the password is exposed on the wire for longer time.<br />
2. You could encrypt the xml file with the password if you want to, but since it is located in App_Data folder it is already protected by IIS Request Filtering module and hence will not be exposed to the site visitors.<br />
3. Using SSL is the best option of course, but again it is not always possible in a shared hosting environment. If you used SSL then it would not even be necessary to use this extra protection with FBA.<br />
4. Yes, it is very recommended to use different user name and password for the WordPress and FBA. In fact that&#8217;s what I use on my site. I will update the article to make it clear.</p>
<p>Overall, this kind of protection is not super strong, but it is better than nothing, especially if somebody uses shared hosting environment for their WordPress blog.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1384</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Sat, 17 Oct 2009 22:07:18 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1384</guid>
		<description>Interesting idea but I have some issues/questions:

Why wouldn&#039;t you use the built-in Basic Authentication for this? Using the IIS GUI you can configure the wp-admin folder for basic authentication and leverage the built in Windows accounts instead of keeping them in a file on your computer.

You don&#039;t mention anything about encrypting the user xml file.  This should be done to prevent accidential exposure from a number of possibilities.

Also, you don&#039;t mention anything about using SSL, having not one, but two forms based authentication interchanges over http instead of https. In IIS 7.0/7.5 you can use the built-in URL Rewriter to switch all calls to the wp-admin and wp-login path over to https...

You also don&#039;t mention anything about using different account/passwords for Wordpress and for your FBA...  I would guess that many users would simply use the same credentials for both, making it pointless to have multiple credential challenges.

Over all it&#039;s an interesting idea but I think you might want to spend some more time polishing off the recommendation.</description>
		<content:encoded><![CDATA[<p>Interesting idea but I have some issues/questions:</p>
<p>Why wouldn&#8217;t you use the built-in Basic Authentication for this? Using the IIS GUI you can configure the wp-admin folder for basic authentication and leverage the built in Windows accounts instead of keeping them in a file on your computer.</p>
<p>You don&#8217;t mention anything about encrypting the user xml file.  This should be done to prevent accidential exposure from a number of possibilities.</p>
<p>Also, you don&#8217;t mention anything about using SSL, having not one, but two forms based authentication interchanges over http instead of https. In IIS 7.0/7.5 you can use the built-in URL Rewriter to switch all calls to the wp-admin and wp-login path over to https&#8230;</p>
<p>You also don&#8217;t mention anything about using different account/passwords for Wordpress and for your FBA&#8230;  I would guess that many users would simply use the same credentials for both, making it pointless to have multiple credential challenges.</p>
<p>Over all it&#8217;s an interesting idea but I think you might want to spend some more time polishing off the recommendation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DoYouKnow.IN</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-1284</link>
		<dc:creator>DoYouKnow.IN</dc:creator>
		<pubDate>Tue, 15 Sep 2009 10:51:32 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-1284</guid>
		<description>How to secure non-Admin Directory?</description>
		<content:encoded><![CDATA[<p>How to secure non-Admin Directory?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ruslany</title>
		<link>http://ruslany.net/2009/02/how-to-secure-wordpress-admin-directory-on-iis-70/comment-page-1/#comment-306</link>
		<dc:creator>ruslany</dc:creator>
		<pubDate>Thu, 19 Feb 2009 03:17:55 +0000</pubDate>
		<guid isPermaLink="false">http://ruslany.net/?p=199#comment-306</guid>
		<description>Update: if you use URL rewriter to enable pretty permalinks in WordPress, then it may cause some javascript errors on login.aspx page. To prevent those errors, modify the rewrite rule for WordPress permalinks as below:

&lt;code&gt;&lt;rule name=&quot;Wordpress&quot; patternSyntax=&quot;Wildcard&quot;&gt;
                    &lt;match url=&quot;*&quot; /&gt;
                    &lt;conditions&gt;
                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; negate=&quot;true&quot; /&gt;
                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; negate=&quot;true&quot; /&gt;
                        &lt;add input=&quot;{URL}&quot; negate=&quot;true&quot; pattern=&quot;*.axd&quot; /&gt;
                    &lt;/conditions&gt;
                    &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
                &lt;/rule&gt;&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Update: if you use URL rewriter to enable pretty permalinks in WordPress, then it may cause some javascript errors on login.aspx page. To prevent those errors, modify the rewrite rule for WordPress permalinks as below:</p>
<p><code>&lt;rule name="Wordpress" patternSyntax="Wildcard"&gt;<br />
                    &lt;match url="*" /&gt;<br />
                    &lt;conditions&gt;<br />
                        &lt;add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /&gt;<br />
                        &lt;add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /&gt;<br />
                        &lt;add input="{URL}" negate="true" pattern="*.axd" /&gt;<br />
                    &lt;/conditions&gt;<br />
                    &lt;action type="Rewrite" url="index.php" /&gt;<br />
                &lt;/rule&gt;</code></p>
]]></content:encoded>
	</item>
</channel>
</rss>
