<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Snipe.Net &#187; Web Development</title>
	<atom:link href="http://www.snipe.net/topics/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.snipe.net</link>
	<description>Bitterness never tasted so sweet</description>
	<lastBuildDate>Tue, 24 Jan 2012 04:30:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Detecting Fraud in Facebook Contests</title>
		<link>http://www.snipe.net/2012/01/detecting-fraud-in-facebook-contests/</link>
		<comments>http://www.snipe.net/2012/01/detecting-fraud-in-facebook-contests/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 02:30:30 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook contests]]></category>
		<category><![CDATA[fraud]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3555</guid>
		<description><![CDATA[Whatever your feelings on Facebook, it&#8217;s pretty clear that it&#8217;s here to stay. If your company or organization has considered running a promotional Facebook contest, this is crash course in detecting fraud because if your prize is worth anything to anyone, you will encounter fraud, without exception. I am not going to specifically address the [...]]]></description>
			<content:encoded><![CDATA[<p>Whatever your feelings on Facebook, it&#8217;s pretty clear that it&#8217;s here to stay. If your company or organization has considered running a promotional Facebook contest, this is crash course in detecting fraud because if your prize is worth anything to anyone, you will encounter fraud, without exception.</p>
<p><span id="more-3555"></span><br />
I am not going to specifically address the topic of scripted attacks (such as click-jacking, like-jacking, using tools like Selenium, etc) used to game contests. There are just too many variations, and frankly, many of the data analysis concepts here would apply to that scenario as well. </p>
<p><strong>Understand that I Am Not a Lawyer, and am NOT giving you legal advice here.</strong> The intended audience for this article is application developers, database architects and product directors, as we discuss some fundamental concepts that must be integrated into your contest application before even a single line of code is written. Many of these concepts can be applied to non-Facebook online contests, but some are Facebook specific.</p>
<p>Also, if you got to this article because you&#8217;re trying to learn how to game a Facebook contest, please die in a fucking fire. You are a useless piece of shit, and people like you are what is wrong with the world. </p>
<p><strong>First things first, and a little bit off-topic, if you&#8217;re planning on creating a Facebook contest, be sure your contest abides by Facebook&#8217;s promotional policy guidelines.</strong> They&#8217;re a pretty quick read, but failing to read them before deploying a contest on Facebook may result in Facebook disabling your contest for policy violation. You can (and should) <a href="http://www.facebook.com/promotions_guidelines.php" target="_blank">read the whole set of guidelines here</a>, but since we&#8217;re about to discuss planning your contest app, the ones you really need to be mindful of are:</p>
<ol>
<li>You must not use Facebook features or functionality as a promotion&#8217;s registration or entry mechanism. For example, the act of liking a Page or checking in to a Place cannot automatically register or enter a promotion participant. </li>
<li>You must not condition registration or entry upon the user taking any action using any Facebook features or functionality other than liking a Page, checking in to a Place, or connecting to your app. For example, you must not condition registration or entry upon the user liking a Wall post, or commenting or uploading a photo on a Wall.</li>
<li>You must not use Facebook features or functionality, such as the Like button, as a voting mechanism for a promotion.</li>
<li>You must not notify winners through Facebook, such as through Facebook messages, chat, or posts on profiles (timelines) or Pages.</li>
</ol>
<p><strong>Basically, this means that you can&#8217;t use any of the native Facebook platform tools as voting or winning mechanics.</strong> You can like-gate an app, requiring the user to like an app or page before being shown the contest sign-up form, but you cannot use the act of liking the app or page as the registration itself. You cannot award points or incentives on a Facebook share, but you CAN award points or incent the conversion. So if your app lets me invite people to your app, you can award me points for every one of my friends that allows the app and participates, but you cannot award me points based on how many people I invite that do not convert to app users or clickthroughs or what have you.</p>
<p>There&#8217;s a little bit of nuance to it, but the general rule is just to avoid using the platform for stuff that determines who wins or loses, period. That part has nothing specifically to do with gaming a Facebook contest (or the prevention of gaming a Facebook contest), but it&#8217;s pretty important, and will influence some pretty core mechanics in your contest, so don&#8217;t gloss over them.</p>
<h3>Rule #1 of running a contest: LOG EVERYTHING</h3>
<p>Log absolutely everything possible. Require that the user is logged in, and <strong>always</strong> log their FBID *and* their IP address. Your legal counsel will thank you for it. </p>
<p><strong>You need to be able to run an audit on every action related to potential winning or losing of the contest for your own liability, but also because it is the foundation of putting yourself in a good spot to detect suspicious or fraudulent activity. Seriously. </strong></p>
<p>If ass-wiping influences the contest outcome, you had better be logging every single time the user wipes their ass, complete with IP address, user agent, timestamp, and anything else you can think of that would be specific to that action+session combination. I simply cannot emphasize this enough. </p>
<p><strong>Without extensive logging, you will be left absolutely helpless when a user (or their lawyer) challenges your winner decisions, or when other users claim a specific user is cheating.</strong></p>
<p>Make sure your web server is logging access correctly as well. You may need to correlate your Apache access log to a specific transaction and IP address as well. <strong>Test this before your app goes live.</strong> </p>
<p>As you analyse your logs, look for inconsistencies in user agent and/or IP address. If their user agent is logged as &#8220;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7&#8243; in one log entry and &#8220;Mozilla/5.0 (Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7&#8243; in the next, something is up. The differences between those two user agent strings is subtle, but it&#8217;s there, and there is no legitimate reason for it to change from action to action in the same session.</p>
<h3>Rule #2: Get their email address</h3>
<p>It seems intrusive, but if your loot is decent, people won&#8217;t mind giving it to you. Once they have allowed your application and granted you email permission through the app allow dialog, you can pre-populate the email address field so they don&#8217;t even have to type anything in. You&#8217;ll need their email address anyway, to notify them if they won, since Facebook doesn&#8217;t allow you to use FB Messages to do that.</p>
<p>You want their email address because users creating fake Facebook profiles (each of which requires a unique email address) to generate bogus votes/points/whatever will generally not be terribly creative (or may be using an automated script or service to do it), so you can use the email addresses as a way to detect patterns in participating users that could imply fraudulent activity. If you see 100 new entries, all with the email pattern of firstname1234lastname@hotmail.com, there&#8217;s an excellent chance that those entries are bogus.</p>
<h3>Brace yourself for the truth</h3>
<p>The cost of winning a Facebook contest by cheating is much lower than you probably imagine &#8211; and unsurprisingly, there are businesses online that exist for the sole purpose of helping people win online contests. Right now, on a casual Google search, I can find services that will sell me 10 PVA (Phone Verified Account) Facebook accounts for $20. I can buy 100 non-PVA Facebook accounts for $20, if I think the contest won&#8217;t do that much checking for fraudulent activity. If you do a search for &#8220;facebook contest&#8221; on sites like freelancers and microworkers (I will not link to them), you&#8217;ll find hundreds of people with Facebook accounts just itching to get paid to help your potential contestants game your contest.</p>
<p><strong>If you&#8217;re giving away a trip worth $3,000 and because of the number of participants, it would cost me $20 to win your contest, you are *going* to get gamed. My risk-to-reward-ratio is just too good for me not to do it. I spend $20 and I get $3,000 worth of prizes? Hell yeah. </strong></p>
<p>In one investigation I performed, I saw bids of $30 accepted for people to get 200 people (real people or fake-but-look-real accounts) to vote x times.  That means each one of those Facebook accounts is worth $0.15 to the person renting them out. Consider creating accounts at these microjob sites before your contest is over and check it for openings related to your contest.</p>
<p><strong>Additionally, since there are people and services out there that have created Facebook profiles for exactly this purpose, you can&#8217;t rely on Facebook profile creation date as a reliable measure. </strong>Many of the fraudulent accounts I&#8217;ve come across have been around for over a year prior to the contest. They&#8217;re also smart enough to make sure these profiles have friends that look legitimate, so it won&#8217;t be as easy as looking for FB accounts that are new and have no friend connections.</p>
<p>It gets worse. There are also online sites that encourage users to do like/vote exchanges. &#8220;Vote for me for blah, and I&#8217;ll vote for you.&#8221; This method tends to be slower than simply buying accounts, but it&#8217;s also free. Search Facebook for terms like &#8220;vote exchange&#8221; and you&#8217;ll find pages and groups for the sole purpose of gaming contests.</p>
<p>It&#8217;s up to you to decide whether a vote/contest exchange falls under your definition of cheating. It absolutely does in my book, but it really depends on how your contest works. Either way, you need to set the definitions of what exactly qualifies as cheating before your contest even starts, because you&#8217;re going to run into more gray areas than you probably would have thought.</p>
<h3>Rule #3: NOTHING GETS DELETED. EVER.</h3>
<p>If users can submit content as part of the contest, make sure you architect your application in such a way that nothing ever gets deleted, either by moderator or by the users themselves. Instead use a database flag to toggle visibility in the app. Log the deletion (timestamp, IP, user agent, who took the action, etc) and tuck it away, but never, ever delete the data. </p>
<p>Doing so insulates you from users saying &#8220;I didn&#8217;t delete it!&#8221; You will have proof that they did, including all the particulars such as what browser they were using and when. This also allows you to recover from content that is accidentally deleted by a moderator. If &#8220;deleting&#8221; content is simply toggling that boolean database field, it&#8217;s easy to toggle it back on if it gets toggled off by mistake.</p>
<h3>Rule #4: Know what counts as cheating up-front</h3>
<p>This sounds like a no-brainer. Cheating is cheating, right? But if someone didn&#8217;t actually pay for votes, and did a vote exchange or spammed forums and Facebook groups to get votes from people who don&#8217;t actually care about the program, is that cheating?</p>
<p>What if the Facebook account that&#8217;s participating is &#8220;real&#8221;, but the person only ever uses it for entering contests? Is that a legitimate user to you, or a cheater? You should figure that out ahead of time.</p>
<p>It&#8217;s going to be your choice as to what level of detail you disclose your policies on cheating. My recommendation is to be a little vague. While this goes against my standard policy of transparency in everything, if you give the bad guys an explicit set of rules on how you define cheating, they will be sure to tailor their cheating to specifically avoid the things you outline. If you tell me (as a bad guy) that my votes will be disqualified if too many votes come in from the same IP address, I will be sure to use different IP addresses for each vote to make sure I avoid your detection. </p>
<h3>Rule #4: Audit, audit, audit and audit some more</h3>
<p>Auditing by eyeball isn&#8217;t really going to cut it, but if it&#8217;s all you&#8217;ve got, it&#8217;s better than nothing. A better idea would be to set up a series of heuristics programmatically that flag user activity as being suspicious and requiring additional review. Things like the number of unique users coming from a specific IP address, the time of day that you see the most activity, the kinds of email addresses you see associated with the participating users, etc. </p>
<p><strong>Look for patterns that don&#8217;t make sense.</strong> Examine the Facebook pages of the folks you suspect of cheating. Do they have any wall posts? Any photos? Do they have friends? Click on their friends profiles &#8211; do their profiles also have no wall posts and no photos? Look for generic &#8220;hot babe&#8221; profile photos. Look at the pages and topics the user has &#8220;liked&#8221;. Do they seem a little too demographically on-point, as if they were created to appeal to a specific contest demographic? Is there a pattern in the things they&#8217;re liking? (All contest pages, etc.) This part can&#8217;t be automated. </p>
<p>Give yourself the time between the end of the contest and the announcement of the winner to be thorough and audit all of your top contenders. Hold off notifying anyone that they won until you&#8217;ve had a chance to comb through this data and you feel confident that it&#8217;s legitimate.</p>
<h3>You have a cheater. Now what?</h3>
<p>When you find someone cheating, how are you going to handle it? Revoke their points/votes/etc? Disqualify them? Whatever your decision, know what you&#8217;re going to say to them in advance, because if the stakes are high enough, there&#8217;s a good chance they will be loud and public about how you wronged them. Once again I advise not showing too much of your hand. </p>
<p><strong>If you decide to confront them and allow them to offer explanations, hold specifics back. </strong>If you user claims, for example, that they got most of their votes from their friends at a high school using their own computer (which would explain the same IP address), but the timestamps on the votes are at 1AM, 2AM, etc, that should raise some eyebrows. If you tell them too much about what you&#8217;re basing your decision on, a decent cheater will come up with excuses to explain them that they would have mentioned earlier if the story was legitimate.</p>
<p><strong>It&#8217;s rare to find a smoking gun in these cases.</strong> Instead, it&#8217;s going to require a some judgement calls and a preponderance of evidence. It&#8217;s very like you won&#8217;t find *one* thing that makes you *sure* someone is cheating. Instead you&#8217;ll find a half-dozen things that, when combined, form an equation that just doesn&#8217;t add up. </p>
<p>One option, upon finding a cheater, is to disqualify just the votes that seem fraudulent. <strong>In the case of a contest where the user submits an entry and other people vote on it to determine a winner, be cautious of disqualifying the entry based on fraudulent activity.</strong> Knowing how inexpensive it is to buy Facebook profiles, if I were a particularly bad guy who had <em>also</em> submitted an entry, I might consider spending some money to game my opponent&#8217;s entry in a way that was obviously fraudulent to get their entry disqualified. </p>
<p><strong>If I knew you would kick anyone out if you detected any fraudulent behavior on their entry, I might go out of my way to make sure you found some on the other guy&#8217;s entry to increase my chances of winning by kicking them out of the running.</strong> This technique, similar to <a href="http://en.wikipedia.org/wiki/Joe_job" target="_blank">joe jobbing</a> in the spam world, isn&#8217;t one I&#8217;ve seen often, but it&#8217;s only a matter of time.</p>
<p><strong>Make a decision and be prepared to stick with it.</strong> Feel confident that your decision was the right one, and don&#8217;t back down. The bad PR from the folks you disqualify will be better than the bad PR from the rest of the contestants claiming that your contest is rigged or allowed fraud. Your legal department will make sure you have a TOS that basically says that you don&#8217;t owe anyone an explanation, and it&#8217;s up to your discretion to disqualify anyone for any reason. </p>
<p>Running a (good) contest is an incredibly laborious process. The technical aspects of creating the app are honestly the least complicated, least time-consuming part of the whole thing. Make sure you have the appropriate resources to handle it. If you half-ass it, you will regret it.</p>
<h3>Nailed it. </h3>
<p>Not quite. Honestly, there is almost no fool-proof way of detecting all fraud activities &#8211; partly because some of this fraud is being conducted by actual people, not machines. They&#8217;ve invested the time into creating profiles that look real. </p>
<p>You&#8217;ll be able to find the ones that do a crap job of it, but a few of the more sophisticated folks will have profiles that have current wall posts about things other than contest spamming. They&#8217;ll have photos uploaded, lots of friends, and profiles that weren&#8217;t recently created. Fortunately for you, those kinds of profiles tend to be more expensive to buy, since they require more work to upkeep to look legitimate. </p>
<p>Maintaining believability in a friend network that large requires a lot of time, so examining the <em>friend</em> profiles associated with your top contestants is absolutely critical. If you poke around enough, you&#8217;re bound to find something that doesn&#8217;t fit. Examining their entire footprint on the social graph will give you a much clearer picture than a specific profile.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/12/viral-marketing-or-social-media-spam/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/12/spam_1-283x300.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Twitter Retweet Contests: Viral Marketing or Social Media Spam?" height="90" width="90" onmouseover="onover('Twitter Retweet Contests: Viral Marketing or Social Media Spam?')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/05/facebook-fan-pages-10k/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/05/fuck-you.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You" height="90" width="90" onmouseover="onover('Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/01/facebook-lite-default/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/01/basement-cat-updates-facebook-pic.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Unclutter Your Facebook Feed: Set FB Lite As Your Default" height="90" width="90" onmouseover="onover('Unclutter Your Facebook Feed: Set FB Lite As Your Default')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2012/01/detecting-fraud-in-facebook-contests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Locking Down Your Linux Server with APF + BFD</title>
		<link>http://www.snipe.net/2011/10/apf-bfd-firewall-brute-force/</link>
		<comments>http://www.snipe.net/2011/10/apf-bfd-firewall-brute-force/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 19:55:17 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[apf]]></category>
		<category><![CDATA[bfd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[two-factor authentication]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3508</guid>
		<description><![CDATA[If you allow SSH access to your server, there are some simple steps you can take to restrict access and protect yourself from brute force attacks. Two of my favorite scripts to do this are Advanced Policy Firewall coupled with Brute Force Detection, both by R-FX Networks. Note: this article is long, but that&#8217;s only [...]]]></description>
			<content:encoded><![CDATA[<p>If you allow SSH access to your server, there are some simple steps you can take to restrict access and protect yourself from brute force attacks. Two of my favorite scripts to do this are <strong><a href="http://www.rfxn.com/projects/advanced-policy-firewall/" target="_blank">Advanced Policy Firewall</a></strong> coupled with <strong><a href="http://www.rfxn.com/projects/brute-force-detection/" target="_blank">Brute Force Detection</a></strong>, both by R-FX Networks.<span id="more-3508"></span></p>
<p>Note: this article is long, but that&#8217;s only because I&#8217;m trying to explain in some degree of detail, and call out specific gotchas that you may run into. I promise you that setting these two up is incredibly easy, and shouldn&#8217;t take you more than a twenty minutes or so to have both up and running. </p>
<p>Advanced Policy Firewall (APF) is an iptables based firewall system that&#8217;s easy to set up and administer, and works hand in hand with Brute Force Detection (BFD).</p>
<p>BFD is a modular shell script for parsing application logs and checking for authentication failures. It does this using a rules system where application specific options are stored including regular expressions for each unique auth format.</p>
<p>Together, they provide a simple but effective way to handle locking out brute force login attempts. Using APF, you could actually take it a step further and deny ALL SHH requests except those originating from a set of whitelisted IP addresses. This may not be feasible &#8211; or a good idea &#8211; if you do not have access to a static IP address, however, since you could end up locked out of your own box. We get into restricted whitelisting a little further down the page.</p>
<p><strong>The basic gist is this: </strong>Someone tries to brute force their way into your server via SSH. Since they do not actually have a valid username+password combination, the login attempt will fail, assuming you don&#8217;t use shitty passwords that can be easily guessed, in which case they login successfully, and you&#8217;re pwned. After x failed attempts (where you define x in the configuration file), BFD will automagically tell APF to add the IP address of the offending attacker to the APF blacklist for a certain amount of time (also configurable in the config file). All services will be denied to that IP address, so they will no longer even be able to see your website.</p>
<p>The purpose of this is pretty obvious, but (for those of you who took the short bus in) one of the primary benefits is the ability to easily mitigate automated brute force attacks on your server, where a script is being used to try various combinations of usernames and passwords until they successfully login.</p>
<p>If you think your server is too insignificant for an attacker to bother with, you&#8217;re wrong. If you have an IP address that is visible to the rest of the world, you <em>will</em> end up being brute-forced at some point. Whether or not the attack is successful is up to you.</p>
<p>There are other firewall+brute-force-detection combinations out there, including the very popular <a href="http://www.fail2ban.org/" target="_blank">Fail2ban</a>, that also work very well. I&#8217;m not endorsing one over the other, I&#8217;m just more familiar with APF+BFD.</p>
<p>Anyway &#8211; let&#8217;s get to the good stuff. <strong>Note that you will need root/sudo access to your server in order to continue.</strong></p>
<h3>Setting Up Advanced Policy Firewall (APF)</h3>
<p>Before moving forward, it should be noted that you are installing an iptables-based firewall. This means that if you screw something up, you could lock yourself out of the server, deny <em>all</em> traffic to your server resulting in a downed website, etc. Be careful, and don&#8217;t make these kinds of configurations on a production machine during peak site traffic hours. To test that your configuration is working properly, you&#8217;ll want to have access to SSH from another IP address that you can safely lock out without limiting your ability to administer the server.</p>
<ol>
<li><code>[root@server]# cd /root/downloads</code> (or any other temporary folder)</li>
<li><code>[root@server]# wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz</code></li>
<li><code>[root@server]# tar -xvzf apf-current.tar.gz</code></li>
<li><code>[root@server]# cd apf-9.7-1 </code>(or whatever the latest version is)</li>
<li>Run the install file: <code>[root@server]# ./install.sh</code></li>
<li>You will receive a message saying it has been installed.<br />
<code>Installing APF 9.7-1: Completed.</code></li>
</ol>
<p><strong>Installation Details:</strong><br />
Install path: <code>/etc/apf/</code><br />
Config path: <code>/etc/apf/conf.apf</code><br />
Executable path: <code>/usr/local/sbin/apf</code><br />
DShield Client Parser: <code>/etc/apf/extras/dshield/</code></p>
<p><strong>Now configure the firewall:</strong> <code>[root@server]# vi /etc/apf/conf.apf</code></p>
<p>Make sure <code>DEVEL_MODE="1"</code> is set until you&#8217;ve gotten everything working. This will allow you to get back into your server if you cock something up and get locked out, as it tells the script to clear the cron settings every 5 minutes. Once you&#8217;ve got APF tested and working as expected, set <code>DEVEL_MODE="0"</code> here.</p>
<p>The majority of the default options in the config can (and should) be left alone unless you know what you&#8217;re doing. As you go further into the config file, you&#8217;ll see stuff like this:</p>
<p><code>##<br />
# [Remote Rule Imports]<br />
##<br />
# Project Honey Pot is the first and only distributed system for identifying<br />
# spammers and the spambots they use to scrape addresses from your website.<br />
# This aggregate list combines Harvesters, Spammers and SMTP Dictionary attacks<br />
# from the PHP IP Data at: http://www.projecthoneypot.org/list_of_ips.php<br />
DLIST_PHP="0"</p>
<p>DLIST_PHP_URL="rfxn.com/downloads/php_list"<br />
DLIST_PHP_URL_PROT="http"</p>
<p># The Spamhaus Don't Route Or Peer List (DROP) is an advisory "drop all<br />
# traffic" list, consisting of stolen 'zombie' netblocks and netblocks<br />
# controlled entirely by professional spammers. For more information please<br />
# see http://www.spamhaus.org/drop/.<br />
DLIST_SPAMHAUS="0"</p>
<p>DLIST_SPAMHAUS_URL="www.spamhaus.org/drop/drop.lasso"<br />
DLIST_SPAMHAUS_URL_PROT="http"</p>
<p># DShield collects data about malicious activity from across the Internet.<br />
# This data is cataloged, summarized and can be used to discover trends in<br />
# activity, confirm widespread attacks, or assist in preparing better firewall<br />
# rules. This is a list of top networks that have exhibited suspicious activity.<br />
DLIST_DSHIELD="0"</p>
<p>DLIST_DSHIELD_URL="feeds.dshield.org/top10-2.txt"<br />
DLIST_DSHIELD_URL_PROT="http"</code></p>
<p>All of the above are optional and allow you to implement additional resources such as <a href="http://dshield.org/" target="_blank">DShield</a> and <a href="http://www.spamhaus.org/" target="_blank">Spamhaus</a> to block known spammy or suspicious IPs from being able to access your server. You can leave them off if you&#8217;d like (they are off by default) or turn them on for additional protection. (You&#8217;ll need to install the DShield scripts, but I&#8217;ll get to that in a moment.)</p>
<h4>Configuring Ports:</h4>
<p>The APF config file will come with some default ports pre-set, but you&#8217;ll want to check and make sure everything you need is covered. You will also want to determine whether or not you&#8217;re using any uncommon port numbers (for example, for a hosting control panel) that should be added to the configuration file. Please don&#8217;t ask me what port numbers your specific hosting control panel uses. I don&#8217;t know, but I&#8217;m sure Google does.</p>
<p><code># Common inbound (ingress) TCP ports<br />
#IG_TCP_CPORTS="22,80,443"<br />
IG_TCP_CPORTS="21,22,25,53,80,443,110,143"</p>
<p># Common outbound (egress) TCP ports<br />
EG_TCP_CPORTS="21,25,80,443,43"</p>
<p># Common outbound (egress) UDP ports<br />
EG_UDP_CPORTS="20,21,53"</code></p>
<p>If you restart the firewall and something is down but no errors are thrown, there&#8217;s a good chance you missed a port number here. Make sure to account for SSL ports (443) if you&#8217;re running an SSL certificate, etc.</p>
<p>Once you&#8217;ve made all of your tweaks, save the config file and start the firewall:<br />
<code>/usr/local/sbin/apf -s</code></p>
<p>If you&#8217;re satisfied that everything looks okay and all services are responding as they should, go back into the APF config and change <code>DEVEL_MODE="1"</code> to <code>DEVEL_MODE="0"</code> and flush the firewall: <code>/usr/local/sbin/apf -f</code></p>
<h4>Common APF Commands</h4>
<p>Start: <code>/usr/local/sbin/apf -s</code><br />
Restart (flush and load): <code>/usr/local/sbin/apf -r</code><br />
Flush: <code>/usr/local/sbin/apf -f</code><br />
List Chain Rules: <code>/usr/local/sbin/apf -l</code><br />
Status: <code>/usr/local/sbin/apf -st</code></p>
<h4>Manually Whitelisting/Blacklisting IP Addresses</h4>
<p>For the commands below, replace HOST with an IP or FQDN (Fully Qualified Domain Name) and COMMENT with your comments (no spaces) as to why you&#8217;re manually allowing or blocking an IP.</p>
<p>Add to allowed hosts (whitelist) and load new rule: <code>/usr/local/sbin/apf -a HOST COMMENT</code><br />
Add to denied hosts (blacklist) and load new rule: <code>/usr/local/sbin/apf -d HOST COMMENT</code></p>
<p>To autostart apf on reboot, run this:<br />
<code>[root@server]# chkconfig --level 2345 apf on</code></p>
<p>To remove it from autostart, run this:<br />
<code>[root@server]# chkconfig --del apf</code></p>
<h4>Using DShield</h4>
<p>If you&#8217;re interested in using <a href="http://dshield.org/" target="_blank">DShield</a> with APF, you will need to install it first from the extras directory:</p>
<p><code>[root@server]# cd /etc/apf/extras/dshield<br />
[root@server dshield]# ./install<br />
Installation completed.<br />
Binary: /usr/local/sbin/dshield<br />
Config: /usr/local/dshield/dshieldpy.conf<br />
Cronjob: /etc/cron.daily/ds</p>
<p>Warning: Running the binary from command line will send reports to dshield.org;<br />
repeated execution may result in your IP being banned from the service.</code></p>
<p>Now you can edit the DShield configuration file, including turning on email alerts, database logging and other stuff. Again, leave this alone (or leave it uninstalled) if you&#8217;re not sure what you&#8217;re doing. Your APF will function just fine without it:<br />
<code>[root@server]# vi /usr/local/dshield/dshieldpy.conf</code></p>
<h3>Setting Up Brute Force Detection (BFD)</h3>
<p>First things first, <strong>you MUST have APF installed</strong>. BFD was written specifically to work with APF, so you have to start with APF and then install BFD.</p>
<ol>
<li><code>[root@server]# cd /root/downloads</code> (or any other temporary folder)</li>
<li><code>[root@server]# wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz</code></li>
<li><code>tar -xvzf bfd-current.tar.gz</code></li>
<li><code>[root@server]# cd bfd-1.4</code> (or whatever the current version is)</li>
<li>Run the install file: <code>[root@server]# ./install.sh</code></li>
<li>You will receive a message saying it has been installed<br />
<code>.: BFD installed<br />
Install path: /usr/local/bfd<br />
Config path: /usr/local/bfd/conf.bfd<br />
Executable path: /usr/local/sbin/bfd</code></li>
</ol>
<p>Now let&#8217;s take a look at the configuration file:<br />
<code>[root@server]#  vi /usr/local/bfd/conf.bfd</code></p>
<p>What you&#8217;ll see is a short file that starts like this:</p>
<p><code># how many failure events must an address have before being blocked?<br />
# you can override this on a per rule basis in /usr/local/bfd/rules/<br />
TRIG="10"</p>
<p># send email alerts for all events [0 = off; 1 = on]<br />
EMAIL_ALERTS="1"</p>
<p># local user or email address alerts are sent to (separate multiple with comma)<br />
EMAIL_ADDRESS="you@yourdomain.com"</p>
<p># subject of email alerts<br />
EMAIL_SUBJECT="Brute Force Warning for $HOSTNAME"</p>
<p># executable command to block attacking hosts<br />
BAN_COMMAND="/etc/apf/apf -d $ATTACK_HOST {bfd.$MOD}"<br />
</code></p>
<p>These options are pretty straightforward. <code>TRIG</code> is the number of tries a user is allowed before they trip the BFD deny trigger. For PCI compliance or other strict environments, this number is usually pretty low &#8211; but it&#8217;s important to keep things practical. Security must always be a balance between making things safe and keeping them useable by the people who need to use them. If you had a lockout policy that after one try, a user is locked out for a day, odds are excellent that you&#8217;d be crippling your admins/devs. Who hasn&#8217;t fatfingered a password? These measures should be as unobtrusive to the users who legitimately need to be there as possible.</p>
<p>The very concept of a brute force password attack is one where the attacker doesn&#8217;t have either a valid username, a valid password or both. The odds of an attacker randomly guessing a username and password combination within 10 tries, or 20 tries, or even 100 tries is pretty low. Brute force attacks generally exploit things like default admin passwords, very common passwords (like &#8217;123456&#8242; or &#8216;password&#8217; or &#8216;fuckyou&#8217;), or they are a more prolonged attack consisting of thousands and thousands of random login attempts. The attacker is literally trying to brute force their way in, since they have no other means by which to access your server that way.  </p>
<p>Making the tolerance threshold very low doesn&#8217;t keep you safer from a brute force attack and will only serve to frustrate your users and create more work for yourself, since you&#8217;ll have to manually release the lock once they&#8217;ve boned their password a few times. So keep this number reasonable, and remember what it&#8217;s there for, or you&#8217;ll be making yourself and everyone who needs to access your server miserable.</p>
<h4>Enable Email Alerts</h4>
<p>You may or may not want to be alerted when someone has tripped the brute force detection script and has been added to the APF deny rules. If you&#8217;re on a frequently hit server, these emails could be overwhelming (or could even arguably help create a denial of service situation) but in general, I find it helpful to leave these on. I have filters set up in my email so they don&#8217;t flood my inbox. If you&#8217;re using a log analyzer/alert system like <a href="http://www.splunk.com" target="_blank">Splunk</a>, you probably don&#8217;t need to turn on email alerts, but that&#8217;s up to you.</p>
<p>Find: <code>ALERT_USR="0"</code> CHANGE TO: <code>ALERT_USR="1"</code><br />
Find: <code>EMAIL_USR="root" </code>CHANGE TO: <code>EMAIL_USR="your@yourdomain.com"</code></p>
<h4>VERY IMPORTANT! Prevent locking yourself out!</h4>
<p>You will want to make sure you&#8217;ve whitelisted your own trusted IP addresses pretty early on in this process. If your office has a static IP address or range of IP addresses, you&#8217;ll want to add these right away. By whitelisting these IPs, you prevent the possibility of locking yourself out of your own server by fatfingering your own password.</p>
<p>To add IPs to the ignored host list:</p>
<p><code>[root@server]# vi /usr/local/bfd/ignore.hosts</code> </p>
<p>&#8230; and add your own trusted IPs, one per line.</p>
<p>Once you&#8217;ve got BFD configured to your liking, start it up!<br />
<code>[root@server]# /usr/local/sbin/bfd -s</code></p>
<h4>Test the System</h4>
<p>Once you think you&#8217;ve got everything working, try logging in from a<strong> non-whitelisted</strong> IP. If you have another server with it&#8217;s own IP address, for example, you could SSH into that server, and from that server SSH into your now-hardened server, using a username and password combination that you know is not valid.</p>
<p>While doing that, tail the APF logs, so make sure the attempts are being logged and the lockout works as expected:</p>
<p><code>[root@server]# tail -f /var/log/apf_log</code></p>
<p>Once you pass the number of attempts specified in the BFD config file, you should see the apf_log record that the offending IP address has been added to the denied hosts file.</p>
<h3>Allowing Only Whitelisted IPs to Access SSH</h3>
<p>If you&#8217;ve got static IP addresses and you want to lock your server down even more, you can skip BFD and simply deny ALL SSH requests coming from unknown IP addresses. This is easy to do, but also easy to forget additional IPs that legitimately require access (remote backup systems, managed hosting company support, etc) so be sure to think through everything that legitimate needs access, and be prepared to tweak the IP list if you discover things you broke.</p>
<ol>
<li>Open the allowed hosts file: <code>[root@server]# vi /etc/apf/allow_hosts.rules</code></li>
<li>Scroll down until after the last comment in the file with the ##</li>
<li>Add the following:<br />
<code>tcp:in:d=22:s=YOURHOMEIPHERE<br />
out:d=22:d=YOURHOMEIPHERE</code></p>
<p>The d=22 is the port, since you&#8217;re specifically addressing SSH which usually runs on port 22. You can repeat for other services as well to limit other connections by port if you like.</li>
<li>Open the denied hosts file: <code>[root@server]# vi /etc/apf/deny_hosts.rules</code> </li>
<li>Scroll down until the last default comment ## then below it add the following:
<p>tcp:in:d=22:s=0/0<br />
out:d=22:d=0/0</li>
<li>Restart APF: <code>[root@server]# /usr/local/sbin/apf -r</code></li>
</ol>
<p>You wouldn&#8217;t use IP whitelisting restrictions in combination with BFD, since the process of whitelisting your internal IPs will override the BFD protection. In other words, with whitelisting restrictions, any user who isn&#8217;t on an authorized IP address won&#8217;t even be </p>
<h4>Test the System</h4>
<p>Testing this one should be pretty easy. Simply try to connect via SSH from any IP address that isn&#8217;t one that you whitelisted in step 3 above. What you should see is a connection attempt timeout or connection refusal. Try a new SSH connection from a whitelisted IP and you should get the SSH password prompt.</p>
<h3>Two-Factor Authentication</h3>
<p>If you really want to lock things down, you may want to consider adding two-factor authentication to your login. SSH keys would be something you have &#8211; plus a password as something you know &#8211; but for some reason it&#8217;s still not possible to require a password with SSH keys (to my knowledge &#8211; please correct me if I&#8217;m wrong). So instead of two-factor, you end up with a different one-factor (something you have instead of something you know). </p>
<p>Years ago, setting yourself up with true two-factor authentication was prohibitively expensive, so not a lot of smaller folks were doing it. These days, Citrix key fobs are being replaced by a new generation of more affordable and practical tokenless two-factor authentication systems, such as <strong><a href="http://www.phonefactor.com/" target="_blank">PhoneFactor</a></strong> and <strong><a href="http://www.duosecurity.com/" target="_blank">DuoSecurity</a></strong>. </p>
<p>Both of these options are pretty cool, and reasonably easy to implement. I&#8217;m in the process of setting up a few of our boxes with DuoSecurity (can&#8217;t beat the price), with the help of this fantastic tutorial by <a href="http://twitter.com/jlgaddis" target="_blank">Jeremy L. Gaddis</a> over at <a href="http://evilrouters.net/2011/06/23/free-two-factor-auth-for-your-servers-and-vpns/" target="_blank">EvilRouters</a>.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/07/if-chuck-norris-had-designed-linux/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/07/chuck-norris.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="If Chuck Norris Had Designed Linux&#8230;" height="90" width="90" onmouseover="onover('If Chuck Norris Had Designed Linux&#8230;')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/version-control.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="SVN Working Copies and Repository Locations" height="90" width="90" onmouseover="onover('SVN Working Copies and Repository Locations')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/04/plate.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="iPhone/iPad Apps for Coders and Sysadmins" height="90" width="90" onmouseover="onover('iPhone/iPad Apps for Coders and Sysadmins')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2011/10/apf-bfd-firewall-brute-force/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Facebook Page Admin Scam</title>
		<link>http://www.snipe.net/2011/05/new-facebook-page-admin-scam/</link>
		<comments>http://www.snipe.net/2011/05/new-facebook-page-admin-scam/#comments</comments>
		<pubDate>Tue, 03 May 2011 19:36:32 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[scam]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[social engineering]]></category>
		<category><![CDATA[social networks]]></category>
		<category><![CDATA[virus]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3421</guid>
		<description><![CDATA[A new scam has come to our attention, one that&#8217;s a new take on an old trick in Facebook. Scammers are adding users as page administrators on a page that&#8217;s got a poisoned IFRAME set as the default tab. So the user gets a notification &#8220;John Smith has made you an administrator of XYZ page&#8221;. [...]]]></description>
			<content:encoded><![CDATA[<p>A new scam has come to our attention, one that&#8217;s a new take on an old trick in Facebook. Scammers are adding users as page administrators on a page that&#8217;s got a poisoned IFRAME set as the default tab.</p>
<p><span id="more-3421"></span></p>
<p>So the user gets a notification &#8220;John Smith has made you an administrator of XYZ page&#8221;. The user clicks on the page to see what they&#8217;ve just been made an admin of, and the poisoned default page tab kicks on, busting them out of the Facebook site and into a standalone page offering promises of free iPads and various other too-good-to-be-true freebies.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/05/TEMP-Image_1_1.png" alt="" title="TEMP-Image_1_1" width="347" height="69" class="aligncenter size-full wp-image-3425" /></p>
<p>In this particular case, the scammers were using the extremely popular &#8211; and from what I can tell, legitimate &#8211; application <a href="https://www.facebook.com/apps/application.php?id=190322544333196">Static HTML IFRAME</a>, which simply allows people to create their own IFRAME tabs to add to their Facebook page without the hassle of creating their own application, hosting content, etc.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/05/IPad2-Testers-Wanted-38-560x262.jpg" alt="" title="IPad2 Testers Wanted (38)" width="560" height="262" class="aligncenter size-large wp-image-3432" /></p>
<p>The IFRAME page that loads in the Facebook page points to s3.amazonaws.com/statichtmlplus/page/160281910702810.html &#8211; so it seems that the Static HTML IFRAME app just saves the content that their users add to their custom IFRAMEs into a static HTML file and serve it accordingly.</p>
<p>In the case of this scam, the IFRAME page hosted by the Static HTML IFRAME app contains another, hidden IFRAME inside of it that forces the browser to redirect to the scam website.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/05/Screen-shot-2011-05-03-at-3.45.37-PM-560x283.png" alt="" title="Screen shot 2011-05-03 at 3.45.37 PM" width="560" height="283" class="aligncenter size-large wp-image-3430" /></p>
<p>This is a combination of social engineering (taking advantage of the fact that the new administrator will obviously want to know what it is they&#8217;ve been made an admin of, thus getting them to look at a page they would otherwise never have found or cared about), and very basic technical jiggery pokery to bust out of the frames and take the unsuspecting admin to a third-party site. </p>
<p>The third party site in this case was a survey/iPad 2 giveaway scam (ipad2-test-and-keep.com), but this method could just as easily be used to serve malware or phishing pages. </p>
<p>Imagine how easily this would flow if if the frame-buster page instead took the user to a page that looks just like the Facebook login page. They think they&#8217;ve somehow been logged out, they fill in the login form to log back in, and now the bad guys have their Facebook credentials &#8211; which statistically are likely to be the same credentials they use for banking and other things.</p>
<p>The IP address of the scam site the IFRAME sends the user to, <a href="http://whois.domaintools.com/92.241.169.80">92.241.169.80</a>, tracks back to a Russian web hosting company, 2&#215;4.ru.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/05/Screen-shot-2011-05-03-at-3.58.07-PM-560x390.png" alt="" title="Screen shot 2011-05-03 at 3.58.07 PM" width="560" height="390" class="aligncenter size-large wp-image-3437" /></p>
<p>We&#8217;ve already reported this scam page to Facebook using the normal routes and through the Preferred Developer Consultant avenues, but I&#8217;d be willing to bet we&#8217;re going to start to see a lot more of this kind of thing because it&#8217;s incredibly effective and very simple to execute.</p>
<p>Thanks to <a href="http://twitter.com/uberbrady">@uberbrady</a> for seeing this for what it was when it happened to him, and bringing it to our attention.</p>
<p>Don&#8217;t forget to &#8220;like&#8221; our special <a href="http://www.facebook.com/scamdb">Social Media Scam Alert</a> page on Facebook and follow <a href="http://twitter.com/scamdb">@scamdb</a> on Twitter for more updates like this.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/06/fb-fanpages-fbml-box/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/04/facebook_pic.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Static FBML: Not Every Facebook Fan Page Needs An Application" height="90" width="90" onmouseover="onover('Static FBML: Not Every Facebook Fan Page Needs An Application')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/05/facebook-fan-pages-10k/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/05/fuck-you.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You" height="90" width="90" onmouseover="onover('Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2002/06/google-style-page-numbering-with-x-per-page-and-y-page-numbers-displayed/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/picture-22.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Google Style Page Numbering (with x per page and y page numbers displayed)" height="90" width="90" onmouseover="onover('Google Style Page Numbering (with x per page and y page numbers displayed)')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2011/05/new-facebook-page-admin-scam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone/iPad Apps for Coders and Sysadmins</title>
		<link>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/</link>
		<comments>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 20:49:28 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3366</guid>
		<description><![CDATA[It wasn&#8217;t that long ago that I scoffed at the idea of the iPad, or at least thought it would never have any place in my tech toolkit. I finally broke down and got one, and it&#8217;s changed the way I work, largely because of the number of fantastic apps out there. We&#8217;re finally at [...]]]></description>
			<content:encoded><![CDATA[<p>It wasn&#8217;t that long ago that I scoffed at the idea of the iPad, or at least thought it would never have any place in my tech toolkit. I finally broke down and got one, and it&#8217;s changed the way I work, largely because of the number of fantastic apps out there.</p>
<p>We&#8217;re finally at a point where someone who spends a reasonable amount of time at a server command line can actually get real work done, and I gotta say, it&#8217;s pretty cool. Just last night I was discussing an obscure Apache config issue with a friend at a bar, and rather than working from memory, I busted out the iPad and my Bluetooth keyboard, and 5 minutes later, the configuration issue was solved. </p>
<p>Having the freedom to go to the park to read for a bit but knowing I have the ability to handle an emergency should it come up is very freeing. Yes, I have become that douchebag at Starbucks &#8211; and you know what? I fucking love it. </p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/04/ipad.jpg" alt="" title="ipad" width="540" height="403" class="aligncenter size-full wp-image-3371" /></p>
<p>Anyway. Point is, the iPad (or iPhone) can be used for more than just porn now (which is good, because the folks at Starbucks get surprisingly upset when you try adding your own &#8220;cream&#8221; to your latte), and I&#8217;ve spent some time and money to try out some of the most promising apps in the app store that allow you to do actual work, and edge the iPad closer to being a viable option for a netbook replacement.</p>
<p>I didn&#8217;t address any design/mockup/mindmapping apps in this list, but that may be a topic for another post sometime. This list isn&#8217;t meant to be all-inclusive, and doesn&#8217;t reflect the totality of what is available in the app store &#8211; it&#8217;s a short list of personal recommendations of products I actually use and like.</p>
<p>Disclosure: Some of the links below are hooked into the iTunes affiliate program so that I might get a penny or two if you decide to buy, however the recommendations are legit, and I wouldn&#8217;t recommend something unless I had used it. Click through on the affiliate links or don&#8217;t &#8211; but do leave me a comment if you&#8217;ve fallen in love with something I haven&#8217;t mentioned here.</p>
<h3>Code Editors/FTP</h3>
<p>There are quite a few nice code editors for iPad in the app store, but I won&#8217;t consider any that only offer FTP instead of SFTP and neither should you. I am just as likely to use vi in an SSH app on my iPad as I am to use a code editor, but for handling multiple open files at one time, sometimes an editor is kinda nice. Unfortunately, 90% of the code editors in the app store are complete and utterly shit-tastic garbage. Seriously. Even if you don&#8217;t pick one of my recommendations, make sure you read the comments on the code editor apps before you buy so you don&#8217;t get burned. </p>
<h4>Textastic</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.383577124&#038;type=2&#038;subid=0"><img border=0 src="http://a1853.phobos.apple.com/us/r1000/034/Purple/59/bb/fa/mzi.qkikkfrp.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.383577124&#038;type=2&#038;subid=0" /></div>
<p>I think Textastic might be my new favorite code editor for iPad. The interface is very clean, it supports FTP and SFTP, integrates with Dropbox and WebDav (if you&#8217;re into that sort of thing) and comes with syntax highlighting for around 80 different languages. It&#8217;s a little pricier than some of the other options, but I think it&#8217;s well worth the investment. I want to make sweet ASCII love to it all the time.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.383577124&#038;type=2&#038;subid=0">Buy Now ($9.99)</a></strong><br />
Developer: <a href="http://www.textasticapp.com/">Alexander Blach</a></p>
<h4>Gusto</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364906873&#038;type=2&#038;subid=0"><img border=0 src="http://a1853.phobos.apple.com/us/r1000/051/Purple/e7/31/5b/mzi.gshzwuci.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.364906873&#038;type=2&#038;subid=0" /></div>
<p>Gusto is pretty sexy and has come pretty far in a short time. (When it first appeared in the app store, there was no SFTP support.) It supports projects, one-touch uploading, background processing so your state doesn&#8217;t get lost when you have to switch apps, pretty Coda-like site thumbnails, tabbed editing, and remove and local preview support. Three obvious features that are missing are syntax highlighting, line-wrapping and public-key authentication, but it&#8217;s a great start and a solid option for busting out quick changes on the road.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364906873&#038;type=2&#038;subid=0">Buy Now ($6.99) </a></strong><br />
Developer: <a href="http://horseandtherook.com/gusto/">Horse and the Rook</a></p>
<p>An alternative to Gusto that&#8217;s an app to watch would be <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.365590383&#038;type=2&#038;subid=0">Markup for iPad</a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.365590383&#038;type=2&#038;subid=0" />, but I&#8217;ve heard such crap things (crashy, no SFTP) about it that I haven&#8217;t tried it. Sounds like it&#8217;s worth keeping an eye on, but not ready for prime time yet and not worth the $10 pricetag until it&#8217;s a bit more stable and can handle SFTP.</p>
<h4>FTP on the Go (Pro)</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364787363&#038;type=2&#038;subid=0"><img border=0 src="http://a1408.phobos.apple.com/us/r1000/048/Purple/3f/eb/cd/mzi.vgywhamx.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.364787363&#038;type=2&#038;subid=0" /></div>
<p>Feature-packed FTPS app. Honestly, too many spiffy features to list &#8211; the best FTP app I&#8217;ve come across so far. Comes with a built in FTP Server and Web Server allow viewing and adding files to the iPhone or iPod touch. Browse files on your iPhone from your computer with a web browser. Madness. Madness, I say!<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364787363&#038;type=2&#038;subid=0">Buy Now ($9.99)</a></strong><br />
Developer: <a href="http://www.ftponthego.com/">Headlight Software</a></p>
<h3>MySQL</h3>
<h4>MySQL Database Client</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.412789347&#038;type=2&#038;subid=0"><img border=0 src="http://a1150.phobos.apple.com/us/r1000/039/Purple/53/88/85/mzi.ufppzvke.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.412789347&#038;type=2&#038;subid=0" /></div>
<p>Small, simple MySQL client for iPad and iPhone. Supports stored profiles and custom queries, but don&#8217;t go too nuts. It can handle basic queries, but more complicated stuff like JOINS will return unpredictable results. Still, it&#8217;s $0.99, and is worth at least that much, contrary to the cheesedick who &#8220;wants a refund&#8221; in the reviews. Seriously. It&#8217;s a buck. Get over it, kid.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.412789347&#038;type=2&#038;subid=0">Buy it Now ($0.99)</a></strong><br />
Developer: <a href="http://hankinsoft.com/">Kyle Hankinson</a></p>
<h4>MySQL Editor Pro</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.414309098&#038;type=2&#038;subid=0"><img border=0 src="http://a154.phobos.apple.com/us/r1000/057/Purple/c4/4b/82/mzi.vkpiwyde.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.414309098&#038;type=2&#038;subid=0" /></div>
<p>A much more full-featured app with a price tag that reflects it, MySQL Editor Pro is the real deal. If the cost doesn&#8217;t scare you off, this is well worth the month for such a strong db admin app.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.414309098&#038;type=2&#038;subid=0">Buy it Now ($14.99)</a></strong><br />
Developer: <a href="http://itopchiyev.com/">Pasha Topchiyev</a></p>
<h3>SSH/VNC</h3>
<h4>Prompt</h4>
<p>That Apache configuration issue I was having? Solved in 5 minutes using Prompt. It&#8217;s made by the same folks that make the super-sexy Coda code editing app for Mac. The UI is pretty nice, and it supports special characters and keystrokes like CTRL which one ends up using frequently in a shell. Prompt supports DSA/RSA keys, automagically remembers your frequently used commands, runs in the background so screen-switching won&#8217;t disconnect you, and you can map commonly used keystrokes easily for speedy access. An added bonus &#8211; it&#8217;s a universal app, so you buy it once and it works on your iPhone and your iPad. (Given my horrible typing on the iPhone and the iPhones even more horrible auto-correction, I don&#8217;t know that I&#8217;d want to use it on my phone much, but it&#8217;s nice to know it&#8217;s an option.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/prompt/id421507115?mt=8">Buy it Now ($4.99)</a></strong><br />
Developer: <a href="https://www.panic.com/blog/2011/04/introducing-prompt-ssh-for-ios/">Panic, Inc.</a></p>
<h4>iSSH</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.287765826&#038;type=2&#038;subid=0"><img border=0 src="http://a13.phobos.apple.com/us/r1000/026/Purple/b2/a0/fa/mzi.pcnnfqne.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.287765826&#038;type=2&#038;subid=0" /></div>
<p>Less sexy than Prompt but still one helluvan app is iSSH. iSSH boasts a pretty impressive feature set, including a tunneled VNC client, tunneled X server, the fact that SSH, telnet and VNC all work via EDGE, WiFi and 3G, transparent keyboard, Bluetooth keyboard mapping, RSA and DSA key generation and exchange, tons of keyboard customizations and holy shit a lot more. It&#8217;s a solid client, and a universal app, so you can buy it once and use it on your iPhone, iPad, iPod touch, etc. Even works with older iPhones running iOS 3.0.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.287765826&#038;type=2&#038;subid=0">Buy it Now ($9.99)</a></strong><br />
Developer: <a href="http://www.zinger-soft.com/iSSH_features.html">Zingersoft</a></p>
<h3>Network Tools &#038; Miscellaneous Hackery</h3>
<h4>IT Tools</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.324054954&#038;type=2&#038;subid=0"><img border=0 src="http://a671.phobos.apple.com/us/r1000/005/Purple/cb/c1/ff/mzi.yocyeqez.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.324054954&#038;type=2&#038;subid=0" /></div>
<p>Puts a whole handful of diagnostics just a tap or two away, with DNS, Ping, Route, ARP, active sockets and Interface tools. 45 supported DNS record types, including A, AAAA, CNAME, LOC, MX, NS, SRV, TXT &#8211; and it come with a database of MAC addresses so you can look up manufacturers of devices on your network. All of these things can be done through SSH if you&#8217;ve already got a terminal running, but this app makes it so much easier.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.324054954&#038;type=2&#038;subid=0">Buy it Now ($4.99)</a></strong><br />
Developer: <a href="http://ittools.koltzau.com/">Kevin Koltzau</a></p>
<h4>Server Admin Remote (Mac OSX Server)</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.300347476&#038;type=2&#038;subid=0"><img border=0 src="http://a1814.phobos.apple.com/us/r1000/039/Purple/a7/df/ed/mzi.skdmwozh.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.300347476&#038;type=2&#038;subid=0" /></div>
<p>Called a Swiss army-knife for the mobile Mac OS X admin, with Server Admin Remote IT administrators can monitor the alive status of Mac OS X Server services, start/stop services and observe the services&#8217; logs (Mac OS X Snow Leopard, Mac OS X Leopard Server and Mac OS X Tiger Server). Works on EDGE, WiFi and 3G connections. No further installation on your Mac OS X Server needed, since Server Admin Remote uses the same interface as Mac OS X Server Admin.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.300347476&#038;type=2&#038;subid=0">Buy it Now ($11.99)</a></strong><br />
Developer: <a href="http://www.harlekins.org/ServerAdminRemote/">Harlekins</a></p>
<h4>Rackspace Cloud</h4>
<p>If you&#8217;ve got a Rackspace Cloud Servers account, this app is the shit. Reboot, rename, resize, and rebuild your Cloud Servers, spin up a new server or delete an existing one, change your root password, bootstrap Cloud Servers with Chef from your Chef server or the Opscode Platform, open and manage Cloud Files assets and control your CDN settings for Cloud Files containers, play Cloud Files audio and video over Airplay to your Apple TV (iOS 4.3 and up) &#8211; a ton more. It&#8217;s not a complete replacement for their control panel, but you can do a heck of a lot with it.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/rackspace-cloud/id327870903?mt=8#">Download Now (FREE)</a></strong><br />
Developer: <a href="http://www.rackspace.com">Rackspace</a></p>
<h4>Vtrace</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.335485119&#038;type=2&#038;subid=0"><img border=0 src="http://a546.phobos.apple.com/us/r1000/051/Purple/54/d0/e5/mzi.nlhvsldh.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.335485119&#038;type=2&#038;subid=0" /></div>
<p>Simple visual traceroute (or TracerT, if you&#8217;re <a href="http://www.youtube.com/watch?v=SXmv8quf_xM">this kid</a>) that uses your current location to take you down the bunny trail to whatever IP or hostname you&#8217;re looking up.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.335485119&#038;type=2&#038;subid=0">Download Now (FREE)</a></strong><br />
Developer: <a href="http://vladalexa.com/apps/ios/vtrace/">Vlad Alexa</a></p>
<h4>iAccess for Nagios</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.340379438&#038;type=2&#038;subid=0"><img border=0 src="http://a327.phobos.apple.com/us/r1000/013/Purple/5e/0f/17/mzi.ggbpufwi.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.340379438&#038;type=2&#038;subid=0" /></div>
<p>Mobile Nagios client that gives you direct access to the /nagios dashboard. (Obviously, you need a Nagios server configured for this to work.)<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.340379438&#038;type=2&#038;subid=0">Buy Now ($3.99)</a></strong><br />
Developer: <a href="http://www.asion-it.de/iaccess-nagios.html">ASION IT Services</a></p>
<h4>Flame for Bonjour</h4>
<p>Flame is a browser for Bonjour network services. It lists the services advertised on your wireless network and you can browse them by server or by service type. When selecting a service, its advertised details are displayed. If an application on your iPhone or iPod touch can handle any of the advertised services, a command to open it right away is provided.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/flame/id325206381?mt=8">Download Now (FREE)</a></strong><br />
Developer: <a href="http://jerakeen.org/code/flame-iphone/">Tom Insam</a></p>
<h4>Ping A Majig</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.288423680&#038;type=2&#038;subid=0"><img border=0 src="http://a1253.phobos.apple.com/us/r1000/032/Purple/90/a8/6a/mzl.yduwxjhs.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.288423680&#038;type=2&#038;subid=0" /></div>
<p>Handy app that lets you check the ping status of multiple hostnames at one time. It&#8217;s a bit handier as a monitoring tool than the other apps that include ping as an available tool, since the at-a-glance view lets you see if any of your hosts are in trouble on one screen.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.288423680&#038;type=2&#038;subid=0">Buy Now ($0.99)</a></strong><br />
Developer: <a href="http://www.pingysoft.com/">Pingysoft</a></p>
<h4>RBL Status</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.328354770&#038;type=2&#038;subid=0"><img border=0 src="http://a133.phobos.apple.com/us/r1000/041/Purple/42/18/92/mzi.aceimxqj.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.328354770&#038;type=2&#038;subid=0" /></div>
<p>Simple but effective Real Time Blacklist looker-upper.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/flame/id325206381?mt=8">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://happymagenta.com/rblstatus/">Pavel Ahafonau</a></p>
<h4>iPortscan Pro</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.320540236&#038;type=2&#038;subid=0"><img border=0 src="http://a789.phobos.apple.com/us/r1000/025/Purple/67/18/c1/mzl.gybkjuav.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.320540236&#038;type=2&#038;subid=0" /></div>
<p>iPortScan PRO is a port scanner for your IPhone or IPodTouch. It does not feature any network discovery; however, this tool is useful for sysadmins checking what services are listening on a known system. This is very handy for the system admin who can use this tool to quickly portscan all of their systems to make sure nothing is open that shouldn&#8217;t be.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.320540236&#038;type=2&#038;subid=0">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://www.whitesidesolutions.com/">Whiteside Solutions LLC</a></p>
<h4>Default Logins</h4>
<p>This app contains a database of over 300 common and uncommon manufactures and the usernames and passwords they pre-configure their devices with (which there are 1,000 + in the database). Can come in handy for more nefarious reasons (if you&#8217;re that kinda person), but also super useful for fixing a relative&#8217;s biffed router when they ask you to come over and fix their internets.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/default-logins/id348570963?mt=8#">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://www.anthonylamantia.com/">anthony lamantia</a></p>
<p>So that&#8217;s my list &#8211; for now. Did I miss any that you love? Leave me a note in the comments.</p>
<p>PS &#8211; yes, that&#8217;s a photo of my actual license plate at the top of the post. And yes, that makes me more awesome than you. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/03/twitter-facebook-scams-rogue-apps/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/03/kutcherpic.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Know Your Social Media Scams &#038; Rogue Apps" height="90" width="90" onmouseover="onover('Know Your Social Media Scams &#038; Rogue Apps')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/07/nes-haiku-win-iphone-skin/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/07/nes.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Share Your NES Haiku, Enter to Win an NES Controller iPhone 3G/3GS Ski" height="90" width="90" onmouseover="onover('Share Your NES Haiku, Enter to Win an NES Controller iPhone 3G/3GS Ski')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/version-control.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="SVN Working Copies and Repository Locations" height="90" width="90" onmouseover="onover('SVN Working Copies and Repository Locations')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Facebook Introduces HTTPS Opt-In for Users, Impacts App Developers</title>
		<link>http://www.snipe.net/2011/01/facebook-https-opt-in/</link>
		<comments>http://www.snipe.net/2011/01/facebook-https-opt-in/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 17:24:04 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook applications]]></category>
		<category><![CDATA[facebook applicaton development]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3332</guid>
		<description><![CDATA[In an article posted today on the Facebook Developer Blog, Facebook announced that they would be offering users the option to switch their Facebook experience to HTTPS-only, which would force all Facebook page loads to be routed over SSL. According to the blog entry, this feature would be opt-in, and canvas application developers would need [...]]]></description>
			<content:encoded><![CDATA[<p>In an article posted today on the Facebook Developer Blog, Facebook announced that they would be offering users the option to switch their Facebook experience to HTTPS-only, which would force all Facebook page loads to be routed over SSL.<span id="more-3332"></span></p>
<p>According to <a href="http://developers.facebook.com/blog/post/452">the blog entry</a>, this feature would be opt-in, and canvas application developers would need to provide an SSL url for the &#8220;Secure Canvas URL&#8221;. </p>
<p>If a user who has opted into the SSL-only version of Facebook attempts to access a Facebook Application that doesn&#8217;t have a Secure Canvas URL set, the user will evidently be shown a message (which will likely be confusing and scary, not because Facebook will purposefully make it so, but because most users don&#8217;t really understand SSL) that will give them the option to switch from HTTPS to HTTP. From the post:</p>
<blockquote><p>If you do not provide a secure Canvas URL, we will display a confirmation page to let HTTPS users switch to HTTP and continue to your app.</p></blockquote>
<p>This currently affects CANVAS apps only &#8211; not application tabs &#8211; although that may very well change once Facebook pushes the IFRAME version of tabs out some time in Q1. </p>
<p>HTTPS is slower and more server intense than HTTP, and it&#8217;s one more cost/timeline issue that has to be factored in. For some clients, I set up the hosting environment (which would include DNS, SSL, etc) &#8211; for others, their IT department provisions web space and handles DNS, and they often require a mountain of paperwork and a week to process. </p>
<p>For the latter scenario, the cost of the certificate is negligible, but for a highly-trafficked app, the increase in server load could have serious financial impact. It could mean the difference between needing one server and several.</p>
<p>For smaller companies, stepping up to SSL would mean buying a certificate and potentially paying extra for the dedicated IP address it will need, and if the app takes off, a much heftier hosting bill for running everything over SSL.</p>
<p>If the above would actually, truly improve the safety of the users in some significant way, I&#8217;d probably still be on-board. </p>
<p>Security is something I take <em>very</em> seriously, and in 2010, <a href="http://en.wikipedia.org/wiki/Firesheep">Firesheep</a> showed the world how easy it was to hijack a user&#8217;s Facebook session and essentially pwn their account because the session data was being transmitted unencrypted and was sniffable over public wifi. To be fair, it wasn&#8217;t just Facebook that was affected, but if you&#8217;re logging into websites on an unencrypted public wifi, odds are your email accounts and everything else are at risk too.</p>
<p><strong>That said, this seems like it will give naive users a false sense of security and not actually provide that much value for the effort involved by the app developers. </strong></p>
<p>&#8220;Oh, this application must be safe &#8211; I&#8217;m using HTTPS, and the S stands for *secure*!&#8221;</p>
<p>Phishing, rogue apps and malware are already horrendous problems on social media websites, Facebook especially. I would much rather see Facebook (and others) improve their session handling before going in this direction. Reputable companies who are collecting any kind of PII are already running data submission over HTTPS, and non-reputable companies aren&#8217;t going to become more honest just by forcing them to encrypt the data they&#8217;re mining from your profile.</p>
<p><strong>The net result is a lot of extra work for developers and companies for not a lot of benefit to not a lot of users, with the side effect of confusing people into thinking that SSL = trustworthy, or that a non-SSL app is malicious and trying to eat their souls.</strong></p>
<p>IMHO, the much bigger threat to Facebook users is their own poor judgment on what to click on. <strong>Social engineering rules social networks, and no amount of encryption is going to fix that.</strong> As the <a href="http://www.jinx.com/men/shirts/geek/social_engineering.html">fabulous shirt from Jinx says</a> &#8220;there is no patch for human stupidity&#8221;. </p>
<p>Until people start being more critical of what they&#8217;re clicking on and what apps they&#8217;re allowing access to their profile, they&#8217;ve got a lot more to worry about than SSL. <strong>It&#8217;s the same false sense of security that users running antivirus programs often suffer from. </strong></p>
<p>&#8220;I don&#8217;t need to worry about what I click on &#8211; I&#8217;m running antivirus! My virus definitions are up to date, so I am safe and protected and nothing can harm me.&#8221;</p>
<p>In 2008, Symantec had to write new virus signatures every 20 seconds to keep up with the onslaught of malware that was released. This was increased to every 8 seconds by 2009. [Source: <a href="http://www.amazon.com/gp/product/0071742557?ie=UTF8&#038;tag=snipenet&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0071742557">Gray Hat Hacking The Ethical Hackers Handbook, 3rd Edition</a>]</p>
<p>To prove my point, I&#8217;ve created <a href="http://www.fb-profile-spy.com/">FB Profile Spy</a>. It&#8217;s still a work in progress, but it&#8217;s a better-security-through-humiliation project, similar to my better-behavior-through-humiliation project <a href="http://www.socialmediadouchebag.net">socialmediadouchebag.net</a>. It&#8217;s completely safe &#8211; and not even hooked up to the Facebook API at all (but of course please feel free to use NoScript and check it out thoroughly before interacting with the links. I have nothing to hide.) Click through and &#8220;allow&#8221; the &#8220;app&#8221;. I need to tighten up the javascript slideshow lecture at the end and I need to sync up the layout with the new profile design, but it&#8217;s coming along.</p>
<p>What do you think? Am I just being a whine-ass lazy developer? Am I being a slacker security pundit? Let me know in the comments.</p>
<p><em>NOTE: This article first appeared on <a href="http://fbmhell.com">FBMHell.Com</a>.</em></p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/11/facebook-and-myspace-users-beware-virus/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/11/virus3.gif&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Facebook and MySpace Users, Beware!" height="90" width="90" onmouseover="onover('Facebook and MySpace Users, Beware!')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/10/twitter-launches-beta-lists/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/10/beta_alert.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Twitter launches groups in BETA for some users" height="90" width="90" onmouseover="onover('Twitter launches groups in BETA for some users')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/02/practical-mod_rewrite/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/02/dave.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Practical Mod_Rewrite for Web Developers" height="90" width="90" onmouseover="onover('Practical Mod_Rewrite for Web Developers')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2011/01/facebook-https-opt-in/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>A Few Quick Thoughts on RockMelt</title>
		<link>http://www.snipe.net/2010/11/rockmelt/</link>
		<comments>http://www.snipe.net/2010/11/rockmelt/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 18:45:24 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[rockmelt]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3240</guid>
		<description><![CDATA[So I tried out RockMelt earlier this week, not because I feel that we need another web browser out in the wild, but because this is what I do for a living, it&#8217;s important for me to know what&#8217;s going on, and more specifically, if it&#8217;s going to break my shit. Note: This will be [...]]]></description>
			<content:encoded><![CDATA[<p>So I tried out RockMelt earlier this week, not because I feel that we need another web browser out in the wild, but because this is what I do for a living, it&#8217;s important for me to know what&#8217;s going on, and more specifically, if it&#8217;s going to break my shit.</p>
<p><span id="more-3240"></span>Note: This will be <del datetime="2010-11-12T17:19:25+00:00">a quick one</del> long and rambling, because <del datetime="2010-11-12T17:19:25+00:00">my Macbook Pro is in the shop and I&#8217;m using an old 13&#8243; Macbook to write this, and it makes me want to punch babies</del> that&#8217;s how I roll. </p>
<p>RockMelt is a new browser that puts more emphasis on your own social network of friends, backed by the some of the guys behind the Netscape browser. If you&#8217;ve been living under a rock and haven&#8217;t heard of it, watch their promo video below:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/bAPKPhoTqFY?fs=1&amp;hl=en_US&amp;color1=0x5d1719&amp;color2=0xcd311b" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/bAPKPhoTqFY?fs=1&amp;hl=en_US&amp;color1=0x5d1719&amp;color2=0xcd311b" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>That video is pretty much all their website has to offer curious onlookers right now, and it sure makes you feel good watching it. Until you realize that the warm fuzzies Toby is talking about have more to do with his involvement in social networks and being connected to his friends in general than they do with those connections being integrated into your browsing experience.</p>
<p>Personally, I think the toolbars of your Facebook friends and applications <em>looks</em> nice, but after using it for five minutes, I wanted to hide them. I like my screen real-estate, and it&#8217;s creepy to have a dozen of my friends and family staring at me from the sidebar while I&#8217;m spanking it to my favorite Brazilian transvestite pr0n. </p>
<p>If I hide that toolbar, I&#8217;m hiding the very feature that sets RockMelt apart from other browsers, so while it&#8217;s great that you can hide it, what you&#8217;re left with at that point is a very vanilla browser that is exactly the same as every other browser.</p>
<p>One thing that actually really pissed me me off is that when I connected RockMelt to my Facebook account (which it prompts you to do immediately upon first-time launch), it set my online status to &#8220;online&#8221; automatically. I never show myself as online, because if you don&#8217;t have my real chat client names (Gtalk, AIM, etc), I probably don&#8217;t want to talk to you anyway. It took me a minute or two to figure out how to turn it back to &#8220;offline&#8221;. I don&#8217;t know if that&#8217;s RockMelt&#8217;s fault or Facebook&#8217;s, but given how creepy-uncle Facebook has been over the last year, that did not make a stellar first impression.</p>
<p>Speaking of Facebook &#8211; am I the only one that&#8217;s creeped out by the fact that Facebook is one of the backbones of this browser? For all they have done to betray my trust over the past year, the LAST thing I want to do is facilitate them knowing what I&#8217;m doing online more than they already do. </p>
<p>Do I think RockMelt has formed an unholy union with Facebook to spy on me? No &#8211; but RockMelt doesn&#8217;t tell you much of anything right now (and Facebook never does), so my lack of understanding about what data is being collected and stored by Facebook by way of RockMelt makes me very uncomfortable.</p>
<p>Also, it&#8217;s pretty clear by the way Facebook integration stands apart from the other social networks like Twitter that RockMelt is focusing primarily on Facebook. Considering how often Facebook&#8217;s API changes (read: breaks) and how much they are moving forward with their own agendas, I&#8217;m not sure this is a good long-term plan. One <a href="http://www.technologyreview.com/web/26703/?p1=A1&#038;a=f">article on TechReview</a> comments: &#8220;It&#8217;s not a generic &#8216;social browser.&#8217; It&#8217;s a Facebook browser.&#8221;</p>
<p>Considering how Facebook is already trying to re-invent the web, I don&#8217;t know what that means for RockMelt in the future.</p>
<p>There are some nice features to RockMelt though. The right-side sidebar gives easy access to twitter with a simple but elegant UI, however it doesn&#8217;t really seem to be optimized for people with a large number of followers/following. </p>
<p><img src="http://www.snipe.net/wp-content/uploads/2010/11/RockMelt-—-Geek-Haiku-haiku-and-senryu-with-geeky-themes.jpg" alt="" title="RockMelt — RSS Feeds" width="259" height="398" class="alignright size-full wp-image-3243" />Also in that right sidebar, you can add RSS feeds to keep track of your favorite websites. They&#8217;re displayed beautifully, with a square site icon (based on the site&#8217;s favicon) and an unread count badge. If you&#8217;re on a site that has a detectable RSS feed, the &#8220;add feed&#8221; button turns green. </p>
<p>I think this could actually work to help people who don&#8217;t know or care what RSS feeds are learn to use them more. The one-click nature of subscribing when you&#8217;re on a page with an RSS feed makes the whole process cleaner and more clear than traditional RSS subscriptions, where the process is slightly more technical and deliberate. </p>
<p>On other browsers, even if a non-technical user can decipher what &#8220;Subscribe to RSS&#8221; means, they still have to do some work to access those feeds. RockMelt makes it a no-brainer &#8211; the user doesn&#8217;t need to know what RSS is for them to immediately see the benefit of subscribing &#8211; however it also simplifies it to the point where it could potentially be useless for people who already know and love RSS, and are subscribed to many feeds. </p>
<p>I subscribe to over 100 RSS feeds, so RockMelt is clearly not going to be of much help there. Maybe one solution would be to sync with Google Reader (please?) and let you pick your top five that you want to have in your sidebar.</p>
<p>That right-side toolbar references &#8220;Apps and Feeds&#8221;. I wonder if some sort of Facebook application integration is on their roadmap, which would be great, because then the useless jackholes that spend all day playing Farmville at the office won&#8217;t even need to switch browser windows to annoy the living shit out of everyone they know.</p>
<p>Another nice feature is the &#8220;Share&#8221; button built into the browser, that puts Twitter and Facebook sharing just a click away. </p>
<p><img src="http://www.snipe.net/wp-content/uploads/2010/11/Share-560x220.jpg" alt="" title="Share" width="560" height="220" class="aligncenter size-large wp-image-3246" /></p>
<p>Of course there are already bookmarklets for all that already, and most websites now have share functionality built into their content, but for the less tech-savvy who might not know they exist, this makes it easy for people to share what they&#8217;re looking at in a way that uses a consistent UI on every single page they visit.</p>
<p>One UI irritation I ran across is that if you have the share pop-up activated and switch apps, it can be easy to forget that it has focus, so when you switch back to RockMelt, and go to type something in the url bar, the comments box in the share popup still has focus, which could lead to some embarrassing moments when you meant to pull up your favorite pr0n site but ended up accidentally sharing it with your Facebook wall. (I only accidentally shared the RockMelt website. This time.)</p>
<p>Ultimately, other than perhaps a morbid sense of curiosity, whenever a new browser comes out, I&#8217;m more worried than excited. If it becomes remotely popular, that&#8217;s one more browser I have to test on, one more variable thrown into the standards mix.</p>
<p>It&#8217;s not as bad these days as it used to be. Most current browsers have some semblance of standards-compliance, and display differences are minimal. (If you don&#8217;t believe me, you haven&#8217;t been in the industry as long as I have. Trust me on this one. It used to be so, so much worse.)</p>
<p>I&#8217;m pleased to say that RockMelt&#8217;s rendering seems fine, and while I haven&#8217;t had a chance to do any complicated DOM-tomfoolery with it yet, all of my initial tests showed layout and javascript working exactly as expected, and exactly as it would appear in any other browser. So that&#8217;s good news.</p>
<p>It may seem like I&#8217;m hating on RockMelt &#8211; I&#8217;m actually not. </p>
<p>Is it a browser for the power user? I&#8217;d say not. </p>
<p>Is there a market for it? I think so. </p>
<p>Most of the tech site reviews have been neutral at best, or condemning this browser to failure before it&#8217;s even open to the public, but I think that&#8217;s a symptom of who has been given access to review it. Naturally, the techies are going to be the ones with the first-look. In fact, they&#8217;re normally the only ones that care about a first-look. And techies are exactly the audience this browser will not fly for. At least not at this point. </p>
<p>But it&#8217;s important to remember that there people out there that aren&#8217;t as tech savvy &#8211; who wouldn&#8217;t know a Firefox addon if it bit them in the ass, and have no desire to know more. I look at my biological father, who only recently got an email account and joined Facebook. He doesn&#8217;t know or care about computers, and the only reason he finally broke down and got an email account was to stay in touch with my sister and I. As he uses the internet more, I expect him to find more things he likes (pr0n), but he just doesn&#8217;t care about how or why it works, and won&#8217;t go to great lengths to figure stuff out. </p>
<p>To techies, Facebook may be an aggravation &#8211; something we put up with because it&#8217;s part of our jobs or because it&#8217;s so ubiquitous that it&#8217;s hard to leave. But people spend more time on Facebook than on any other site on the web, so clearly, there are plenty of folks (and by plenty, I mean *millions*) that love it and use it constantly.</p>
<p>RockMelt&#8217;s tagline is &#8220;Your browser. Re-imagined.&#8221; So far, it&#8217;s more like &#8220;Your browser. With some integration that&#8217;s already totally possible with plugins, for people not savvy enough to use plugins.&#8221; But it&#8217;s early yet, and I&#8217;m curious to see where it goes.</p>
<p>Also? Dumbest name ever. Seriously guys. WTF.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/quick-and-dirty-php-caching/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/lolcat.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Quick and Dirty PHP Caching" height="90" width="90" onmouseover="onover('Quick and Dirty PHP Caching')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/01/facebook-lite-default/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/01/basement-cat-updates-facebook-pic.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Unclutter Your Facebook Feed: Set FB Lite As Your Default" height="90" width="90" onmouseover="onover('Unclutter Your Facebook Feed: Set FB Lite As Your Default')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/05/new-facebook-page-admin-scam/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/05/facebookscam.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="New Facebook Page Admin Scam" height="90" width="90" onmouseover="onover('New Facebook Page Admin Scam')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/11/rockmelt/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Upcoming WordPress Security Book</title>
		<link>http://www.snipe.net/2010/11/wordpress-security-book/</link>
		<comments>http://www.snipe.net/2010/11/wordpress-security-book/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 16:44:58 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP/mySQL]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3234</guid>
		<description><![CDATA[I casually asked a few of you (okay, almost 8,000 of you) if there would be any interest in a commercial (but cheap) e-book on securing, monitoring, and un-hacking WordPress. I received enough &#8220;yes&#8221;, &#8220;absolutely&#8221; and &#8220;hell yeah!&#8221; replies that I decided to move forward with this project. I&#8217;m at the very early stages of [...]]]></description>
			<content:encoded><![CDATA[<p>I casually asked a few of you (okay, almost 8,000 of you) if there would be any interest in a commercial (but cheap) e-book on securing, monitoring, and un-hacking WordPress. I received enough &#8220;yes&#8221;, &#8220;absolutely&#8221; and &#8220;hell yeah!&#8221; replies that I decided to move forward with this project.<span id="more-3234"></span></p>
<p>I&#8217;m at the very early stages of writing a book about how to secure, monitor and un-hack WordPress. This book will be the culmination of everything I know about keeping WordPress hardened against attacks, how to keep an eye on your install so that you&#8217;re the first to know if something has happened, and how to handle the situation if you bought the book too late and got pwned anyway.</p>
<p><strong>Can I absolutely guarantee that you&#8217;ll never get hacked if you do everything in this book? </strong>Of course not &#8211; new exploits emerge all the time. However I can promise you that you&#8217;ll be a lot less likely to get hacked if you follow these instructions, and if you do get hacked, you&#8217;ll be a far better place to recovery quickly and completely &#8211; and if that&#8217;s not worth $5 to you, you deserve what you get.</p>
<p>I can also promise that if there is enough interest in this book, I will keep it updated and release new revisions for free for those people who have already purchased it. I don&#8217;t believe in having to re-purchase a book just because a paragraph or two was added. It pisses me off when I have to do it, and I&#8217;m sure it pisses you off, too.</p>
<p><strong>How much?</strong><br />
Right now, I&#8217;m toying with a $5-$10 price range, depending on how long and detailed it ends up being. It will not be more than $10, regardless of how long it is.</p>
<p><strong>Are you doing advanced sales?</strong><br />
YES! If you&#8217;d like to pre-order, <strong><a href="http://funds.gofundme.com/11u94" target="_blank">check out the page on GoFundMe</a></strong>. There are a few different options for pre-ordering, so it&#8217;s worth a look.</p>
<p><strong>Why an e-book instead of a &#8220;real&#8221; book?</strong><br />
I might make this available in hardcopy through Lulu or some such service &#8211; but there are several reasons I went with e-book. First, <a href="http://www.amazon.com/s/ref=ntt_athr_dp_sr_2?_encoding=UTF8&amp;sort=relevancerank&amp;search-alias=books&amp;field-author=Alison%20Gianotto" target="_blank">I&#8217;ve written &#8220;real&#8221; books before</a>. The process is frustrating, and there&#8217;s not a lot of money in it, in tech books anyway. By self-publishing, more of the money ends up in my pocket where it belongs. Second, as a recent convert to e-books (thanks to my iPad), I prefer to give folks the option of printing if they need to, but spare the trees for those that don&#8217;t. And third, stuff changes all the time in technology. Paper books have never seemed like a great way to cover tech topics, since half the book will be obsolete within a year or two, my own previous books included. Self-publishing via e-book means I can update the information as needed, and not feel like a jackass for making people buy a new edition of the book.</p>
<p><strong>What qualifies you to write this book anyway?</strong><br />
I&#8217;ve been working with WordPress since 2005, and have spent a considerable amount of time over the past several years doing forensic and recovery work on hacked WordPress blogs. For some idea of the type of content you can expect to find here, <a href="http://www.snipe.net/2010/01/when-wordpress-gets-hacked/">check out this blog post from Jan 2010</a>. I&#8217;ve helped folks like Chris Brogran, Scott Stratten, the Crave Network and others quickly recovery from a hack, and lock down their installs so they are less vulnerable to future attacks. Ask them &#8211; they&#8217;ll tell you. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>How much swearing will there be?</strong><br />
Probably less than you expect. My goal is that this can be something some of you can recommend to your clients (the ones that won&#8217;t pay you to secure their sites), and as tempting as it is, that might not fly for the general public. I will, however, try to keep it entertaining in my own way.</p>
<p><strong>What&#8217;s the title going to be?</strong><br />
NFC. Suggestions welcome.</p>
<p><strong>How can I stay updated on the book&#8217;s progress?</strong><br />
I&#8217;ll be updating the official book website as new developments arise. <a href="http://secure-wp.com/">Check it out here</a>.</p>
<p><strong>I have another question!</strong><br />
Tag me on Twitter at <a href="http://twitter.com/snipeyhead">@snipeyhead</a> or leave a comment below and ask away.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/12/warcraft-security-better-than-banking-security/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/12/product.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Warcraft Security Better Than Banking Security?" height="90" width="90" onmouseover="onover('Warcraft Security Better Than Banking Security?')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/01/security-keynote/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/01/donkey_balls.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Security Keynote Download" height="90" width="90" onmouseover="onover('Security Keynote Download')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/01/when-wordpress-gets-hacked/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/01/cockpunch.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="When Your WordPress Blog Gets Hacked" height="90" width="90" onmouseover="onover('When Your WordPress Blog Gets Hacked')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/11/wordpress-security-book/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firefox Addons for Penetration/XSS Testing</title>
		<link>http://www.snipe.net/2010/10/firefox-addons-xss-testing/</link>
		<comments>http://www.snipe.net/2010/10/firefox-addons-xss-testing/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 19:25:48 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP/mySQL]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[exploits]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[hacked]]></category>
		<category><![CDATA[penetration testing]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=2843</guid>
		<description><![CDATA[2010 was supposed to be the year of the Tiger, but it&#8217;s felt more like the year of Pwny so far. This article covers some Firefox add-ons that help you test your own apps, whether you&#8217;re working with a penetration tester, or by default, you are the penetration tester. I&#8217;ll start with the obvious candidates [...]]]></description>
			<content:encoded><![CDATA[<p>2010 was supposed to be the year of the Tiger, but it&#8217;s felt more like the year of Pwny so far. This article covers some Firefox add-ons that help you test your own apps, whether you&#8217;re working with a penetration tester, or by default, you <em>are</em> the penetration tester.<br />
<span id="more-2843"></span></p>
<p>I&#8217;ll start with the obvious candidates that you probably already have installed if you&#8217;re a developer. I&#8217;ve also added a few that are useful for post-hack diagnostics and recovery.</p>
<h4>General</h4>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1843/">Firebug</a></strong> &#8211; Firebug is great for web development in general, but the debugging tools can help track down calls to rogue javascript on external servers, among many other things.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/60/">Web Developer Toolbar</a></strong> &#8211; Another great web dev tool, the Web Developer Toolbar makes it easy to turn javascript and cookies on and off selectively, view form fields and disable restrictions and much, much more. </p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/5914/">DNS Cache</a></strong> &#8211; simple addon that lets you clear or disable Firefox&#8217;s DNS cache. Not specifically for pen testing, but useful nonetheless.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/14503/">Notable</a> </strong>- love this addon, which lets you do a full-page screenshot with annotations over at <a href="https://www.notableapp.com/">notableapp.com</a>. As you&#8217;re testing, there&#8217;s a good chance you&#8217;re going to need to show your other devs or account managers a screenshot so they can see the vulnerability being exploited. While something simple like Fireshot would work fine (or native screenshots), I like using Notable for complex situations that require explanations on multiple points on the page. Exports to annotated PDF.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/46698/">Groundspeed</a></strong> &#8211; simple form toolkit that allows you to edit form fields (hidden to text, etc), remove length restrictions, change/remove javascript event handlers, and change form target so that it opens in a new tab.</p>
<h4>Code Injection</h4>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/7597/">SQL Inject Me</a></strong> &#8211; helps test for SQL injection vulnerabilities.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/7598/">XSS Me</a></strong> &#8211; used to test for reflected Cross-Site Scripting (XSS). It does NOT currently test for stored XSS.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/7595/">Access Me</a></strong> &#8211; used to test some access vulnerabilities related to web applications. The tool works by sending several versions of the last page request. A request with the session removed will be sent. A request using the HTTP HEAD verb and a request using a made up SECCOM verb will be sent. A combination of session and HEAD/SECCOM will also be sent.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/10345/">JS Deobfuscator</a></strong> &#8211; many attacks inject obfuscated javascript into a page so that it becomes harder for you to simply grep the source for something obvious, like the domain name to which the bad script is redirecting the user. This addon helps deobfuscate the javascript so you can see what&#8217;s really going on.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/3899/">Hackbar</a></strong> &#8211; helps with testing sql injections, XSS holes and site security. Ugly as sin, but it works well.</p>
<h4>Header and URL Monitoring/Tampering</h4>
<p>Note that some of these addons do similar things &#8211; try them and stick with whichever one you like best.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/6647/">HttpFox</a></strong> &#8211; monitors and analyzes all incoming and outgoing HTTP traffic between the browser and the web servers.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/3829/">Live HTTP Headers</a></strong> &#8211; view HTTP headers of a page and while browsing.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/967/">Modify Headers</a></strong> &#8211; add, modify and filter http request headers. You can modify the user-agent string, add headers to spoof a mobile request (e.g. x-up-calling-line-id) and much more.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/966/">Tamper Data</a></strong> &#8211; use tamperdata to view and modify HTTP/HTTPS headers and post parameters, trace and time http response/requests and security test web applications by modifying POST parameters.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/59/">User Agent Switcher</a></strong> &#8211; allows you to easily toggle between pre-set user agent strings, or set your own.</p>
<h4>Environment Detection</h4>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/4276/">Header Spy</a></strong> &#8211; lightweight addon that displays information about the website&#8217;s server in your statusbar. This is not as useful for pen testing as it is for impressing the crap out of clients who don&#8217;t know what server they&#8217;re running. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/8946/">Host Spy</a></strong> &#8211; integrated shortcut to show you who a website&#8217;s IP neighbors are on shared hosting.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/590/">ShowIP</a></strong> &#8211; Small addons that shows the IP address of the website in your statusbar and a link to some additional tools.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/3572/">URL Flipper</a></strong> &#8211; quickly and easily increment and decrement numbers and strings in URLs for navigating through URL sequences (for example, user ids or session info in the query string.)</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/10229/">Wappalyzer</a></strong> &#8211; uncovers the technologies used on websites. It detects CMS and e-commerce systems, message boards, JavaScript frameworks, hosting panels, analytics tools and several more.</p>
<h4>Searching</h4>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/49858/">Offensive Security Exploit Database</a> </strong> &#8211; this adds the excellent database of exploits at <a href="http://www.exploit-db.com">exploit-db.com</a> as one of your search engine options.</p>
<p>I&#8217;ve also just created a <strong>search plugin for XSSed.Com</strong>, <del datetime="2010-10-15T01:43:53+00:00">but it&#8217;s pending approval at Mozilla, so not sure when that will be ready for you</del> which can be <strong><a href="https://addons.mozilla.org/en-US/firefox/addon/241845/">downloaded here</a></strong>. It&#8217;s not exactly rocket science to add a new search site to your browser search bar, but I figured it was quick and easy to whip up. Feel free to check out the <a href="https://addons.mozilla.org/en-US/firefox/files/browse/101135">source code for the plugin here</a>.</p>
<h4>Too Many Addons Got You Down?</h4>
<p>If you&#8217;re finding your plugins are slowing down Firefox too much, you might want to create a separate Firefox profile specifically for testing, and switch to that profile when you&#8217;re ready to start hammering away. Also bear in mind that you might need to tweak some settings on these, or only enable them right before you use them, as the toolbars and sidebars can be a bit bulky.</p>
<p>Also keep in mind that the Net option on the web developers toolbar, or any of the header analyzer addons can be very helpful in general testing between dev and live environments (load the page on live and make sure nothing is being pulled from the dev address) and also to make sure your SSL requests are being handled correctly.</p>
<h4>Some Additional Thoughts&#8230;</h4>
<p>When folks ask me how I do penetration testing &#8211; whether I use software, or do it by hand &#8211; the best way I can answer is &#8220;both&#8221;. Software will only ever get you so far, but it&#8217;s a critical tool in helping you figure out where the vulnerabilities are. It&#8217;s not unlike using a metal detector to find treasure. When the metal detector is doing its job, it finds, well, metal. Not necessarily treasure, although fancier metal detectors have additional software that helps try to identify the buried object by shape and size. You still have to physically dig up the item and rely on your knowledge and experience to determine whether or not it really is treasure, or just junk. The metal detector simply finds something that meets a basic set of requirements, to save you from having to dig up every square inch of the beach. </p>
<p>When testing web applications for vulnerabilities, software does very much the same thing. It simply automates tasks that you could do by hand but that would take an unreasonable amount of time, but ultimately when it finds something, you still need to know enough about what you&#8217;re looking at to determine how big a threat it actually is. Most of the time the software will attempt the to try the lowest-level exploit, for example, the ability to execute arbitrary javascript in a page. Your testing tools may demonstrate that you can create a javascript alertbox on the page, but it&#8217;s your knowledge and experience that will help you determine the full extent of the vulnerability, for example whether that arbitrary javascript could be used to redirect a user to a new page, hijack the user&#8217;s session data, etc.</p>
<p>The reason I ended this post with a long-winded ramble is because I wanted to make it clear that just having the tools isn&#8217;t enough. Actually using them, and knowing what to do with the results are important. Understanding the basic mechanics of how exploits work is the only way you can make sure your applications are written to mitigate them. Having the tools installed but never understanding or using them is like buying a metal detector and keeping in the closet and then wondering why you haven&#8217;t found anything valuable yet.</p>
<p><strong>If you&#8217;re interested in learning more about web application penetration testing and security, check out the following books:</strong></p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0470170778?ie=UTF8&#038;tag=snipenet&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0470170778">The Web Application Hacker&#8217;s Handbook: Discovering and Exploiting Security Flaws</a></li>
<li><a href="http://www.amazon.com/gp/product/0596514832?ie=UTF8&#038;tag=snipenet&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0596514832">Web Security Testing Cookbook: Systematic Techniques to Find Problems Fast</a></li>
<li><a href="http://www.amazon.com/gp/product/1590597842?ie=UTF8&#038;tag=snipenet&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1590597842">Foundations of Security: What Every Programmer Needs to Know</a></li>
<li><a href="http://www.amazon.com/gp/product/1597495883?ie=UTF8&#038;tag=snipenet&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1597495883">Ninja Hacking: Unconventional Penetration Testing Tactics and Techniques</a></li>
</ul>
<h4>How Do You XSS?</h4>
<p>These addons are not obviously meant to be a replacement for more capable and thorough penetration testing tools such as metaploit, netsparker, etc. They&#8217;re just meant to be a convenient way for developers to test code during and after development.</p>
<p>There is a  more comprehensive collection of addons listed <a href="https://addons.mozilla.org/en-US/firefox/collections/adammuntner/webappsec/?page=1">here</a>, but this is what I use. If you&#8217;ve got a favorite that I&#8217;ve missed, please be sure to share in the comments!</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/01/easier-cross-browser-testing/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/01/cross_browser-compatible2.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Easier Cross-Browser Testing" height="90" width="90" onmouseover="onover('Easier Cross-Browser Testing')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2007/01/firefox-extensions-i-cant-live-without/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/firefox_eats_ie.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Firefox extensions I can&#8217;t live without" height="90" width="90" onmouseover="onover('Firefox extensions I can&#8217;t live without')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/06/hacking-firefox/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/firefox.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Hacking Firefox" height="90" width="90" onmouseover="onover('Hacking Firefox')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/10/firefox-addons-xss-testing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introducing FBMHell.Com</title>
		<link>http://www.snipe.net/2010/07/introducing-fbmhell-com/</link>
		<comments>http://www.snipe.net/2010/07/introducing-fbmhell-com/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 00:09:32 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook application development]]></category>
		<category><![CDATA[facebook applications]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[static fbml]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3161</guid>
		<description><![CDATA[Good news, everyone! My compulsive need to make websites and write content has struck again, this time resulting in my new site, FBMHell.Com, which I hope will evolve into a great resource for Facebook developers, whether you&#8217;re an app developer or fan page designer. It&#8217;s literally just been launched, so I&#8217;m looking for your help. [...]]]></description>
			<content:encoded><![CDATA[<p>Good news, everyone! My compulsive need to make websites and write content has struck again, this time resulting in my new site, <a href="http://fbmhell.com">FBMHell.Com</a>, which I hope will evolve into a great resource for Facebook developers, whether you&#8217;re an app developer or fan page designer.</p>
<p><span id="more-3161"></span>It&#8217;s literally just been launched, so I&#8217;m looking for your help. I&#8217;ll be going through some older posts and rounding up the questions that seem to come up often and writing up answers for the new site, but if there&#8217;s a burning question you&#8217;ve had for a while and haven&#8217;t been able to find an answer for, let me know in the comments.</p>
<p><a href="http://fbmhell.com"><img class="aligncenter size-large wp-image-3162" title="fbmhell" src="http://www.snipe.net/wp-content/uploads/2010/07/fbmhell-560x500.png" alt="" width="560" height="500" /></a></p>
<p>One that comes up often is whether or not you can include an IFRAME in a tab, so don&#8217;t ask that one <img src='http://www.snipe.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It&#8217;s already on deck.</p>
<p>I&#8217;m looking for all kinds of questions, ranging from the complicated to the more basic, so don&#8217;t be afraid to ask. More complicated tutorials (similar to what I&#8217;ve posted in the past regarding app development and complex mini-sites on tabs) will take a little longer, so be patient, and remember to <a href="http://feeds.feedburner.com/snipe/fbmhell">subscribe to the RSS feed</a> so you&#8217;ll get all the latest posts.</p>
<p>Categories will be added as content demands, of course.</p>
<p>I really want this site to be a great resource for everyone (including myself, as a repository of stuff I know works), so I&#8217;m looking forward to your feedback!</p>
<p>Also keep your eyes peeled for the launch of <a href="http://fbmlwizard.com">FBMLWizard</a>, a drag+drop Facebook fan page tab builder.  I&#8217;ll update you here when it&#8217;s ready.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/09/introducing-tehawesomenet/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/09/stars.gif&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Introducing TehAwesome.Net" height="90" width="90" onmouseover="onover('Introducing TehAwesome.Net')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/10/upcoming-changes-to-the-facebook-application-platform/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/10/facebook_1.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Big Changes to the Facebook Platform" height="90" width="90" onmouseover="onover('Big Changes to the Facebook Platform')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/05/facebook-fan-pages-10k/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/05/fuck-you.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You" height="90" width="90" onmouseover="onover('Want to Set a Default Landing Tab on Your Facebook Fan Page? It&#8217;ll Cost You')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/07/introducing-fbmhell-com/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Upgrading to WordPress 3.0 and Adding Multi-Site</title>
		<link>http://www.snipe.net/2010/06/upgrading-to-wordpress-3/</link>
		<comments>http://www.snipe.net/2010/06/upgrading-to-wordpress-3/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 06:09:49 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP/mySQL]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3071</guid>
		<description><![CDATA[WordPress 3.0, code name “Thelonious”, has been released, and it brings multi-site functionality as part of the core. As someone with far too many blogs of my own, I thought this would be a great time to start switching them all over, and let you know what you&#8217;re in for if you choose to do [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 3.0, code name “Thelonious”, has been released, and it brings multi-site functionality as part of the core. As someone with far too many blogs of my own, I thought this would be a great time to start switching them all over, and let you know what you&#8217;re in for if you choose to do the same.<br />
<span id="more-3071"></span><br />
Previously, if you wanted to run multiple sites from one core installation of WordPress, you would install <a href="http://mu.wordpress.org/">WPMU</a>. </p>
<p>I had tossed that idea around a lot over the past year, since I run several websites that run on WordPress, but I had heard from enough people who ran into plugin/MU conflict issues that made things go &#8216;splody &#8216;splody that I opted not to. So instead, every time a new version of WordPress came out, I&#8217;d end up upgrading around 20 installs. Blech.</p>
<p>With version 3.0 of WordPress, the ability to create multiple sites using one install of WordPress is built right into the core, so no need to fool around with WPMU. The temptation was too great this time, so I decided to give it a whack. It was not what I would call a smooth process, but it wasn&#8217;t terrible either.</p>
<blockquote><p><strong>STOP: </strong>If you are already running WPMU and you just want to figure out how to upgrade your existing WPMU sites to WordPress 3.0, you&#8217;re reading the wrong article.  <a href="http://developersmind.com/2010/06/17/upgrading-wordpress-mu-2-9-2-to-wordpress-3-0/">Try this one instead</a>.</p></blockquote>
<h3>Goals</h3>
<p>What I wanted to get out of this was to have one main core install, but run multiple sites on their own domains that all pulled from that main core, so upgrading to later versions would mean upgrading one core instead of a dozen or two.  These properties remaining at their current separate domain names (such as www.crankyhaiku.com, www.geekhaiku.com etc) was critical, both because of search engine optimization and for branding reasons.</p>
<h3>Upgrading</h3>
<p>The normal upgrade part was flawless, as WordPress upgrades tend to be these days. Automatic upgrade has never quite worked for me, so I always do a manual upgrade. It takes longer to upload the files, but it&#8217;s a pretty painless process. So to upgrade to 3.0, I did the usual: </p>
<ul>
<li>backup (which I didn&#8217;t actually have to do, since I automatically backup to the Amazon Cloud every night using <a href="http://www.webdesigncompany.net/automatic-wordpress-backup/">Automatic WordPress Plugin</a>) but I&#8217;m paranoid</li>
<li>delete the wp-admin directory</li>
<li> delete the wp-includes directory</li>
<li>upload everything in the WordPress package &#8211; except for wp-content &#8211; to the web root</li>
<li>hit the upgrade script to trigger the database updates</li>
</ul>
<p>Flawless, as usual. Not so much as a hiccup. Now came the trickier part &#8211; adding the &#8220;Network&#8221; functionality previously available in WPMU to start to consolidate sites.</p>
<h3>Creating a Multi-Site Network</h3>
<p>I can&#8217;t speak for how easy or difficult this normally was with WPMU, so unfortunately I can&#8217;t tell you how this process compares to a normal WPMU setup. It wasn&#8217;t awful, but it was definitely buggy.</p>
<p>The WordPress documentation on <a href="http://codex.wordpress.org/Create_A_Network">Creating a Network</a> walks through the basics well enough, so I suggest you start there so you know what to expect.</p>
<p><strong>Note: You will not be able to go through the wizard in your WordPress admin until you deactivate ALL of your plugins. You can obviously re-enable them later, but I found that many of them did not keep their original settings.</strong> </p>
<p>I suspect this might be because I chose &#8220;network activate&#8221; instead of just plain &#8220;activate&#8221;. I had wanted to make those plugins available for all sites in the network, and didn&#8217;t realize that it would wipe out my existing snipe.net settings when I did so. Oh well. (Incidentally, that explains why you might see some weird stuff on the site until I have a chance to go through everything one by one. Double &#8220;related posts&#8221; bits at the end of the articles, Apture wasn&#8217;t working, etc.) All of the settings are fixable, but it may take you a little time to figure out what&#8217;s been lost, and what you have to do to set it back to the way it was before.</p>
<h4>Editing Your wp-config.php</h4>
<p>Beyond the setup in your WordPress admin, you&#8217;ll need to make a few changes to your wp-config.php file and your htaccess file. I hadn&#8217;t updated my wp-config for several versions, so I decided to use the wp-config-sample.php file and just pull my existing database variables over. Whether you use your old wp-config.php or start fresh with the stock WordPress sample, you&#8217;ll need to add the following to your wp-config.php, just <em>above</em> the comment that says &#8220;/* That&#8217;s all, stop editing! Happy blogging. */&#8221;</p>
<p><code>define( 'MULTISITE', true );<br />
define( 'SUBDOMAIN_INSTALL', true );<br />
$base = '/';<br />
define( 'DOMAIN_CURRENT_SITE', 'www.yoursite.com' );<br />
define( 'PATH_CURRENT_SITE', '/' );<br />
define( 'SITE_ID_CURRENT_SITE', 1 );<br />
define( 'BLOG_ID_CURRENT_SITE', 1 );</code></p>
<p>If you followed my suggestion and read the <a href="http://codex.wordpress.org/Create_A_Network">WordPress documentation on creating a network</a> (you did read that, right?), you&#8217;ll see that you have two choices for how your network will be set up: sub-domain (blah1.yourdomain.com, blah2.yourdomain.com) or directory-based (yourdomain.com/blah1, yourdomain.com/blah2). Make sure you think this one through before you get started, since there doesn&#8217;t seem to be an easy way to switch between the two.</p>
<p>As I mentioned, I didn&#8217;t want my sites to live at subdomain.snipe.net, or snipe.net/blogname &#8211; I wanted them to live at their own urls. I also didn&#8217;t want a bunch of crap littering up my document root. The easiest way to do this on Rackspace Cloud Sites is through a combination of setting up a site alias, and using mod_rewrite to handle domains:</p>
<ul>
<li>Set up a <a href="http://help.rackspacecloud.com/article.php?id=077">domain alias</a>, like secondblog.com, and point it to originalblog.com</li>
<li>Modify the mod_rewrite rules in your htaccess access file </li>
<li>In your site preferences, point the blog url to the aliased domain name </li>
</ul>
<p>If you&#8217;re not on Rackspace Cloud Sites, you can just follow the directions in the WordPress documentation.</p>
<h4>Tweaking Your .htaccess</h4>
<p>You&#8217;ll need to make sure the bit below is in your htaccess file &#8211; but your WordPress Network Setup wizard will point that out to you anyway <img src='http://www.snipe.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><code>RewriteCond %{REQUEST_FILENAME} -f [OR]<br />
RewriteCond %{REQUEST_FILENAME} -d<br />
RewriteRule ^ - [L]<br />
RewriteRule . index.php [L]</code></p>
<p>One thing to look out for besides having to reset your plugin preferences: when I created my Network, setting this site as the default, it automatically tried to set the url as snipe.net/blog. I&#8217;m not sure why it did this, and I&#8217;m certain I didn&#8217;t add it anywhere, but when I committed the changeover to Network, all of my urls were broken (since snipe.net/blog/ doesn&#8217;t exist). It was a quick change that you can handle via the Settings menu, but watch out for it and be sure to test your links once you&#8217;ve made the switch. </p>
<h3>Importing Blogs</h3>
<p>Now that you&#8217;ve got a Network set up, you have actually add them to the Network so that they&#8217;re using the same core. I expected this to be a much bigger pain in the ass than it ended up being. All I had to do was go to the original admin, go to TOOLS > EXPORT and download the XML file. Then go into my WordPress 3.0 admin, select the site I wanted to admin, and go to TOOLS > IMPORT > WORDPRESS, and upload the XML file. Worked perfectly, so far as I can tell.</p>
<h3>Security Notes</h3>
<p>Consolidating all of your WordPress sites into one multi-site install has many benefits, the most obvious one being that it&#8217;s easier to maintain one core install than updating every single instance of WordPress you run. That said, you may want to consider a few things:</p>
<p>While one install is probably more &#8220;secure&#8221; than multi-installs in the real world simply because you&#8217;re more likely to keep one site updated than dozens, there are a few things to consider.</p>
<p>If you run multiple WordPress blogs under the same user (the same account, in Rackspace Cloud Sites), all of the files are owned by the same linux user and group. This means that if one of your WordPress installs ends up compromised, either because you forgot to upgrade one of them, or because of a <a href="http://blog.unmaskparasites.com/2010/06/14/attack-on-wordpress-blogs-on-rackspace/">vulnerability in your hosting company</a>, once an attacker has access to one of your blog installs, they have access to any other files owned by that user. Which means all of your other blogs, even the ones that are running current WordPress versions.</p>
<p>Along this same line of thought, if you&#8217;re running multiple WordPress installs under different users and you end up consolidating them to take advantage of the multi-site functionality, do so understanding that in this scenario, all of your blogs will be owned by the same user/group in the same webspace, so one vulnerability could easily turn into a much bigger problem. </p>
<p>Conversely, <a href="http://blog.unmaskparasites.com/2010/06/14/attack-on-wordpress-blogs-on-rackspace/">tracking down backdoors and maliciously modified files</a> could potentially be easier, since you have fewer installs to search through.</p>
<p>WordPress has been much better about quickly patching holes, and being proactive about finding vulnerabilities. If your site ends up getting hacked, these days it&#8217;s more likely to be a vulnerable plugin, an outdated install you forgot all about, or a PC virus that added your FTP login to a botnet &#8211; not the core WordPress install itself. I say this with a certain amount of confidence, since I have restored <em>at least</em> two-dozen hacked WordPress sites (not mine) since the beginning of the year, and have therefore spent countless hours investigating the attack, identifying the vector, and writing up summaries to post to <a href="http://badwarebusters.org/">badwarebusters.org</a> in an effort to help other people facing the same hack.</p>
<p>To be clear, running a multi-site install isn&#8217;t any riskier than running multiple blogs under the same user. But if you&#8217;re currently running your blogs under different users, you should at least be aware of how that could potentially impact you. </p>
<h3>Final Thoughts</h3>
<p>My thought is that it might have been smarter to install WPMU, and then upgrade to 3.0, since the upgrade process for a WPMU setup to 3.0 seems like it was a little less wonky, but I don&#8217;t really know.</p>
<p>I&#8217;ve really only just started playing with this during the fragment of free time I had today (work has been brutal for the past month or so). So far, pulling the theme in has been as simple as downloading them from their respective old WordPress installs and uploading them to the new 3.0 themes directory and activating them so that they&#8217;re available to the rest of the sites in the network. </p>
<p>And certainly, if you&#8217;ve found an easier way to get this done, please let me know in the comments. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/11/wordpress-security-book/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/11/secure-wordpress.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Upcoming WordPress Security Book" height="90" width="90" onmouseover="onover('Upcoming WordPress Security Book')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/01/essential-wordpress-plugins/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/01/blog_logo.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Essential WordPress Plugins" height="90" width="90" onmouseover="onover('Essential WordPress Plugins')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/01/creating-a-wordpress-theme/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/01/wordpress-logo.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Creating A WordPress Theme" height="90" width="90" onmouseover="onover('Creating A WordPress Theme')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/06/upgrading-to-wordpress-3/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.573 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-03 04:52:43 -->

