<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Creative Anvil</title>
	<atom:link href="http://www.creativeanvil.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.creativeanvil.com/blog</link>
	<description></description>
	<pubDate>Thu, 06 Nov 2008 21:40:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Lawn signs advertising dating sites&#8230;</title>
		<link>http://www.creativeanvil.com/blog/2008/lawn-signs-advertising-dating-sites/</link>
		<comments>http://www.creativeanvil.com/blog/2008/lawn-signs-advertising-dating-sites/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 21:40:03 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/?p=120</guid>
		<description><![CDATA[Most of my posts on here have been of a very technical nature. Today, I will break that chain.
This afternoon I ran across a blog post uncovering the source of yard signs that I&#8217;ve been seeing around the St. Louis area for the past two years. You may have seen some wherever you live, also. [...]]]></description>
			<content:encoded><![CDATA[<p>Most of my posts on here have been of a very technical nature. Today, I will break that chain.</p>
<p>This afternoon I ran across a blog post uncovering the source of yard signs that I&#8217;ve been seeing around the St. Louis area for the past two years. You may have seen some wherever you live, also. They basically all say something like &#8220;Single? YourTownSingles.com&#8221;, obviously with &#8216;YourTown&#8217; replaced with &#8216;StLouis&#8217; or &#8216;StPeters&#8217;, &#8216;Ofallon&#8217;, etc.</p>
<p>Having a technical background, I know it&#8217;s not rocket science to build a site that will respond to multiple domain names. In fact, done it numerous times. However, the signs still seemed odd to me because there were just so many of them and they were so localized.</p>
<p>Well, <a href="http://themetricsystem.rjmetrics.com/2008/11/06/single-lawn-signs-conquer-the-american-landscape/">this guy</a> took the time to hunt down where they came from. Gotta give him credit for the technical sleuthing - WHOIS, traceroute, digs, and reverse lookups. He put an awful lot of time and effort into this. If you&#8217;re curious who&#8217;s behind the signs, <a href="http://themetricsystem.rjmetrics.com/2008/11/06/single-lawn-signs-conquer-the-american-landscape/">check out his post</a>, I won&#8217;t spoil it for you&#8230;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Lawn%20signs%20advertising%20dating%20sites%26%238230%3B&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Flawn-signs-advertising-dating-sites%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/lawn-signs-advertising-dating-sites/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pay-per-click and SEO are different&#8230;</title>
		<link>http://www.creativeanvil.com/blog/2008/pay-per-click-and-seo-are-different/</link>
		<comments>http://www.creativeanvil.com/blog/2008/pay-per-click-and-seo-are-different/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 16:03:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[pay-per-click]]></category>

		<category><![CDATA[ppc]]></category>

		<category><![CDATA[search engine marketing]]></category>

		<category><![CDATA[search engine optimization]]></category>

		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/pay-per-click-and-seo-are-different/</guid>
		<description><![CDATA[I&#8217;ve been noticing some disturbing happening in the Search Engine Optimization market. As we talk with potential clients and look at competitors, it seems that a lot of organizations are popping up and selling pay-per-click as search engine optimization. Don&#8217;t get me wrong, there&#8217;s nothing wrong with pay-per-click. In fact, we use pay-per-click (PPC) on [...]]]></description>
			<content:encoded><![CDATA[<div>I&#8217;ve been noticing some disturbing happening in the Search Engine Optimization market. As we talk with potential clients and look at competitors, it seems that a lot of organizations are popping up and selling pay-per-click as search engine optimization. Don&#8217;t get me wrong, there&#8217;s nothing wrong with pay-per-click. In fact, we use pay-per-click (PPC) on a regular basis and have clients that are seeing a great ROI from PPC. My issue is that organic search engine optimization (SEO) and PPC are different things. Very different&#8230;<br />
 </div>
<div>Pay-Per-Click is exactly what it sounds like - you buy ads from the search engines and pay each time a user clicks on your ad. Organic Search Engine Optimization is the process of modifing portions of a web site to help the site show up better in search engines. The big difference is where PPC ads show up versus where organic results show up. In most search engines, PPC ads are displayed to the right of the main search results and up above the search results, in a light colored background. Organic results do not cost anything when the user clicks on them.<br />
 </div>
<div>So, what I&#8217;ve been seeing is an increase in organizations that call their service Search Engine Optimization, however, they are essentially just setting up Pay-per-click campaigns for clients. The problem is that a lot of the clients purchasing these services don&#8217;t understand the difference between PPC and SEO and they&#8217;re not being educated. These organizations are calling it SEO because that&#8217;s what people want. I simply don&#8217;t feel it&#8217;s right to sell something to a client calling it one thing when it&#8217;s really something else.<br />
 </div>
<div>At Creative Anvil, we prefer to educate clients on the difference between PPC and SEO and point out the pros and cons of each. PPC can end up costing more in the long run and has a lower click-through ratio, but organic results can take time to take hold. A good Search Engine Marketing program will include both PPC and SEO, to ensure good exposure throughout the search engines for the identified keywords.</div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Pay-per-click%20and%20SEO%20are%20different%26%238230%3B&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fpay-per-click-and-seo-are-different%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/pay-per-click-and-seo-are-different/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft Ad Center Doesn&#8217;t Work on a Mac</title>
		<link>http://www.creativeanvil.com/blog/2008/microsoft-ad-center-doesnt-work-on-a-mac/</link>
		<comments>http://www.creativeanvil.com/blog/2008/microsoft-ad-center-doesnt-work-on-a-mac/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 04:35:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[Ad Center]]></category>

		<category><![CDATA[AdCenter]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[pay-per-click]]></category>

		<category><![CDATA[search engine marketing]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/microsoft-ad-center-doesnt-work-on-a-mac/</guid>
		<description><![CDATA[I was recently setting up a new account for a new Pay-Per-Click client in Microsoft AdCenter. We&#8217;ve been fairly busy lately, and this is work that I can do from anywhere, so I decided to do it one evening from home. I have a Macintosh at home (and at the office). I do not have [...]]]></description>
			<content:encoded><![CDATA[<div>I was recently setting up a new account for a new <a href="http://www.creativeanvil.com/pay-per-click-ppc.php">Pay-Per-Click</a> client in Microsoft AdCenter. We&#8217;ve been fairly busy lately, and this is work that I can do from anywhere, so I decided to do it one evening from home. I have a Macintosh at home (and at the office). I do not have a spare Windows computer, nor do I have VMware on my home computer. Essentially, from home, I have no access to a Windows computer. No big deal, right? I mean, after all, AdCenter is just a web site, so as long as I have a web browser, I&#8217;m in good shape, right? Wrong. Let&#8217;s explore what happened&#8230;<br />
 </div>
<div>I got almost all of the way through the sign-up process and ran into this error:<br />
 </div>
<div><a href="http://1.bp.blogspot.com/_-2iAOYTQayE/SKJl9ZOnkdI/AAAAAAAAAA0/PgAnjdNtfWY/s1600-h/error.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5233857822376563154" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-2iAOYTQayE/SKJl9ZOnkdI/AAAAAAAAAA0/PgAnjdNtfWY/s400/error.jpg" border="0" alt="" /></a></div>
<p> </p>
<div>Basically, it says that I must accept the sign up charge. Hmm..I didn&#8217;t see that anywhere. Let&#8217;s scroll down and find the problem.<br />
 </div>
<div><a href="http://4.bp.blogspot.com/_-2iAOYTQayE/SKJmW4wEfMI/AAAAAAAAAA8/E2ICvc7i9XA/s1600-h/no_checkbox.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5233858260335099074" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_-2iAOYTQayE/SKJmW4wEfMI/AAAAAAAAAA8/E2ICvc7i9XA/s400/no_checkbox.jpg" border="0" alt="" /></a></div>
<div>Oh, look, there&#8217;s the problem. But&#8230;there&#8217;s no checkbox. Or text. The little exclamation point is where there SHOULD be a checkbox for me to accept the charges, but it&#8217;s not there. So, I figure, well, this is Firefox on a Mac, I&#8217;ll give Safari a shot. Surely it will work in there.</div>
<div>I fired up Safari and went to the main AdCenter page, clicked on Sign up today, which then brought up this page:<br />
 </div>
<div><a href="http://1.bp.blogspot.com/_-2iAOYTQayE/SKJm4QGngSI/AAAAAAAAABE/c8EES_csfMg/s1600-h/sign_up_broken.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5233858833539367202" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-2iAOYTQayE/SKJm4QGngSI/AAAAAAAAABE/c8EES_csfMg/s400/sign_up_broken.jpg" border="0" alt="" /></a></div>
<div>So, naturally, I clicked &#8216;Sign Up Now&#8217;. Guess what? In Safari, you can&#8217;t even click the button. Clicking on it just does nothing.<br />
 </div>
<div>I was completely dumbfounded by this, so I tried it the next day at work, again on my Mac. Same issues. Unbelievable.<br />
 </div>
<div>This is an excellent example of why usability and testing are so important. The Macintosh market is growing every month, and here we have one of the largest companies in the technology industry that has built a product that only works on Windows.<br />
 </div>
<div>And Microsoft wonders why Google is completely obliterating them in this market&#8230;</div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Microsoft%20Ad%20Center%20Doesn%26%238217%3Bt%20Work%20on%20a%20Mac&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fmicrosoft-ad-center-doesnt-work-on-a-mac%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/microsoft-ad-center-doesnt-work-on-a-mac/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Be Wary of Cheap, Guaranteed Search Engine Optimization&#8230;</title>
		<link>http://www.creativeanvil.com/blog/2008/be-wary-of-cheap-guaranteed-search-engine-optimization/</link>
		<comments>http://www.creativeanvil.com/blog/2008/be-wary-of-cheap-guaranteed-search-engine-optimization/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 04:47:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[guarantee]]></category>

		<category><![CDATA[pay-per-click]]></category>

		<category><![CDATA[search engine marketing]]></category>

		<category><![CDATA[search engine optimization]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/be-wary-of-cheap-guaranteed-search-engine-optimization/</guid>
		<description><![CDATA[Most professionals in the search engine optimization business are hesitant to give any sort of  guarantee of results. Why? It&#8217;s simple - search engines are out of our control. We can tweak sites based on what we know about the search engine algorithms &#8212; that is, what we think we know. However, when it all [...]]]></description>
			<content:encoded><![CDATA[<div>Most professionals in the search engine optimization business are hesitant to give any sort of  guarantee of results. Why? It&#8217;s simple - search engines are out of our control. We can tweak sites based on what we know about the search engine algorithms &#8212; that is, what we think we know. However, when it all comes down to it, very few people on this earth know exactly how Google works, and what changes they&#8217;re planning on implementing next week.<br />
 </div>
<div>I recently ran across a great example of what to be cautious of. A &#8217;search engine optimization&#8217; firm was guaranteeing page 1 rankings within 7 business days. That&#8217;s hardly enough time for Google to crawl your pages after changes, much less for Google to get them indexed and for results to start showing. So, instantly, something is wrong. And then, they offer this for $100/month. That&#8217;s awfully cheap for that type of guarantee.<br />
 </div>
<div>I did some digging on this companies site and found some interesting information. Here are a few of the items that jumped  out at me:</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">&#8220;Since we are already submitting all the &#8220;text&#8221; on your website we do not need to ask you for keywords. Your keywords are already on your site.&#8221;</span></span></div>
<div><span style=" ;font-family:'courier new';font-size:13px;"><br />
</span></div>
<div>So what is odd about that, you ask? Well, one of the biggest components to search engine optimization is to ensure you are focusing on keywords that users actually search for. Many sites are not optimized with keywords based on user search activity. For example, say my web site has the term &#8220;red and black armchair coffee mug&#8221; on one page 20 times. Well, that&#8217;s a pretty obscure term, and therefore would be really easy to optimize. I could be #1 in Google and Yahoo for that term, but it doesn&#8217;t mean that anyone will search for it.<br />
 </div>
<div>The second thing that really caught my eye was this:</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">&#8220;</span></span><span style="font-family:'courier new';"><span style="font-size:small;">You can show up in sponsored, non sponsored areas or both.&#8221;</span></span></div>
<div><span style=" ;font-family:Arial;font-size:12px;"><br />
</span></div>
<div>OK, so they guarantee that for some specific term, that they pick without any input from you, you will show up on page one of the paid or non-paid listings. With $100/month, I will guarantee that you&#8217;ll show up in the sponsored or non sponsored areas, too! They state that they will email you your Page 1 listings. So, if within 6 days you&#8217;re not showing up organically, all they have to do is create an Adwords campaign and purchase a keyword with a high cost per click to ensure you show up on the first page. Not rocket science, and again, not search engine optimization.<br />
 </div>
<div>I want to be clear - Pay-per-click (PPC) ads through Google Adwords and Yahoo work great. We&#8217;ve had tremendous results with them, both for ourselves and for clients. Ultimately, organic optimization seems to produce the best results and ROI, but PPC is great, too. My issue is not that this firm is doing PPC, but how they&#8217;re selling it &#8212; very deceptively.<br />
 </div>
<div>I wanted to see how I could do, so I found one of their clients, via a testimonial on their site. I looked at his supposed &#8216;keywords&#8217; and determined it was a pretty obscure term. I decided to write a quick blog on it and to create a quick 1 page web site to see if I could get myself onto page 1 in Google for the same term.<br />
 </div>
<div>Guess what? A few months later, I&#8217;m still #5 in Google (organically) for that search term. It took a few weeks, but my site popped in there and has held strong since &#8212; without any further tweaking. That tells me that that specific term is pretty obscure and not very competitive. What&#8217;s the term you ask? Contact me at Creative Anvil and I&#8217;d be glad to share the term with you.<br />
 </div>
<div>Joe Koenig</div>
<div>Principal</div>
<div>Creative Anvil</div>
<div><a href="http://www.creativeanvil.com/">Web Design</a>, <a href="http://www.creativeanvil.com/">Search Engine Optimization</a></div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Be%20Wary%20of%20Cheap%2C%20Guaranteed%20Search%20Engine%20Optimization%26%238230%3B&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fbe-wary-of-cheap-guaranteed-search-engine-optimization%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/be-wary-of-cheap-guaranteed-search-engine-optimization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Improving a SOUNDEX search</title>
		<link>http://www.creativeanvil.com/blog/2008/improving-a-soundex-search/</link>
		<comments>http://www.creativeanvil.com/blog/2008/improving-a-soundex-search/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 03:04:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Soundex]]></category>

		<category><![CDATA[pspell]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/improving-a-soundex-search/</guid>
		<description><![CDATA[We were recently working on a project for a client and needed to be able to provide a useful search of the products database. In addition, we wanted to catch some common misspellings. My first thought was that this was going to be simple - just use a quick SOUNDEX() in MySQL. I&#8217;ve done this [...]]]></description>
			<content:encoded><![CDATA[<div>We were recently working on a project for a client and needed to be able to provide a useful search of the products database. In addition, we wanted to catch some common misspellings. My first thought was that this was going to be simple - just use a quick SOUNDEX() in MySQL. I&#8217;ve done this a million times and it works great. Generally when I&#8217;ve used it, it&#8217;s been to find potential duplicates, etc. Let&#8217;s take a look at that&#8230;<br />
 </div>
<div>When looking for potential duplicates, a SOUNDEX() can be a great tool. For example, say you have a database of people. You check for a SOUNDEX() of the first name and last name, and pull any results that have 2 or more matching records. So, in this case, the following two names would match:<br />
 </div>
<div>Johnny Smithe</div>
<div>John Smith<br />
 </div>
<div>Are they the same person? Maybe. Maybe not. You can check on additional data, too. For example, you can check the city to see if they seem similar, etc. Then, you can provide an administrative user with a merge/remove/ignore feature. Anyway, that&#8217;s beside the point&#8230; The point here is really just that SOUNDEX() will provide you a pretty good way to see if two things sound similar.<br />
 </div>
<div>Where SOUNDEX() fails is when there is more than one word. It wants to calculate the SOUNDEX() of the entire field, not each word. Yes, there are some clever ways around this out there, but, in the end, they all just end up producing a lot of false positives.<br />
 </div>
<div>We ended up using a combination of FULL TEXT indexes (using MATCH &#8230; AGAINST) and PHP&#8217;s Pspell functions. Basically, we took the search as the user typed it and used it against a full-text index. If no results were found, the search term(s) was passed to Pspell to get suggestions. The top 5 suggestions were searched until results were found. Overall, it worked pretty well, as we were still able to take advantage of the FULL TEXT index and rank the results according to their relevance.<br />
 </div>
<div>We were working when a pretty small database, so building in thresholds wasn&#8217;t really necessary at this point, however, you could certainly build in a threshold on the number of search results you needed before you wanted to get suggestions and re-run the search. Also, if you&#8217;re working with a very large database and busy site, you could easily return the user any search results, as well as a &#8216;did you mean ____?&#8217; type of screen. This way, you avoid unnecessary searches on the database.</div>
<div>&#8211;</div>
<div>Joe Koenig</div>
<div>Creative Anvil</div>
<div><a href="http://www.creativeanvil.com">A Web Design &amp; Search Engine Marketing Firm</a></div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Improving%20a%20SOUNDEX%20search&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fimproving-a-soundex-search%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/improving-a-soundex-search/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Anatomy of a SQL Injection</title>
		<link>http://www.creativeanvil.com/blog/2008/the-anatomy-of-a-sql-injection/</link>
		<comments>http://www.creativeanvil.com/blog/2008/the-anatomy-of-a-sql-injection/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 02:39:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/the-anatomy-of-a-sql-injection/</guid>
		<description><![CDATA[We had a client recently come to us to add something onto a project that another developer had done. In the process, we noticed the site was probably susceptible to SQL Injections. We did some testing, and sure enough, SQL Injections were possible.
 
As any responsible developer would do, we notified the client and provided them some links [...]]]></description>
			<content:encoded><![CDATA[<div>We had a client recently come to us to add something onto a project that another developer had done. In the process, we noticed the site was probably susceptible to SQL Injections. We did some testing, and sure enough, SQL Injections were possible.<br />
 </div>
<div>As any responsible developer would do, we notified the client and provided them some links to some information regarding SQL Injections. The client was interested in knowing how to fix it, however, their server admin also told them that the server was secure and that it probably wasn&#8217;t that likely to happen and maybe not that big of an issue.<br />
 </div>
<div>With that said, let&#8217;s get something out of the way: A SQL Injection has absolutely nothing to do with the security of the server. You can have the best security practices in the world for your server, but if it&#8217;s hosting an insecure application, there&#8217;s a risk. And the risk is not only to the app, but can be to your entire server.<br />
 </div>
<div>We prepared a quick demo to show the client what is possible via SQL Injection. The code that we discovered was on the login page for this particular application. The code looked something like this:<br />
 </div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">SELECT * FROM tablename WHERE user = &#8216;$variable&#8217; AND passwrd = &#8216;$variable&#8217;</span></span>;<br />
 </div>
<div>Note: throughout this blog entry, I&#8217;m replacing the real table name with &#8216;tablename&#8217; for ease, as well as to not publicly reveal the actual table name.<br />
 </div>
<div>The variables are coming straight from the browser and are not &#8217;sanitized&#8217;, or filtered, in any way. So, our first demo to the client was to leave the password field empty and enter the following into the username box:<br />
 </div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">&#8216; OR &#8216;1&#8242; = &#8216;1<br />
 </span></span></div>
<div><span style=" ">When we first showed this to the client, they were a bit confused. Let&#8217;s see what that looks like when we insert it into the query above:<br />
 </span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">SELECT * FROM tablename WHERE user = &#8221; OR &#8216;1&#8242; = &#8216;1&#8242; AND passwrd = &#8216;$variable&#8217;</span></span>;<br />
 </div>
<div>Wow, so now we&#8217;re asking the database for any users where the username is empty OR 1 = 1 AND password = &#8221;. Guess what? The database will return a record because of the fact there&#8217;s an OR in there that evaluates true.<br />
 </div>
<div>At this point, we were successfully logged into the application. That concerned the client enough, however, there&#8217;s more. Much more. Part of the scary thing about SQL Injections is that they often allow you to execute more than one query. So, our next step was to try to execute some additional queries. The next thing we entered into the username box looked like this:<br />
 </div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">&#8216; OR &#8216;1&#8242; = &#8216;1&#8242;; DROP TABLE test_table_name;<br />
 </span></span></div>
<div>That threw an error. Here&#8217;s what the database saw when we ran that:</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">SELECT * FROM tablename WHERE user = &#8221; OR &#8216;1&#8242; = &#8216;1&#8242;; DROP TABLE test_table_name; &#8216; AND passwd = &#8221;;<br />
 </span></span></div>
<div>We have an unmatched quote in there. However, the error wasn&#8217;t handled in the application and it printed a message to the screen that said something along the lines of:<br />
 </div>
<div>You have an error in your SQL statement near (<span style="font-family:'courier new';"><span style="font-size:small;">SELECT * FROM tablename  user = &#8221; OR &#8216;1&#8242; = &#8216;1&#8242;; DROP TABLE test_table_name; &#8216; AND passwd = &#8221;;</span></span>) <br />
 </div>
<div>Guess what. Now the error message printed to the screen gave us the actual table name. And field names. That&#8217;s dangerous.<br />
 </div>
<div>So, with that attempt failing, but the important note about the error message revealing the table name, we moved on to the next part of the demo. Our next entry into the username box looked like this:<br />
 </div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">&#8216; OR &#8216;1&#8242; = &#8216;1&#8242;; DROP TABLE test_table_name; SELECT * FROM tablename WHERE &#8216;1&#8242; = &#8216;1<br />
 </span></span></div>
<div>Now, when the database sees that query, it looks like this:<br />
 </div>
<div><span style="font-size:small;"><span style="font-family:'courier new';">SELECT * FROM tablename WHERE user = &#8221; OR &#8216;1&#8242; = &#8216;1&#8242;; DROP TABLE test_table_name; SELECT * FROM tablename WHERE &#8216;1&#8242; = &#8216;1&#8242; AND passwrd = &#8221;;<br />
 </span></span></div>
<div>We now have 3 valid SQL Statements here:<br />
 </div>
<div><span style="font-size:small;"><span style="font-family:'courier new';">SELECT * FROM tablename WHERE user = &#8221; OR &#8216;1&#8242; = &#8216;1&#8242;;</span></span></div>
<div><span style="font-size:small;"><span style="font-family:'courier new';">DROP TABLE test_table_name;</span></span></div>
<div><span style="font-size:small;"><span style="font-family:'courier new';">SELECT * FROM tablename WHERE &#8216;1&#8242; = &#8216;1&#8242; AND passwrd = &#8221;;<br />
 </span></span></div>
<div>The first one will log us into this application. Nice, but not really the worst part of this situation. The second statement will delete the database table named &#8216;test_table_name&#8217;. Now, keep in mind that earlier, an error message told us an actual table name. We could easily substitute that, or, we could start guessing table names. Or, we could insert our own record, since we now know table names and field names from the error message earlier.<br />
 </div>
<div>To give the full effect, we literally created a table named test_table_name, showed the client the table in the database, typed that into the username box, and clicked &#8216;log in&#8217;. We were greeted with an error message. However, when we refreshed the table list, our test_table_name was gone. It had been deleted. Ouch. Just imagine if that was our users table, or some other table full of sensitive information&#8230;<br />
 </div>
<div>Joe Koenig</div>
<div>Creative Anvil</div>
<div><a href="http://www.creativeanvil.com/">St. Louis Web Design Firm</a></div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=The%20Anatomy%20of%20a%20SQL%20Injection&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fthe-anatomy-of-a-sql-injection%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/the-anatomy-of-a-sql-injection/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Convert a Word Document to PDF Using Java</title>
		<link>http://www.creativeanvil.com/blog/2008/convert-a-word-document-to-pdf-using-java/</link>
		<comments>http://www.creativeanvil.com/blog/2008/convert-a-word-document-to-pdf-using-java/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 21:15:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[JODConverter]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[OpenOffice]]></category>

		<category><![CDATA[PDF]]></category>

		<category><![CDATA[Word]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/convert-a-word-document-to-pdf-using-java/</guid>
		<description><![CDATA[I had a need today to convert a Word Document to a PDF using Java. This needed to be an automated process. A quick Google search was turning up a little empty handed. I kept finding people talking about &#8216;just open it in OpenOffice and export as a PDF&#8217;. Obviously, that doesn&#8217;t fit the automated [...]]]></description>
			<content:encoded><![CDATA[<div>I had a need today to convert a Word Document to a PDF using Java. This needed to be an automated process. A quick Google search was turning up a little empty handed. I kept finding people talking about &#8216;just open it in OpenOffice and export as a PDF&#8217;. Obviously, that doesn&#8217;t fit the automated requirement.<br />
 </div>
<div>Apache has a Java API, called POI, that allows you to access Microsoft formats from within Java. It looks handy, but I found some people complaining about the complexity of it. Some further searching turned up mention of something called <a href="http://artofsolving.com/opensource/jodconverter">JODConverter</a>. This is a fantastic project.<br />
 </div>
<div>JODConverter is essentially a Java library that utilizes <a href="http://www.openoffice.org/">OpenOffice</a>&#8217;s conversion engine to convert to and from any format that OpenOffice supports. This includes Word, Excel, PowerPoint, RTF, Plain Text, etc.<br />
 </div>
<div>I decided to see how easy it was going to be to use this library. Let&#8217;s face it, a lot of these open source projects claim to do all kinds of great things, but do not provide the greatest results. So, I created a small test project and wrote a simple class. Here&#8217;s what it looks like:<br />
 </div>
<div>
<pre>public class convertFile {
   public static void main(String[] args) {
      File inputFile = new File("resume-2.doc");</pre>
<pre>      File outputFile = new File("resume-2.pdf");</pre>
<pre>     OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);</pre>
<pre>     try {</pre>
<pre>        connection.connect();</pre>
<pre>     } catch(Exception e) {</pre>
<pre>     }

     DocumentConverter converter = new OpenOfficeDocumentConverter(connection);</pre>
<pre>     converter.convert(inputFile, outputFile);

     connection.disconnect();

   }</pre>
<pre>}</pre>
<p> </p></div>
<div>Obviously, there&#8217;s error-checking that is lacking. For example, the convert() method should be wrapped to ensure that a failed conversion doesn&#8217;t blow up your application, and something should be done if an exception is caught on the connection. However, this is the basic skeleton. Pretty cool.<br />
 </div>
<div>Basically, all this does is open a connection to OpenOffice, create a converter, and pass in the files to convert. JODConverter and OpenOffice handle everything else.<br />
 </div>
<div>The only caveat to this is that OpenOffice must be installed on the server and must be running as a headless app (the JODConverter README file explains how to do this). While that may not be ideal, it&#8217;s probably worth it for the amazing results this library provides.<br />
 </div>
<div>Great tool, highly recommended.<br />
 </div>
<div>Joe Koenig</div>
<div>Creative Anvil</div>
<div><a href="http://www.creativeanvil.com/">Search Engine Optimization</a> &amp; Web Application Development</div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Convert%20a%20Word%20Document%20to%20PDF%20Using%20Java&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fconvert-a-word-document-to-pdf-using-java%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/convert-a-word-document-to-pdf-using-java/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How To Create an iSCSI SAN using Heartbeat, DRBD, and OCFS2</title>
		<link>http://www.creativeanvil.com/blog/2008/how-to-create-an-iscsi-san-using-heartbeat-drbd-and-ocfs2/</link>
		<comments>http://www.creativeanvil.com/blog/2008/how-to-create-an-iscsi-san-using-heartbeat-drbd-and-ocfs2/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 01:21:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[DRBD]]></category>

		<category><![CDATA[Heartbeat]]></category>

		<category><![CDATA[OCFS]]></category>

		<category><![CDATA[OCFS2]]></category>

		<category><![CDATA[SAN]]></category>

		<category><![CDATA[iSCSI]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/how-to-create-an-iscsi-san-using-heartbeat-drbd-and-ocfs2/</guid>
		<description><![CDATA[Overview
A client had a need recently for a Storage Area Network (SAN). We were expanding the system to a small cluster in order to prepare for future growth. For those of you unfamiliar with a cluster environment, when you have multiple servers accessing the same data, you need a SAN in order to protect the [...]]]></description>
			<content:encoded><![CDATA[<div><span style="font-weight: bold;">Overview</span></div>
<div>A client had a need recently for a Storage Area Network (SAN). We were expanding the system to a small cluster in order to prepare for future growth. For those of you unfamiliar with a cluster environment, when you have multiple servers accessing the same data, you need a SAN in order to protect the data. Well, let me clarify that, when you have multiple servers <span style="font-style: italic;">writing </span>data you need a SAN. If they are only reading data, you can use something like NFS to export a drive.<br />
 </div>
<div>
<div>Let me provide a quick cluster / file system intro here&#8230; In a cluster, each server is a &#8216;node&#8217; of the cluster. In this case, the SAN is a server, and each server, or node, in the cluster, is actually a &#8216;client&#8217;. This is because there is 1 SAN server, and multiple &#8216;nodes&#8217; accessing the same services/data, therefore, clients. And when you have multiple clients that have access to write to the data, you need a &#8216;Cluster File System&#8217;. A cluster file system ensures that files do not get corrupted by two nodes trying to write data to the same file at the same time. So, it manages file locks and write-ordering, which are critical to protecting data.<br />
 </div>
<div><span style="font-weight: bold;">Problem?</span></div>
<div>A big part of the reason that I was looking for an open-source SAN solution was cost. We needed a reliable, low-cost solution. We really wanted to keep the budget around $10,000 or less.<br />
 </div>
<div><span style="font-weight: bold;">The solution?</span></div>
<div>Through some research and creative thinking, I realized we could build a SAN with commodity hardware, in this case, Dell 2950 Servers (2), and a Dell gigabit switch. For the software, we&#8217;d use <a href="http://www.centos.org/">CentOS 5</a> as the Operating System, <a href="http://www.drbd.org/">DRBD</a> to mirror the data, <a href="http://www.linux-ha.org/">Heartbeat</a> to manage the cluster and failover, <a href="http://oss.oracle.com/projects/ocfs2/">OCFS2</a> as the filesystem, and iSCSI to export the drive. Let me give a quick overview of these items:</div>
<p> </p>
<div><span style="font-weight: bold;">CentOS</span>: A downstream version of a very prominent North American Linux distributor. Virtually the same exact code, without the requirement to buy support in order to get updates.<br />
 </div>
<div><span style="font-weight: bold;">DRBD</span>: An amazing piece of software that acts at the block level to replicate data between servers. Basically, this piece of software mirrors all data writes from one server to the other, creating a network RAID 1 (mirror).<br />
 </div>
<div><span style="font-weight: bold;">Heartbeat</span>: A package that allows two servers to communicate and check if the other is still &#8216;alive&#8217;. If the software detects that one server has died, any services running on the &#8216;dead&#8217; server will automatically migrate over to the &#8216;live&#8217; server.<br />
 </div>
<div><span style="font-weight: bold;">OCFS2</span>: A cluster filesystem developed by Oracle. <br />
 </div>
<div>
<div><span style="font-weight: bold;">iSCSI</span>: A network transport that wraps SCSI commands, enabling a &#8216;node&#8217; to mount a drive, as if the drive were a local drive. iSCSI provides a reliable method for reading/writing data to a drive that is on a completely separate server, and could be on a separate network.</div>
<p> </p>
<div><span style="font-weight: bold;">The Setup</span></div>
<div>I installed the software the exact same on both Dell servers. The two dell servers were then connected to the gigabit switch (192.168.1.x), which also connected the other nodes to the SAN. I would NOT recommend using a 100Mbps switch, as you&#8217;ll likely saturate the line. 1Gbps provided me with enough bandwidth. The two SAN servers were also connected with a crossover cable on a separate network (10.0.0.x). This allowed DRBD to have a dedicated 1Gbps line to replicate data between the two servers. The &#8216;nodes&#8217; in the cluster mount the iSCSI drive over the local network.</div>
<p> </p>
<div><span style="font-weight: bold;">Configuration</span></div>
<div>Essentially, I followed all of the typical configuration steps for the above software. You&#8217;ll need a working installation of CentOS. Nothing too special, though. I prefer to keep my servers slim and install only the minimum, leaving off the graphical interface. The only exception to this is the cluster nodes, because <span style="font-style: italic;">OCFS requires the GUI</span> in order to set-up and maintain the cluster configuration.</div>
<div>I installed DRBD via yum:</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">yum install drbd</span></span></div>
<p> </p>
<div>My DRBD configuration file looks like this:</div>
<div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">global {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    usage-count yes;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">}</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">common {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  syncer { rate 100M; }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">}</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">resource drbd0 {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  protocol C;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  handlers {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    pri-on-incon-degr &#8220;echo o &gt; /proc/sysrq-trigger ; halt -f&#8221;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    pri-lost-after-sb &#8220;echo o &gt; /proc/sysrq-trigger ; halt -f&#8221;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    local-io-error &#8220;echo o &gt; /proc/sysrq-trigger ; halt -f&#8221;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    outdate-peer &#8220;/usr/lib64/heartbeat/drbd-peer-outdater&#8221;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  startup {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    wfc-timeout  600;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    degr-wfc-timeout 120;    # 2 minutes.</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  disk {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    on-io-error   detach;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    fencing resource-only;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  net {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    cram-hmac-alg &#8220;sha1&#8243;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    shared-secret &#8220;ImNotPostingThatOnTheInternet&#8221;;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    </span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    after-sb-0pri disconnect;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    after-sb-1pri disconnect;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    after-sb-2pri disconnect;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    rr-conflict disconnect;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  on san1.xxxxxx.com {   </span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    device     /dev/drbd0;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    disk       /dev/sdb1;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    address    10.0.0.1:7788;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    flexible-meta-disk  internal;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  on san2.xxxxxx.com {</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    device    /dev/drbd0;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    disk      /dev/sdb1;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    address   10.0.0.2:7788;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">    flexible-meta-disk internal;</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">  }</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">}</span></span></div>
<div><span style=" ;font-family:'courier new';font-size:13px;"><br />
</span></div>
<div>While the full configuration of DRBD is outside the scope of this post (and LinBit has a great <a href="http://www.drbd.org/users-guide/">User Guide</a>), there are a few things to point out. First off, I have DRBD communicating on its own private network, on port 7788. Also, note that /dev/sb1 is where my 1TB RAID array is located (as far as CentOS is concerned). This is my shared storage.</div>
<p> </p>
<div>So, at this point we have DRBD working. Next, let&#8217;s get Heartbeat up and running to manage the drive and failover. Again, full configuration of Heartbeat is outside the scope of this posting, but again, g<a href="http://www.linux-ha.org/">reat information is available on their web site</a>.</div>
<div>For this set-up, my heartbeat config (cib.xml) looks like this (I apologize in advance for the wrapping):</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;"><br />
</span></span></div>
<p><span style="font-family:'courier new';"><span style="font-size:small;">&lt;cib admin_epoch=&#8221;0&#8243; have_quorum=&#8221;true&#8221; num_peers=&#8221;1&#8243; cib_feature_revision=&#8221;1.3&#8243; generated=&#8221;true&#8221; epoch=&#8221;242&#8243; ignore_dtd=&#8221;false&#8221; nu<br />
m_updates=&#8221;13&#8243; cib-last-written=&#8221;Sat Feb 23 13:51:32 2008&#8243; ccm_transition=&#8221;1&#8243; dc_uuid=&#8221;0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243;&gt;<br />
&lt;configuration&gt;<br />
&lt;crm_config&gt;<br />
&lt;cluster_property_set id=&#8221;default&#8221;&gt;<br />
&lt;attributes&gt;<br />
&lt;nvpair id=&#8221;symmetric-cluster&#8221; name=&#8221;symmetric-cluster&#8221; value=&#8221;true&#8221;/&gt;<br />
&lt;nvpair id=&#8221;no-quorum-policy&#8221; name=&#8221;no-quorum-policy&#8221; value=&#8221;stop&#8221;/&gt;<br />
&lt;nvpair id=&#8221;stonith-enabled&#8221; name=&#8221;stonith-enabled&#8221; value=&#8221;false&#8221;/&gt;<br />
&lt;nvpair id=&#8221;short-resource-names&#8221; name=&#8221;short-resource-names&#8221; value=&#8221;true&#8221;/&gt;<br />
&lt;nvpair id=&#8221;is-managed-default&#8221; name=&#8221;is-managed-default&#8221; value=&#8221;true&#8221;/&gt;<br />
&lt;nvpair id=&#8221;transition-idle-timeout&#8221; name=&#8221;transition-idle-timeout&#8221; value=&#8221;60000&#8243;/&gt;<br />
&lt;nvpair id=&#8221;default-resource-stickiness&#8221; name=&#8221;default-resource-stickiness&#8221; value=&#8221;INFINITY&#8221;/&gt;<br />
&lt;nvpair id=&#8221;stop-orphan-resources&#8221; name=&#8221;stop-orphan-resources&#8221; value=&#8221;false&#8221;/&gt;<br />
&lt;nvpair id=&#8221;stop-orphan-actions&#8221; name=&#8221;stop-orphan-actions&#8221; value=&#8221;false&#8221;/&gt;<br />
&lt;nvpair id=&#8221;remove-after-stop&#8221; name=&#8221;remove-after-stop&#8221; value=&#8221;false&#8221;/&gt;<br />
&lt;/attributes&gt;<br />
&lt;/cluster_property_set&gt;<br />
&lt;cluster_property_set id=&#8221;cib-bootstrap-options&#8221;&gt;<br />
&lt;attributes&gt;<br />
&lt;nvpair id=&#8221;cib-bootstrap-options-dc-version&#8221; name=&#8221;dc-version&#8221; value=&#8221;2.1.3-node: 552305612591183b1628baa5bc6e903e0f1e26<br />
a3&#8243;/&gt;<br />
&lt;/attributes&gt;<br />
&lt;/cluster_property_set&gt;<br />
&lt;/crm_config&gt;<br />
&lt;nodes&gt;<br />
&lt;node id=&#8221;c343bdeb-26d4-405b-b852-04ed6a2a27c4&#8243; uname=&#8221;san1.xxxxxx.com&#8221; type=&#8221;normal&#8221;/&gt;<br />
&lt;node id=&#8221;0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243; uname=&#8221;san2.xxxxxx.com&#8221; type=&#8221;normal&#8221;/&gt;<br />
&lt;/nodes&gt;<br />
&lt;resources&gt;<br />
&lt;group id=&#8221;san_group&#8221;&gt;<br />
&lt;primitive class=&#8221;heartbeat&#8221; id=&#8221;drbd&#8221; provider=&#8221;heartbeat&#8221; type=&#8221;drbddisk&#8221;&gt;<br />
&lt;operations&gt;<br />
&lt;op id=&#8221;drbd_monitor&#8221; interval=&#8221;120s&#8221; name=&#8221;monitor&#8221; timeout=&#8221;60s&#8221;/&gt;<br />
&lt;/operations&gt;<br />
&lt;instance_attributes id=&#8221;drbd_attributes&#8221;&gt;<br />
&lt;attributes&gt;<br />
&lt;nvpair id=&#8221;drbd_resource_name&#8221; name=&#8221;1&#8243; value=&#8221;drbd0&#8243;/&gt;<br />
&lt;/attributes&gt;<br />
&lt;/instance_attributes&gt;<br />
&lt;/primitive&gt;<br />
&lt;primitive id=&#8221;ip_resource_1&#8243; class=&#8221;ocf&#8221; type=&#8221;IPaddr&#8221; provider=&#8221;heartbeat&#8221;&gt;<br />
&lt;instance_attributes id=&#8221;ip_attributes&#8221;&gt;<br />
&lt;attributes&gt;<br />
&lt;nvpair id=&#8221;ipaddr_ip&#8221; name=&#8221;ip&#8221; value=&#8221;192.168.1.200&#8243;/&gt;<br />
&lt;/attributes&gt;<br />
&lt;/instance_attributes&gt;<br />
&lt;/primitive&gt;<br />
&lt;primitive id=&#8221;ietdid&#8221; class=&#8221;lsb&#8221; type=&#8221;iscsi-target&#8221;/&gt;<br />
&lt;/group&gt;<br />
&lt;/resources&gt;<br />
&lt;constraints&gt;<br />
&lt;rsc_location id=&#8221;run_ip_resource_1&#8243; rsc=&#8221;ip_resource_1&#8243;&gt;<br />
&lt;rule id=&#8221;pref_run_ip_resource_1&#8243; score=&#8221;100&#8243;&gt;<br />
&lt;expression attribute=&#8221;#uname&#8221; operation=&#8221;eq&#8221; value=&#8221;san1&#8243; id=&#8221;san1&#8243;/&gt;<br />
&lt;/rule&gt;<br />
&lt;/rsc_location&gt;<br />
&lt;rsc_order id=&#8221;order1&#8243; from=&#8221;drbd&#8221; action=&#8221;start&#8221; type=&#8221;before&#8221; to=&#8221;ip_resource_1&#8243;/&gt;<br />
&lt;rsc_order id=&#8221;order2&#8243; from=&#8221;ip_resource_1&#8243; action=&#8221;start&#8221; type=&#8221;before&#8221; to=&#8221;ietdid&#8221;/&gt;<br />
&lt;/constraints&gt;<br />
&lt;/configuration&gt;<br />
&lt;status&gt;<br />
&lt;node_state id=&#8221;0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243; uname=&#8221;san2.xxxxx.com&#8221; crmd=&#8221;online&#8221; crm-debug-origin=&#8221;do_update_r<br />
esource&#8221; shutdown=&#8221;0&#8243; in_ccm=&#8221;true&#8221; ha=&#8221;active&#8221; join=&#8221;member&#8221; expected=&#8221;member&#8221;&gt;<br />
&lt;lrm id=&#8221;0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243;&gt;<br />
&lt;lrm_resources&gt;<br />
&lt;lrm_resource id=&#8221;drbd&#8221; type=&#8221;drbddisk&#8221; class=&#8221;heartbeat&#8221; provider=&#8221;heartbeat&#8221;&gt;<br />
&lt;lrm_rsc_op id=&#8221;drbd_monitor_0&#8243; operation=&#8221;monitor&#8221; crm-debug-origin=&#8221;do_update_resource&#8221; transition_key=&#8221;3:0:379e97e4-<br />
cfbd-47c4-8da9-2fa60ac47451&#8243; transition_magic=&#8221;0:7;3:0:379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; call_id=&#8221;2&#8243; crm_feature_set=&#8221;2.0&#8243; rc_co<br />
de=&#8221;7&#8243; op_status=&#8221;0&#8243; interval=&#8221;0&#8243; op_digest=&#8221;ea09f933342d2b2407fb06548c8249df&#8221;/&gt;<br />
&lt;lrm_rsc_op id=&#8221;drbd_start_0&#8243; operation=&#8221;start&#8221; crm-debug-origin=&#8221;do_update_resource&#8221; transition_key=&#8221;7:0:379e97e4-cfbd<br />
-47c4-8da9-2fa60ac47451&#8243; transition_magic=&#8221;4:1;7:0:379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; call_id=&#8221;5&#8243; crm_feature_set=&#8221;2.0&#8243; rc_code=&#8221;<br />
1&#8243; op_status=&#8221;4&#8243; interval=&#8221;0&#8243; op_digest=&#8221;ea09f933342d2b2407fb06548c8249df&#8221;/&gt;<br />
&lt;lrm_rsc_op id=&#8221;drbd_stop_0&#8243; operation=&#8221;stop&#8221; crm-debug-origin=&#8221;do_update_resource&#8221; transition_key=&#8221;1:1:379e97e4-cfbd-4<br />
7c4-8da9-2fa60ac47451&#8243; transition_magic=&#8221;0:0;1:1:379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; call_id=&#8221;6&#8243; crm_feature_set=&#8221;2.0&#8243; rc_code=&#8221;0&#8243;<br />
op_status=&#8221;0&#8243; interval=&#8221;0&#8243; op_digest=&#8221;ea09f933342d2b2407fb06548c8249df&#8221;/&gt;<br />
&lt;/lrm_resource&gt;<br />
&lt;lrm_resource id=&#8221;ip_resource_1&#8243; type=&#8221;IPaddr&#8221; class=&#8221;ocf&#8221; provider=&#8221;heartbeat&#8221;&gt;<br />
&lt;lrm_rsc_op id=&#8221;ip_resource_1_monitor_0&#8243; operation=&#8221;monitor&#8221; crm-debug-origin=&#8221;do_update_resource&#8221; transition_key=&#8221;4:0:<br />
379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; transition_magic=&#8221;0:7;4:0:379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; call_id=&#8221;3&#8243; crm_feature_set=&#8221;2<br />
.0&#8243; rc_code=&#8221;7&#8243; op_status=&#8221;0&#8243; interval=&#8221;0&#8243; op_digest=&#8221;fbfabc6bc90887bc11bf8ed485ec821d&#8221;/&gt;<br />
&lt;/lrm_resource&gt;<br />
&lt;lrm_resource id=&#8221;ietdid&#8221; type=&#8221;iscsi-target&#8221; class=&#8221;lsb&#8221;&gt;<br />
&lt;lrm_rsc_op id=&#8221;ietdid_monitor_0&#8243; operation=&#8221;monitor&#8221; crm-debug-origin=&#8221;do_update_resource&#8221; transition_key=&#8221;5:0:379e97e<br />
4-cfbd-47c4-8da9-2fa60ac47451&#8243; transition_magic=&#8221;0:7;5:0:379e97e4-cfbd-47c4-8da9-2fa60ac47451&#8243; call_id=&#8221;4&#8243; crm_feature_set=&#8221;2.0&#8243; rc_<br />
code=&#8221;7&#8243; op_status=&#8221;0&#8243; interval=&#8221;0&#8243; op_digest=&#8221;f2317cad3d54cec5d7d7aa7d0bf35cf8&#8243;/&gt;<br />
&lt;/lrm_resource&gt;<br />
&lt;/lrm_resources&gt;<br />
&lt;/lrm&gt;<br />
&lt;transient_attributes id=&#8221;0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243;&gt;<br />
&lt;instance_attributes id=&#8221;status-0a38edda-e639-4f27-87c2-142ef3ff1fa9&#8243;&gt;<br />
&lt;attributes&gt;<br />
&lt;nvpair id=&#8221;status-0a38edda-e639-4f27-87c2-142ef3ff1fa9-probe_complete&#8221; name=&#8221;probe_complete&#8221; value=&#8221;true&#8221;/&gt;<br />
&lt;nvpair id=&#8221;status-0a38edda-e639-4f27-87c2-142ef3ff1fa9-fail-count-drbd&#8221; name=&#8221;fail-count-drbd&#8221; value=&#8221;1&#8243;/&gt;<br />
&lt;/attributes&gt;<br />
&lt;/instance_attributes&gt;<br />
&lt;/transient_attributes&gt;<br />
&lt;/node_state&gt;<br />
&lt;/status&gt;<br />
&lt;/cib&gt;</span></span></p>
<p> </p></div>
<div>
<div>The only real things to point out here are that I have a &#8216;drbddisk&#8217; defined and I&#8217;ve told heartbeat to manage it, as well as that I have defined a virtual IP address - 192.168.1.200. This IP will &#8216;float&#8217; between the two servers, depending on which server is active. THIS IS THE IP THAT ISCSI WILL RUN ON!!! That&#8217;s critical. That allows me to configure the nodes to look for iSCSI drives on that IP and still have the cluster failover properly. That means, if the primary server fails, the secondary server should come up and essentially tell DRBD &#8216;you are now primary, take over&#8217;. The other piece to heartbeat is the ha.cf, which is pretty straightforward:</div>
<p> </p>
<div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">keepalive 3</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">deadtime 15</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">warntime 9</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">initdead 30</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">auto_failback off</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">node san1.xxxxxx.com san2.xxxxxx.com</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">udpport 694</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">baud 19200</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">serial /dev/ttyS0</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">crm yes</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">bcast eth0</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">use_logd yes</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">ping 192.168.1.1</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">respawn hacluster /usr/lib64/heartbeat/dopd</span></span></div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">apiauth dopd gid=haclient uid=hacluster</span></span></div>
</div>
<p> </p>
<div>Basically, this file defines the cluster members and how the cluster will communicate. In my case, I&#8217;m communicating over a serial port AND over ethernet. This is critical - you need more than one communication path. If you only communicate over ethernet and your network has a small hiccup, both nodes will think the other went away and will BOTH try to be primary, which can be a very bad thing.</div>
<p> </p>
<div>OK, so here we are, we have DRBD set up to mirror the data between the two servers and heartbeat set up to manage the failover. Almost there. Now, we need a way to export the device. For this, I&#8217;m using iSCSI. </div>
<p> </p>
<div>I choose to use IETD -<a href="http://iscsitarget.sourceforge.net/"> </a><a href="http://iscsitarget.sourceforge.net/">iSCSI Enterprise Target</a>. Installation was really quite simple. I downloaded the file, untarred it, and just followed the instructions in the README - basically, just make &amp;&amp; make install. Configuration is pretty straight-forward, too. There is a default config file that pretty much has everything you need, just a few things to update, such as your target name. Honestly, the file is commented so good that I&#8217;m not going to post it. All I had to do was specify the Target name, the authentication username/password (which is so basic that it hardly provides an protection) and the location of the drive to export.</div>
<p> </p>
<div>This is the one thing that threw me off for a bit - you MUST EXPORT THE DRBD DRIVE. If you export your physical drive, the data will not be mirrored. So, in my case, this looked like:</div>
<div><span style="font-family:'courier new';"><span style="font-size:small;">Lun 0 Path=/dev/drbd0,Type=fileio</span></span></div>
<div><span style=" ;font-family:'courier new';font-size:13px;"><br />
</span></div>
<div>Now, I&#8217;ve got everything I need set up on the SAN servers. Remember, I have 2 servers for the failover, so all of this must be done on both servers. Time for the nodes&#8230;</div>
<p> </p>
<div>Each node will need OCFS2 and OCFS2 Tools installed. Again, this is beyond the scope of this document. However, Oracle provides RPMS for RHEL, which will install just fine on CentOS. Again, for the initial setup, you need the GUI (X-Windows, Gnome, KDE, etc). The GUI generates a config file for OCFS2. Just follow the instructions provided by Oracle for this step. It&#8217;s really pretty simple. You&#8217;re basically just naming the nodes and assigning them to a cluster.</div>
<p> </p>
<div>The only trick with the nodes is to discover the iSCSI drive and add it to /etc/fstab so that it finds it on boot. You&#8217;ll need iscsi-initiator-utils for RHEL5 or CentOS 5. Basically, once you have that installed, you&#8217;ll just need to:</div>
<div><span style="color: #333333; "><span style="font-family:'courier new';"><span style="font-size:small;">iscsiadm -m discovery -t sendtargets -p </span></span></span></div>
<div><span style="color: #333333;  font-family:'courier new';font-size:13px;"><br />
</span></div>
<div><span style="color: #333333; ">You can then login to the device you find with:</span></div>
<div><span style="color: #333333;  font-family:'courier new';font-size:13px;"><br />
</span></div>
<p> </p>
<div><span style="color: #333333; "><span style="font-family:'courier new';"><span style="font-size:small;">iscsiadm -m node -T iqn.2001-04.il.org.tournament:diskserv.disk1 -p :3260,1 -l</span></span></span></div>
<div><span style="color: #333333;  font-family:'courier new';font-size:13px;"><br />
</span></div>
<p> </p>
<div>To have the discovery happen automatically, you&#8217;ll need to create a file in /etc/iscsi/ called &#8216;initiatorname.iscsi&#8217;. You can read more <a href="http://pitmanweb.com/blog/index.php?blog=2&amp;title=linux_serve_iscsi_from_redhat_el5_rhel5&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">at this site.</a></div>
<div><span style="color: #333333;"><br />
</span></div>
<div><span style="color: #333333;">After you can see the drive, make sure you format it with OCFS. Again, this is very simple through the GUI that Oracle provides.</span></div>
<div><span style="color: #333333;"><br />
</span></div>
<div><span style="color: #333333;">At this point, we&#8217;re ready to edit the /etc/fstab file. I added:</span></div>
<div><span style="color: #333333;"><span style="font-family:'courier new';"><span style="font-size:small;">/dev/sdb                /data                   ocfs2   _netdev         0 0</span></span></span></div>
<div><span style="color: #333333;"><br />
</span></div>
<div><span style="color: #333333;">The _netdev command tells the OS that this drive is mounted over the network, so we need to wait for the network to be available before attempting to mount this drive. By this point, OCFS will have started up, so it will be ready to handle the drive. You can see that I&#8217;m mounting mine to a /data directory.</span></div>
<div><span style="color: #333333;"><br />
</span></div>
<div><span style="color: #333333;">Next? Test it out!! Make sure that OCFS is set to start on boot on all of the nodes, which it should be. </span></div>
<div><span style="color: #333333;  font-family:verdana;font-size:13px;"><br />
</span></div>
</div>
</div>
<div><span style="font-weight: bold;">What would I do differently?</span></div>
<div>I&#8217;d buy a better switch. One that had more robust support for VLAN&#8217;s. Basically, the dell switch I bought is a web-managed switch. I&#8217;d really recommend a fully-managed switch for this type of set-up. Yes, it&#8217;s more expensive, but it will give you much better VLAN control and growth ability.</div>
<p> </p>
<div>I didn&#8217;t even look into GFS when I set this up. I&#8217;d now explore it as an alternative to OCFS2, mainly due to the fact that RedHat developed and maintains it, which makes me think that RHEL and CentOS will probably integrate better with it, than with OCFS2.</div>
<p> </p>
<div><span style="font-weight: bold;">Additional Notes:</span></div>
<div>Please, please, please do NOT put this kind of setup on the internet. It&#8217;s not really that safe. Yes, your web servers will need to be public. That&#8217;s what a DMZ is for. Please make sure you have some sort of firewall between the nodes that are public and the SAN servers. If not, your data is at risk&#8230;</div>
<p> </p>
<div>Lastly, I&#8217;ll gladly take comments / questions on this setup. It can be tricky to get right, but it&#8217;s usually a small configuration problem. Make sure you test each individual step along the way. Make sure you get DRBD working right, then add in Heartbeat, then add in iSCSI, then add in OCFS. If you try to do it all at once and hope it works, you&#8217;ll have a heck of a time trying to figure out where your problem is&#8230;</div>
<p> </p>
<div>Joe Koenig</div>
<div>Creative Anvil</div>
<div><a href="http://www.creativeanvil.com/">Search Engine Marketing Firm</a></div>
</div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=How%20To%20Create%20an%20iSCSI%20SAN%20using%20Heartbeat%2C%20DRBD%2C%20and%20OCFS2&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fhow-to-create-an-iscsi-san-using-heartbeat-drbd-and-ocfs2%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/how-to-create-an-iscsi-san-using-heartbeat-drbd-and-ocfs2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Account Security Issue?</title>
		<link>http://www.creativeanvil.com/blog/2008/google-account-security-issue/</link>
		<comments>http://www.creativeanvil.com/blog/2008/google-account-security-issue/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 15:33:00 +0000</pubDate>
		<dc:creator>jkoenig</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.creativeanvil.com/blog/2008/google-account-security-issue/</guid>
		<description><![CDATA[I had an odd thing happen to me the other day. I was using my Google account in Firefox. I have multiple Google accounts - one for personal, one for business. I had first been logged into my business account, then logged out and logged in to my personal account. All was well, except when [...]]]></description>
			<content:encoded><![CDATA[<p>I had an odd thing happen to me the other day. I was using my Google account in Firefox. I have multiple Google accounts - one for personal, one for business. I had first been logged into my business account, then logged out and logged in to my personal account. All was well, except when I clicked on a report in my Analytics list, I was taken to the &#8216;Analytics&#8217; tab in my business account. So, I was able to see site reports for the account that I was no longer logged into.  I took some screenshots, because it was odd, and e-mailed Google to let them know they may have a security issue. This happened back on January 29th, and after giving Google ample time to reply / fix the issue, I&#8217;m now posting it.
<div></div>
<div>Take a look at these screen shots - you can click on them to view the full-size screen shot.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_-2iAOYTQayE/R9qhXB0uVGI/AAAAAAAAAAk/9AIZyzJ_88s/s1600-h/Picture+5.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_-2iAOYTQayE/R9qhXB0uVGI/AAAAAAAAAAk/9AIZyzJ_88s/s400/Picture+5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5177628138614445154" /></a></p>
<p>On the screen shot below, note the two site names listed in the report listing.
<div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_-2iAOYTQayE/R9qfcx0uVEI/AAAAAAAAAAU/LNFVobxPVoQ/s1600-h/Picture+6.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_-2iAOYTQayE/R9qfcx0uVEI/AAAAAAAAAAU/LNFVobxPVoQ/s400/Picture+6.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5177626038375437378" /></a>
<div>Now, on this next screenshot, take a look at the name of the site that I am viewing report data for. It&#8217;s not one of the two reports listed.</div>
<div> </div>
<div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_-2iAOYTQayE/R9qggh0uVFI/AAAAAAAAAAc/aDXzF-X4XqU/s1600-h/Picture+8.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_-2iAOYTQayE/R9qggh0uVFI/AAAAAAAAAAc/aDXzF-X4XqU/s400/Picture+8.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5177627202311574610" /></a></p>
<div> </div>
<div>I&#8217;m a huge fan of Google - I think they do a great job and provide great tools. However, their customer support completely failed to understand what was going on here, even with screen shots.</div>
<div> </div>
<div> </div>
<div> </div>
<div>Below is the e-mail correspondence with Google. The original message from me was submitted through their support form.</div>
<div></div>
<div> </div>
<div> </div>
<div>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">From: xxx@creativeanvil.com</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Subject: Security Issue with Adwords / Analytics</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Date: Tue, 29 Jan 2008 15:24:01 -0800</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">I have two different google accounts - one for work and one for </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">personal. When logged into my personal account, clicking on Analytics </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">took me to the right spot, but clicking on a report took me to my work </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">account &#8212; actually, into my work AdWords account, with the Analytics </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">tab selected. I have used the same browser for both, but I specifically </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">logged out of the work account, then logged into the personal account. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">I know it was logged in properly because I saw the right content in my </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">google home page, my webmaster tools, but not my analytics. I have </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">screen shots that I can e-mail of the different screens and what I got </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">when I clicked different links. I&#8217;d be glad to send them so that you </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">can verify this.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">AdsUserLocale: en_US</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Language: en</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Name: Joe Koenig</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Source: cuf</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">topic: Other</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8212;&#8212;&#8212;- NEXT MESSAGE &#8212;&#8212;&#8212;</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Hello Joe,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Thank you for your email. I understand you are concerned as while you</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">try</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">to view the reports in one account, you are able to access the reports</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">of</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">some other account. To help us troubleshoot further it would be</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">advisable</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">if you could send a direct response to this email with the relevant</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">screenshots and the login email addresses you are trying to access your</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">account with. It would be better if you could include your work login</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">email address and your personal login email address. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">If you have additional questions, please visit our Help Center at</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">https://adwords.google.com/support to find answers to many frequently</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">asked questions. Or, try our Learning Center at</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">http://www.google.com/adwords/learningcenter/ for self-paced lessons</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">that</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">cover the scope of AdWords.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">We look forward to providing you with the most effective advertising</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">available. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Sincerely,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Suchi Kumar</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">The Google AdWords Team</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">To access your AdWords account, please log in at:</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">https://adwords.google.com</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8212;&#8212;- NEXT MESSAGE &#8212;&#8212;&#8211;</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">From: Joseph Koenig <xxx@creativeanvil.com></xxx@creativeanvil.com></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Subject: Re: [#237202376] Security Issue with Adwords / Analytics</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Date: Wed, 30 Jan 2008 08:49:11 -0600</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Thanks for the response. Attached are screen shots. Picture 7.png shows </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">the link in the status bar of the browser that I got when hovering over </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">the report link. I wasn&#8217;t sure if anything in the parameters being </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">passed in would be helpful. Other than that, the pictures just show the </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">progression of screens from my account home page, to the analytics </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">report. I was logged in as &#8220;xxxx@koenigland.com&#8221;, but I was seeing </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">analytics reports for &#8220;xxxx@creativeanvil.com&#8221;. This was on Firefox </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">2.0.11 on Mac OS 10.5.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">*Joe Koenig*</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">*Creative Anvil, Inc.*</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">*Phone: *314.692.0338</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">1346 Baur Blvd.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Olivette, MO 63132</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">xxxx@creativeanvil.com</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">http://www.creativeanvil.com</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8212;&#8212; NEXT MESSAGE &#8212;&#8212;</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Hello Joseph,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Thank you for sending us this information. I&#8217;ll be happy to assist you in</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">this situation. I see that you&#8217;re having trouble while toggling between</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">two login email address for two different Analytics accounts. I have</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">escalated this issue to our Analytics team. They&#8217;re currently</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">investigating the situation, and we&#8217;ll contact you as soon as we&#8217;ve found</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">a resolution. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">In the meantime, I encourage you to log in to your accounts from two</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">different browsers. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Thank you for your patience and apologize for any inconvenience.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Sincerely,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Seva</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">The Google AdWords Team</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">To access your AdWords account, please log in at:</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">https://adwords.google.com</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span"  style="font-family:georgia;"><span class="Apple-style-span"  style="font-size:medium;">OK, at this point, I&#8217;m thinking &#8216;What?!??! Trouble toggling between accounts!?!?! Clearly, they don&#8217;t get it&#8230;.&#8217; So, I wait a bit and this is the response I then get from the Adwords team&#8230;</span></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span"   style=" ;font-family:georgia;font-size:16px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span"   style=" ;font-family:georgia;font-size:16px;"></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Hello Joseph,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Thank you for your patience while we researched this issue. I understand</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">you&#8217;re concerned about your Analytics reports for the website</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8216;http://www.koenigland.com&#8217; showing in your Analytics account with the</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">login email address &#8216;xxxx@koenigland.com&#8217; which you expected would show in</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">the account with the login &#8216;xxxx@creativeanvil.com.&#8217; I would like to</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">explain that in the site &#8216;http://www.koenigland.com,&#8217; you&#8217;ve installed the</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">tracking code for the Analytics account ID &#8216;UA-2618736-2&#8242; which is</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">associated with the email address &#8216;xxxx@koenigland.com.&#8217; This is the reason</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">why your Analytics reports for this site is showing in an account</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">different from the one you intended. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">If you would like to receive data for this site in your account with the</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">login email address </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#8216;xxxx@creativeanvil.com,&#8217; you&#8217;ll need to place the appropriate code on the</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">site. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">To view your personalized Google Analytics tracking code, please follow</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">the steps in the following Help Center article:</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">http://www.google.com/support/googleanalytics/bin/answer.py?answer=55603&amp;utm_id=cr</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">I hope this helps clarify your concern. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">As always, we look forward to providing you with the most effective</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">advertising available. </p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Sincerely,</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Seva</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">The Google AdWords Team</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span"  style="font-family:georgia;"><span class="Apple-style-span"  style="font-size:medium;">At what point did I say I expected them to both show up the same account!?!?! I said I was seeing them from the wrong account! There&#8217;s a security problem somewhere here, and their low-level techs don&#8217;t even have the ability to recognize that and pass it on to the appropriate team. I gave up at this point. As I said, this was back in January. In fact, the last email was 2/4/08. If they haven&#8217;t had a chance to fix it yet, not my fault. If anyone can explain how this happens, or how to reliably duplicate the security breach, I&#8217;d love to hear it. I&#8217;ve tried it again, but only once or twice and couldn&#8217;t duplicate. I figured someone with some more time may want to give this a try and see what they come up with. All I know is that I did NOT quit firefox in between switching from accounts and had been logged into my adwords account before logging out and going back into analytics. Any ideas anyone</span><span class="Apple-style-span"  style="font-size:medium;">?</span></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span" style="font-family: georgia;"><br /></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span" style="font-family: georgia;">Joe Koenig</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span" style="font-family: georgia;">Creative Anvil</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span class="Apple-style-span" style="font-family: georgia;"><a href="http://www.creativeanvil.com/">Web Design and Development, St. Louis</a></span></p>
</p>
</p>
</div>
</div>
</div>
</div>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Creative%20Anvil&amp;siteurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F&amp;linkname=Google%20Account%20Security%20Issue%3F&amp;linkurl=http%3A%2F%2Fwww.creativeanvil.com%2Fblog%2F2008%2Fgoogle-account-security-issue%2F"><img src="http://www.creativeanvil.com/blog/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeanvil.com/blog/2008/google-account-security-issue/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
