<?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/"
	>

<channel>
	<title>[200 OK]</title>
	<atom:link href="http://blog.port80software.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.port80software.com</link>
	<description>We're all 200 OK: Web, HTTP and IIS Insights</description>
	<pubDate>Mon, 22 Jun 2009 20:57:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Leech Bandits on the Loose!</title>
		<link>http://blog.port80software.com/2009/06/22/leech-bandits-on-the-loose/</link>
		<comments>http://blog.port80software.com/2009/06/22/leech-bandits-on-the-loose/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 20:57:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developer Tools]]></category>

		<category><![CDATA[IIS & HTTP]]></category>

		<category><![CDATA[Web Design, Development, & Usability]]></category>

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

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

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

		<category><![CDATA[inline linking]]></category>

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

		<guid isPermaLink="false">http://blog.port80software.com/?p=477</guid>
		<description><![CDATA[Leech Bandits on the Loose!
 And What You Can Do to Stop Them
What is Leeching?
Leeching. Inline linking. Hotlinking. Bandwidth theft. Sometimes it is even called direct linking or confused with deep linking. Whatever the term, if a third party site is requesting your files and presenting them on their Web site, you are paying for [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Leech Bandits on the Loose!</strong><br />
<em> And What You Can Do to Stop Them</em></p>
<p><strong>What is Leeching?</strong></p>
<p>Leeching. Inline linking. Hotlinking. Bandwidth theft. Sometimes it is even called direct linking or confused with deep linking. Whatever the term, if a third party site is requesting your files and presenting them on their Web site, you are paying for the bandwidth while they use your content as their own.</p>
<p><strong>How Does this Bandwidth Theft Occur?</strong></p>
<p>In a classic example of content leeching, an online ad (i.e. on eBay) is created with an unauthorized image served from a manufacturer&#8217;s site. This arrangement is good for the eBay user, but bad for the original manufacturer&#8217;s bandwidth bill – they serve the image but get no benefit from the transfer.</p>
<p>Another common image leeching faux pas is <strong>internet bloggers using directly linked images from another site without uploading them to their own server or host</strong>.</p>
<p>Not only is this a strain on your bandwidth, but in many cases this is an infringement on your copyright as well. It’s a safe bet to assume that if they are using your bandwidth they are most likely using your images without your permission as well.</p>
<p><strong>How do you Stop Leeching?</strong></p>
<p>If you are working in an Apache server environment one way that you can block unauthorized access to your files would be to add the following to your .htaccess file:</p>
<p style="padding-left: 30px;">RewriteEngine On<br />
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?example\.com/ [NC]<br />
RewriteCond %{HTTP_REFERER} !^$<br />
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpeg [L]</p>
<p>The basic idea here is that we block requests, sending them to the “nohotlink” image if they don’t include the Referer header that points to our domain, in this case “example.com.”   This is a simple check but interestingly it knocks down most bandwidth thieves.</p>
<p>It is possible to check other headers as well, for example we might look to see if there is a User-Agent header and deny it in a similar fashion as well.  We might expand the scheme to try to address the particular values of a user-agent but this can be quite troublesome to keep up to date.</p>
<p><strong>Microsoft IIS doesn’t have URL rewriting technology built-in</strong>, but there are solutions out there including <a href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/" target="_blank">Microsoft’s URL Rewrite module for IIS7+</a> . However, rewriting solutions really don’t properly address the leeching problem, and thus the rules found in our <a href="http://www.port80software.com/products/linkdeny/">LinkDeny</a> product should be employed.</p>
<p><strong>Taking it a Step Further</strong></p>
<p><a href="http://www.port80software.com/products/linkdeny/"><strong>LinkDeny</strong></a><strong> can block using simple checks like header values</strong>; particularly the obvious Referer and User-Agent headers. LinkDeny can also enforce that HTTP requests are proper in their minimal number of headers, such as required Host header for HTTP/1.1, their style and so forth.  Basically the idea is that if people want to use bots to steal content they have to get the details down otherwise we will swat the request.</p>
<p>We can certainly go a bit further in limiting the types of people.  For example, commonly we can spot people who are abusing the site and stealing content and just add an IP block.  Or we may think the reverse and disallow everyone but say a few trusted IP partners. Using GeoIP resolution we can even expand this thinking to geographic regions when we see continued abuse coming from particular locales.  We can add such checks into a module or into application logic.</p>
<p>However, the wily content thief will do their best to imitate user-agents correctly and bounce off proxy servers to avoid detection.  We have to assume that these thieves will not be swatted down by simple checks so we limit our exposure by limiting access.  Consider if we have pieces of content like <strong>/books/manual.pdf</strong> or <strong>/images/logo.gif</strong> it is quite easy for the unscrupulous to automate a bot or even script a real browser to fetch these objects.  However, we can up the ante by changing the location or the required credentials to access the object regularly.</p>
<p><strong>First let’s consider the use of a cookie. </strong> We could issue cookies in our site and require that a user send a cookie to fetch dependent images.  This alone will knock down many bots who don’t accept cookies.  However, our aim here is defeating those people who know all these things and use browser automation.  In this case they will likely accept cookies and will record a script to fetch the desired object.  Now we can foil these folks by making the cookie be short lived and reissuing allowed cookies very often.  So now their script may work for a few minutes but it fails later.  If they re-record it will fail again as soon as the cookie rotates.</p>
<p>Obviously it would seem that this is defeatable simply by visiting the site properly when you want to get the object and that’s ok.  Remember the point of anti-leeching isn’t to lock out legitimate browser access it is to lock out those who don’t play by the rules.</p>
<p>We can take time limitation and make it really hard to deal with by not only requiring a changing cookie but changing the very URLs of the dependent objects over time.  Thus <strong>logo.gif</strong> might be l<strong>ogo123fdf2345.gif</strong> one moment and <strong>logo1235234ss.gif</strong> another.  Obviously our pages have to reference some sort of token replacement system to employ such a measure but it makes scripting access to the object quite annoying.</p>
<p><strong>Conclusion</strong></p>
<p>All of these anti-leeching schemes can be defeated, just as all locks online and off can be broken.  Ultimately you get into the game of dealing with anti-automation and injecting CAPTCHAs for people to fill out.  These too can be defeated of course, but that doesn’t mean we should just give up. If that is your attitude we suggest you avoid locking your house or car because frankly those employ easily breakable security mechanisms as well!</p>
<p>Whether you roll your own anti-leeching feature or use a product like <a href="http://www.port80software.com/products/linkdeny/">LinkDeny</a>, protecting your site content from leeches will save you bandwidth, and money. You won’t be able to stop everyone from trying to steal your content, <strong>but you can however make a sizeable dent in just how much in how much they do steal!</strong></p>
<p>~ Port80</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/06/22/leech-bandits-on-the-loose/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Control Your Content the Right Way</title>
		<link>http://blog.port80software.com/2009/05/01/control-your-content-the-right-way/</link>
		<comments>http://blog.port80software.com/2009/05/01/control-your-content-the-right-way/#comments</comments>
		<pubDate>Fri, 01 May 2009 20:17:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web Design, Development, & Usability]]></category>

		<category><![CDATA[content protection]]></category>

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

		<category><![CDATA[image protection]]></category>

		<category><![CDATA[image theft]]></category>

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

		<category><![CDATA[web content]]></category>

		<guid isPermaLink="false">http://blog.port80software.com/?p=459</guid>
		<description><![CDATA[We here at Port80 think that site owners should have some control over their content access, particularly when people fetch it in ways that steal bandwidth or co-opt brand. However, it is pretty easy to go overboard with content protection. Considering that you can easily protect an image using JavaScript to provide an anti-right click [...]]]></description>
			<content:encoded><![CDATA[<p>We here at Port80 think that site owners should have some control over their content access, <strong>particularly when people fetch it in ways that steal bandwidth or co-opt brand</strong>. However, it is pretty easy to go overboard with content protection. <em>Considering that you can easily protect an image using JavaScript to provide an anti-right click script.<span id="more-459"></span></em></p>
<p style="padding-left: 30px;">&lt;img src=&#8221;swineflu.jpg&#8221; oncontextmenu=&#8221;alert(&#8217;Copyright 2009 Big News Agency&#8217;); return false;&#8221;&gt;</p>
<p>However, this is easily defeated. </p>
<p>You might even try a trick where you put a transparent pixel image over a protected image.  Then the user can access their context menu but when they save an image they get some blank item. An <a href="http://davidwalsh.name/dw-content/image-protector-jquery.php" target="_blank">example </a>of this technique can be found on <em>David Walsh’s Programming Blog</em>.  While this scheme is actually employed at a few photo sharing sites it is silly and easily broken, but still somewhat useful for those with no other means of content protection.</p>
<p><strong>Now let&#8217;s be real.</strong>  If the person wants your image it is easy to go spelunking in your cache and grab it. You could use some interesting tricks with Flash and Java applets to keep the actual bits of the image out of cache, but then you are starting to get into to the &#8220;what&#8217;s the point&#8221; zone.  (Image Stealer): <em>&#8220;I&#8217;ll show them, I&#8217;ll just screen capture that baby.&#8221;</em></p>
<p>So we&#8217;ve seen this pattern for image protection for years, but what we haven&#8217;t seen is this particular level of silliness in content protection.  Sitepoint <a href="http://www.sitepoint.com/blogs/2009/05/01/drm-cutting-off-your-prose-to-" target="_blank">exposes some folks </a>who actually make their content difficult to highlight because they use script to put it together dynamically on screen.  Of course this causes SEO trouble, accessibility issues, and just pisses users off.  But hey why stop there&#8230; we can use Flash or something to load text in and make it so we have to print and that&#8217;s it. </p>
<p>Snark aside, we really do believe <strong>site owners should have control over their sites</strong>, but let&#8217;s understand that when you start angering your legitimate users you’ve likely gone too far.</p>
<p>Port80</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/05/01/control-your-content-the-right-way/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Request Reduction - The Cool, but Clunky Method</title>
		<link>http://blog.port80software.com/2009/04/24/request-reduction-the-cool-but-clunky-method/</link>
		<comments>http://blog.port80software.com/2009/04/24/request-reduction-the-cool-but-clunky-method/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 20:08:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Browsers]]></category>

		<category><![CDATA[Web Design, Development, & Usability]]></category>

		<category><![CDATA[ajax cache]]></category>

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

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

		<category><![CDATA[data uri]]></category>

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

		<category><![CDATA[multipart stream]]></category>

		<category><![CDATA[page speed]]></category>

		<category><![CDATA[request bundling]]></category>

		<category><![CDATA[site performance]]></category>

		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://blog.port80software.com/?p=443</guid>
		<description><![CDATA[Yesterday we saw an interesting effort from Digg to address the problem of multiple requests and its effect on page speed.
Recently there has been growing interest in various schemes for request bundling. For example, a way to use data URIs in most browsers was shown here: http://www.hedgerwow.com/360/dhtml/base64-image/code.txt. It is ugly, but mostly works. In the [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday we saw an interesting <a href="http://blog.digg.com/?p=621" target="_blank">effort from Digg</a> to address the problem of multiple requests and its effect on page speed.</p>
<p>Recently there has been growing interest in various schemes for request bundling. <strong>For example</strong>, a way to use data URIs in most browsers was shown here: <a href="http://www.hedgerwow.com/360/dhtml/base64-image/code.txt" target="_blank">http://www.hedgerwow.com/360/dhtml/base64-image/code.txt</a>. <em>It is ugly, but mostly works.</em> In the past we have seen other folks use a variety of client and server-side schemes to bring inlined images and other assets to the masses - mostly with little success. That&#8217;s too bad.<span id="more-443"></span></p>
<p><strong>These are great efforts</strong> and <span style="text-decoration: underline;">request bundling is the proper solution</span> for ultimately addressing speed problems as you go beyond Gzip, Caching, and other commonly known methods. For most higher bandwidth users it is the number of requests not byte count that is killing their performance.</p>
<p>We like ingenuity here but honestly Digg&#8217;s effort is well… a hack and a half. We can safely say that it is going to blow up for a number of reasons <em>we are directly aware of</em>, so we&#8217;ll enumerate.</p>
<h3><strong>Data URIs Close But Yet So Far</strong></h3>
<p>The Digg scheme relies on parsing the incoming multipart stream and creating data URIs (<a href="http://en.wikipedia.org/wiki/Data_URI_scheme" target="_blank">http://en.wikipedia.org/wiki/Data_URI_scheme</a>) out of it. <strong>Older Internet Explorer browsers do not support data URIs.</strong> You can try to hack you way around this, as recently shown, using object and MHTML to stuff things in, but testing is showing that approach to be problematic. Even with IE8, which supports dataURIs, you have significant length limitations - 32K for in-page objects and far less for raw URLs.</p>
<h3><strong>Multipart Support in Ajax - Rare and Inconsistent</strong></h3>
<p><strong>Multiparts with XHRs are not at all consistently supported across browsers.</strong> Test it yourself and you&#8217;ll see what we mean. Even amongst the supporting ones you are going to get quirks. <em>This is discussed in our CEO&#8217;s <a href="http://www.ajaxref.com/" target="_blank">Ajax book, chapter 3</a>.</em> Worse yet if you are trying to deal with partial streams as you go along; that is also a black art and problematic, particularly in Internet Explorer. The comments in Digg&#8217;s code reveal they are discovering that the XHR object varies from version to version in IE. It isn&#8217;t commonly known, but the XMLHttpRequest object is actually pretty inconsistent in its details from browser to browser and version to version.</p>
<h3><strong>Cachability</strong></h3>
<p><strong>A huge problem with many Ajax solutions is caching</strong>. It is possible in principle to work with the browser cache or better yet even add an Ajax cache. But most Ajax performance schemes like Digg&#8217;s fail in practice because the end user cache is not populated properly&#8211;unless you plan on using the dataURIs as the cached item everywhere else, which is pretty unlikely. In order to still use the cache, these implementations must often fire off subsequent requests even after the first page load to populate it.</p>
<h3><strong>Right Idea - Wrong Solution</strong></h3>
<p>To be clear, we think that an initial, bundled request of dependent assets is a GREAT idea. However, it has been a great idea for years and many of us have tried to do it, but the challenge is all in the execution. This way of doing it is not the right way… <em>at least for the long haul</em>.</p>
<p>Ultimately, the major browser vendors (i.e. Internet Explorer, Firefox, Chrome) need to facilitate this type of performance optimization, by creating a JAR file, bundle, archive, <em>or something</em>, so we can negotiate a large initial request and have our proper caching too. <strong>We just can&#8217;t be dependent on JavaScript for page composing duties if we want top-notch performance.</strong> Even with the massive improvements in JavaScript speed via browser engines like <strong>Google&#8217;s V8</strong>, <strong>WebKit&#8217;s SquirrelFish</strong>, and <strong>Firefox&#8217;s Tracemonkey</strong>, any JavaScript page composing is going to be smoked by a native solution. JavaScript is a great development environment for Web 2.0, RIA type applications. But fixing browser plumbing with JavaScript is just not the way to go for permanent performance gains.</p>
<p>We’ll be happy to be wrong, but having seen this before we kind of doubt it. This is in fact worn ground: Delta encoding with JavaScript was tried well over 8 years ago and it just isn&#8217;t something that reliably works in scale.</p>
<p>The good news is that the native browser changes in this area are coming&#8211;just wait! We are about to show one that is relatively newly shipping.</p>
<p>- P80</p>
<p><em>Note: We should note that Digg&#8217;s interest in trying to control page paint order is quite appropriate, since the perception of speed comes not just from downloading but how the page paints.</em></p>
<p>{follow us on Twitter <a href="http://www.twitter.com/port80software" target="_blank">@port80software</a>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/04/24/request-reduction-the-cool-but-clunky-method/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Have you been XSSed?</title>
		<link>http://blog.port80software.com/2009/04/20/have-you-been-xssed/</link>
		<comments>http://blog.port80software.com/2009/04/20/have-you-been-xssed/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:29:34 +0000</pubDate>
		<dc:creator>port80</dc:creator>
		
		<category><![CDATA[Web Security Tools]]></category>

		<category><![CDATA[cross-site scripting]]></category>

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

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

		<category><![CDATA[web application firewall]]></category>

		<category><![CDATA[web security]]></category>

		<category><![CDATA[xss attacks]]></category>

		<category><![CDATA[xss flaws]]></category>

		<category><![CDATA[xss vulnerabilities]]></category>

		<guid isPermaLink="false">http://blog.port80software.com/?p=421</guid>
		<description><![CDATA[In his recent article on XSS vulnerabilities, Brian Krebs of the Washington Post reports that last year thousands of Web sites were cited for harboring security flaws that could be used to attack others online.
“At issue are sites that harbor so-called cross-site scripting (XSS) vulnerabilities, which occur when Web sites accept input from a user [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">In his recent article on <strong>XSS vulnerabilities</strong>, Brian Krebs of the <a href="http://voices.washingtonpost.com/securityfix/2009/04/creating_a_public_nuisance_wit.html">Washington Post</a> reports that last year thousands of Web sites were cited for harboring security flaws that could be used to attack others online.</p>
<p class="MsoNormal" style="padding-left: 30px;"><em>“At issue are sites that harbor so-called cross-site scripting (XSS) vulnerabilities, which occur when Web sites accept input from a user usually from something like a search box or e-mail form but do not prevent users from entering malicious code or other instructions.”<span id="more-421"></span></em></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><strong>XSSed.com</strong>, a site which catalogs XSS flaws on the web, has found more than <strong>13,000</strong> Web pages that hosted XSS vulnerabilities. The XSSed project was created in early February 2007 by Kevin Fernandez and Dimitris Pagkalos. It provides information on all things related to cross-site scripting vulnerabilities and is the largest <a href="http://www.xssed.com/archive">online archive</a> of XSS vulnerable websites.</p>
<p class="MsoNormal">
<p class="MsoNormal" style="padding-left: 30px;"><em>“XSS flaws are some of the most common Web site vulnerabilities, but they are also usually fairly simple to fix. If your site is listed on xssed.com, or you&#8217;d simply like to know more about how to make sure your site isn&#8217;t contributing to the problem, check out this <a href="http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29">primer</a> from the Open Web Applications Security Project (OWASP). While you&#8217;re there, you might want to take a look at some of the other best-practices documents they have available.”</em></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><strong>XSS relies on trust.</strong><span> </span>Blindly trusting user input and posting it back to a site, particularly if it includes HTML or JavaScript, is a certain recipe for trouble.<span> </span>If you have access to your Web application code make sure you sanitize all inputs for malicious script based payload.<span> </span>If you don’t have access to code or need an extra layer to make sure nothing can get through, then a <strong>Web Application Firewall </strong>such as one of the <a href="http://www.port80software.com/products/serverdefenderai/index">ServerDefender</a> family is in order.<span> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">Shannon @ Port80</p>
<p class="MsoNormal">{follow us on Twitter <a title="twitter follow" href="http://twitter.com/port80software" target="_blank">@port80software.com</a>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/04/20/have-you-been-xssed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Untangling the Acronyms of Web Application Security</title>
		<link>http://blog.port80software.com/2009/02/10/untangling-the-acronyms-of-web-application-security/</link>
		<comments>http://blog.port80software.com/2009/02/10/untangling-the-acronyms-of-web-application-security/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 21:25:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[IIS & HTTP]]></category>

		<category><![CDATA[Web Security Tools]]></category>

		<guid isPermaLink="false">http://port80software.com/200ok/?p=400</guid>
		<description><![CDATA[OWASP, WAFEC, CVE&#8230; An excellent post from Jeremiah Grossman just caught my eye, where he tried to untangle the mess of acronyms that is Web application security. In his words, he was trying to &#8220;organize and describe some of the more focused [Web security] terminology/standard/framework public initiatives.&#8221; In his usual way, he brings clarity to [...]]]></description>
			<content:encoded><![CDATA[<p>OWASP, WAFEC, CVE&#8230; An <a title="Jeremiah Grossman post: Who's Who and What's What" href="http://jeremiahgrossman.blogspot.com/2009/02/whos-who-and-whats-what.html" target="_blank">excellent post from Jeremiah Grossman</a> just caught my eye, where he tried to untangle the mess of acronyms that is Web application security. In his words, he was trying to &#8220;organize and describe some of the more focused [Web security] terminology/standard/framework public initiatives.&#8221; In his usual way, he brings clarity to an industry that could use it&#8230; a worthwhile read.<span id="more-400"></span></p>
<p>Since so many of the Port80 software tools are focused on security issues, we&#8217;re constantly keeping an eye on the organizations and efforts he mentions:</p>
<ul>
<li>We just did a blog post last month on the <a title="P80 Blog:Top 25 Most Dangerous Programming Errors Report" href="http://port80software.com/200ok/index.php/2009/01/340" target="_self">Top 25 Most Dangerous Programming Errors.</a></li>
<li>Port80 has looked to the Web Application Security Consortium&#8217;s <a title="WASC Threat Classifcation Project" href="http://www.webappsec.org/projects/threat/" target="_blank">Threat Classification</a> project as a baseline for our WAF development - it is, as he says, a very clear and cogent taxonomy of Web App threats.</li>
<li>We even have to pat ourselves on the back a bit for being mentioned as a resource under the <a title="WASC Fingerprinting description" href="http://www.webappsec.org/projects/threat/classes/fingerprinting.shtml">WASC Fingerprinting threat description</a> - Port80 has been <a title="P80 Article: Mask Your Web Server for Enhanced Security" href="http://www.port80software.com/support/articles/maskyourwebserver">preaching the gospel of Server Anonymization</a> since before <a title="P80 Product: ServerMask" href="http://www.port80software.com/products/servermask" target="_self">ServerMask</a> was even born in 2002.</li>
</ul>
<p>I&#8217;d be interested to hear whether you think we&#8217;re on the right track, and what headaches you&#8217;re having trying to deal with all the varying WAF and security options. And as always, please <a title="Contact Poft80Software" href="http://www.port80software.com/contact/">let us know</a> how we can make your job easier.</p>
<p>Cheers!</p>
<p>Jenny @ Port80</p>
<p>{follow us on Twitter <a title="twitter follow" href="http://twitter.com/port80software" target="_blank">@port80software.com</a>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/02/10/untangling-the-acronyms-of-web-application-security/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Data Privacy Day&#8230; for Your Server?</title>
		<link>http://blog.port80software.com/2009/01/28/data-privacy-day-for-your-server/</link>
		<comments>http://blog.port80software.com/2009/01/28/data-privacy-day-for-your-server/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 19:30:26 +0000</pubDate>
		<dc:creator>port80</dc:creator>
		
		<category><![CDATA[Web Security Tools]]></category>

		<category><![CDATA[data security]]></category>

		<guid isPermaLink="false">http://port80software.com/200ok/?p=353</guid>
		<description><![CDATA[
Today is the second annual Data Privacy Day, designed to raise awareness and generate discussion about data privacy practices and rights. The goal is to help users, especially teens, understand what info should really keep to themselves online.
The event is mainly focused on educating consumers, but it got me thinking. Part of our mission with [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://port80software.com/200ok/wp-content/uploads/2009/01/data-privacy-day-logo.gif"><img class="size-full wp-image-356 aligncenter" title="data-privacy-day-logo" src="http://port80software.com/200ok/wp-content/uploads/2009/01/data-privacy-day-logo.gif" alt="Data Privacy Day logo" width="149" height="101" /></a></p>
<p>Today is the second annual <a title="Intel.com Data Privacy Day page" href="http://www.intel.com/policy/dataprivacy.htm" target="_blank">Data Privacy Day</a>, designed to raise awareness and generate discussion about data privacy practices and rights. The goal is to help users, especially teens, understand what info should really keep to themselves online.</p>
<p>The event is mainly focused on educating consumers, but it got me thinking. Part of our mission with <a title="ServerMask from Port80 Software" href="http://www.port80software.com/products/servermask" target="_self">ServerMask</a> is to tell everyone with a server, &#8220;Hey, you don&#8217;t have to broadcast information about you server if you don&#8217;t want to!&#8221;<span id="more-353"></span></p>
<p>Really, your headers (and cookies, and platform details) are your business. Why give anyone more data than they need? If someone wants to cause trouble, every little clue could help. ServerMask is a really easy tool (click here for a <a title="Product Screencasts from Port80 Software" href="http://www.port80software.com/screencasts/" target="_self">screencast</a>) that helps you put a little privacy screen around your server.</p>
<p>Cheers!</p>
<p>Jenny @ Port80</p>
<p>{follow us on Twitter <a title="twitter follow" href="http://twitter.com/port80software" target="_blank">@port80software.com</a>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/01/28/data-privacy-day-for-your-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>To Link or Not to Link&#8230;</title>
		<link>http://blog.port80software.com/2009/01/26/to-link-or-not-to-link/</link>
		<comments>http://blog.port80software.com/2009/01/26/to-link-or-not-to-link/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 18:23:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web Security Tools]]></category>

		<category><![CDATA[access control]]></category>

		<guid isPermaLink="false">http://port80software.com/200ok/?p=345</guid>
		<description><![CDATA[Widely reported a couple weeks ago, the unusual lawsuit involving Gatehouse Media, Inc. and the New York Times Co. (parent of The Boston Globe) should make it to a federal courtroom this week. The upshot is that Gatehouse, publisher of 125 local newspapers across Massachusetts,  is unhappy that the Boston Globe&#8217;s new local websites are [...]]]></description>
			<content:encoded><![CDATA[<p>Widely reported a couple weeks ago, the unusual lawsuit involving <a title="Gatehouse Media Inc" href="http://www.gatehousemedia.com/">Gatehouse Media, Inc.</a> and the <a href="http://www.nytco.com/">New York Times Co.</a> (parent of The Boston Globe) should make it to a federal courtroom this week. The upshot is that Gatehouse, publisher of 125 local newspapers across Massachusetts,  is <a href="http://www.readwriteweb.com/archives/hyperlinks_the_end_of_online_j.php">unhappy that the Boston Globe&#8217;s new local websites are linking to their content</a>.<span id="more-345"></span></p>
<p><span class="lingo_region">GateHouse alleges that Boston.com thwarted electronic security measures intended to prevent it from scraping GateHouse&#8217;s online content. The NYT Co. argues that the references are clearly fair use, as only the headline and first line of content appear, with a link to the original article on Gatehouse&#8217;s sites. </span></p>
<p>Whether or not you think it&#8217;s unusual that a site owner wants to <em>prevent </em>reputable links to their content (after all, lots of firms are paying big money to SEO consultants for link building), there&#8217;s no doubt that Gatehouse should be able to dictate exactly how they want their content used.</p>
<p>If only there were a cheap and easy way to control exactly who can link to your content! A rules-based tool letting you grant or deny access on any number of characteristics, such as IP address, referring URL, country or geographic location or even the existence of cookie. A tool that let you redirect deep links to your site to your ad-rich homepage instead. I&#8217;m sure Gatehouse would find that particularly useful.</p>
<p>Call off the guard dogs (and the lawyers!) -  our <a href="http://www.port80software.com/products/linkdeny/index.asp">LinkDeny</a> access control software does just that for anyone running IIS servers. From keeping internal resources internal, protecting copyrighted images, and keeping content &#8220;borrowers&#8221; from piggybacking on your bandwidth, LinkDeny does it all. (And it&#8217;s much cheaper than a lawsuit!)</p>
<p><a href="http://www.port80software.com/contact/">Let us know</a> if we can help safeguard your content.</p>
<p>Cheers!</p>
<p>Jenny @ Port80</p>
<p>{follow us on Twitter <a title="twitter follow" href="http://twitter.com/port80software" target="_blank">@port80software.com</a>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/01/26/to-link-or-not-to-link/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Report: Top 25 Most Dangerous Programming Errors</title>
		<link>http://blog.port80software.com/2009/01/16/report-top-25-most-dangerous-programming-errors/</link>
		<comments>http://blog.port80software.com/2009/01/16/report-top-25-most-dangerous-programming-errors/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 23:11:34 +0000</pubDate>
		<dc:creator>port80</dc:creator>
		
		<category><![CDATA[IIS & HTTP]]></category>

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

		<category><![CDATA[web application firewall]]></category>

		<category><![CDATA[Web Security Tools]]></category>

		<guid isPermaLink="false">http://port80software.com/200ok/?p=340</guid>
		<description><![CDATA[The Information Security community has been buzzing this week with talk of the newly released CWE/SANS Top 25 Most Dangerous Programming Errors. The goal of the report is to identify not just security vulnerabilities (think OSASP Top Ten), but the programming errors that create those holes.
The result is much discussion about preventative coding (the state [...]]]></description>
			<content:encoded><![CDATA[<p>The Information Security community has been buzzing this week with talk of the newly released CWE/SANS <a title="CWE/SANS Top 25" href="http://www.sans.org/top25errors/" target="_blank">Top 25 Most Dangerous Programming Errors</a>. The goal of the report is to identify not just security vulnerabilities (think <a title="OWASP Top 10" href="http://www.owasp.org" target="_blank">OSASP Top Ten</a>), but the programming errors that create those holes.<span id="more-340"></span></p>
<p>The result is much discussion about preventative coding (the state of New York has already <a title="Application Security Procurement Language" href="http://www.sans.org/appseccontract" target="_blank">drafted requirements for future government web applications</a> based on this list). The idea is to get software developers to certify in writing that their code is free of the errors mentioned in the list, SANS said.</p>
<p>While everyone in InfoSec is thrilled with any improvement in security-minded programming, those of us on the ground know this isn&#8217;t the end of the story. It helps, but a layered security approach is still key. Even top-notch coding from here on out won’t eliminate the need for a good Web Application Firewall:</p>
<ul>
<li>First, there&#8217;s a <strong>time gap between finding a hole and writing the fix</strong> &#8212; In a recent blog post, <a title="Jeremiah Grossman's Blog Dec 2008" href="http://jeremiahgrossman.blogspot.com/2008/12/oh-i-like-surprises.html" target="_blank">Jeremiah Grossman</a> summarized some advice in a great <a title="informIT: Software Security Top 10 Surprises" href="http://www.informit.com/articles/article.aspx?p=1315431" target="_blank">informIT</a> article: &#8220;Use WAFs to quickly reduce the immediate exposure (time-to-fix), then fix the root cause (the code) as time and budget allow.&#8221;</li>
<li>Second, there&#8217;s always the problem with <strong>legacy code </strong>&#8211; even the best of best practices can&#8217;t use time travel to go back and fix problems in legacy code; practically, what you face is a choice between costly refactoring of that code under the new policies or using a WAF.</li>
<li>Third, it&#8217;s <strong>hard to control what you don&#8217;t write yourself </strong>&#8211; a lot of Web apps use and depend on 3rd party components and while you can certainly beef up your due diligence to try to make sure the vendor uses best practices (which is the point of the report), ultimately you rely on trust &#8212; and &#8216;trust but verify&#8217; is better than &#8216;trust and hope for the best&#8217;</li>
<li>Finally, some vulnerabilities might <strong>require solutions at the architecture layer </strong>rather than in implementation.  This is clear if you look at the &#8220;prevention and mitigations&#8221; sections of  the Top 25 list. The most diligent coders can&#8217;t overcome fundamental application vulnerabilities by, say, writing really secure classes and functions. In cases like this, even refactoring existing code under a regime of best practices might not be enough; you might be looking at starting from scratch.</li>
</ul>
<p>All of these scenerios are common enough to be proof that WAF&#8217;s aren&#8217;t going anywhere anytime soon. That said, hopefully these new changes will mean insecure legacy code will eventually find itself extinct.</p>
<p>Cheers,</p>
<p>Jenny @ Port80 Software</p>
<p>PS - If you&#8217;re in the market for a good WAF, you know where to turn&#8230; <a title="ServerDefender from Port80 Software" href="http://www.port80software.com/products/serverdefender" target="_blank">Port80&#8217;s ServerDefender</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/01/16/report-top-25-most-dangerous-programming-errors/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Online Screencasts Are Here</title>
		<link>http://blog.port80software.com/2009/01/08/online-screencasts-are-here/</link>
		<comments>http://blog.port80software.com/2009/01/08/online-screencasts-are-here/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 23:40:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developer Tools]]></category>

		<category><![CDATA[Performance Tools]]></category>

		<category><![CDATA[Web Security Tools]]></category>

		<category><![CDATA[Port80 Software]]></category>

		<guid isPermaLink="false">http://port80software.com/200ok/?p=338</guid>
		<description><![CDATA[We know, you&#8217;ve all been waiting for this moment&#8230; We here at Port80 have pulled together some overview Screencasts of our products, including the most recent release of ServerMask 4.1.1, not yet a month old!
Check them out at www.port80software.com/screencasts
Cheers!
Jenny @ Port80
]]></description>
			<content:encoded><![CDATA[<p>We know, you&#8217;ve all been waiting for this moment&#8230; We here at Port80 have pulled together some overview Screencasts of our products, including the most recent release of ServerMask 4.1.1, not yet a month old!</p>
<p>Check them out at <a href="http://www.port80software.com/screencasts" target="_self">www.port80software.com/screencasts</a></p>
<p>Cheers!</p>
<p>Jenny @ Port80</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2009/01/08/online-screencasts-are-here/feed/</wfw:commentRss>
		</item>
		<item>
		<title>XHTML, Content Negotiation, and the Real Purpose of PageXchanger</title>
		<link>http://blog.port80software.com/2008/10/14/xhtml-content-negotiation-and-the-real-purpose-of-pagexchanger/</link>
		<comments>http://blog.port80software.com/2008/10/14/xhtml-content-negotiation-and-the-real-purpose-of-pagexchanger/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 18:51:00 +0000</pubDate>
		<dc:creator>port80</dc:creator>
		
		<category><![CDATA[Web Design, Development, & Usability]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[In a recent article Tina Holmboe made something abundantly clear that a number of individuals still flatly deny - XHTML is not properly supported in browsers.  While sites and Web developers are commonly using XHTML, they are typically using more of a loose HTML version and not really gaining the full power of strict [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://www.dev-archive.net/articles/xhtml.html">recen</a><a href="http://www.dev-archive.net/articles/xhtml.html">t article </a>Tina Holmboe made something abundantly clear that a number of individuals still flatly deny - XHTML is not properly supported in browsers.  While sites and Web developers are commonly using XHTML, they are typically using more of a loose HTML version and not really gaining the full power of strict XML rules.   Tina also reveals that in addition to dodging browser issues, developers need to make sure they don’t serve real XHTML to devices that don&#8217;t handle it well.  What to do?  She presents the appropriate solution - <a href="http://en.wikipedia.org/wiki/Content_negotiation">Content Negotiation</a>.</p>
<p>You can read about the context of Content Negotiation for XHTML and HTML <a href="http://www.dev-archive.net/articles/xhtml.html#content-negotiation">here</a> but unfortunately she doesn&#8217;t actually explain how to accomplish this practically.  On Apache it is pretty straightforward: you can use <a href="http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html">mod_negotiation</a>. However for those running IIS there was no implementation at all for this task.  This is the main reason we designed <a href="http://www.port80software.com/products/pagexchanger/">pageXchanger </a>a number of years ago; it also addresses dealing with PNG images in some browsers and not others.</p>
<p>What Tina proposes is to properly serve XHTML; pageXchanger is the solution for IIS.  If you want to serve content dictated by device (when the device sends appropriate HTTP Accept headers), pageXchanger can do that.  If you want to serve content by language it can do that too.</p>
<p>Unfortunately the market has yet to directly discover the decade-old power of generalized content negotiation (even though our compression products actually require this concept as well).  Instead most of those who try pageXchanger seem to mainly use the product to build clean URLs, which is a bit like using a screwdriver to hammer nails – it works, but doesn’t take advantage the best features of the product.</p>
<p>Many search engine &#8220;experts&#8221; seem to think a clean URL is relevant to indexability and high rank.  Don&#8217;t get us wrong, we like clean URLs more than the next person; we wrote <a href="http://www.port80software.com/support/articles/nextgenerationurls">a paper on the very topic</a>.   The problem is that determining causality or correlation between query strings and rank is weak at best. It would appear in reality the variability and date information on the page are the more predictive factors, rather than the query string.</p>
<p>Very dynamic pages (regardless of query string or not) aren&#8217;t going to be favored by Google or any other bot if they change too rapidly.  This makes perfect sense; there’s no motivation to index an object that will change in a few moments.  While the query string is one clue to non-indexable dynamism, it is certainly not the most obvious; there are a number of headers that show this regardless of URL style.  Forget cleaning all tell-tale signs of dynamic pages; page changes are easily exposed by a simple double fetch by the search bot.  Maybe you are doing black hat SEO content cloaking or just simply making the mistake of believing dynamic pages can be well-indexed. Regardless of the appropriateness of SEO motivations - clean your URLs anyway. That&#8217;s just a good idea; even <a href="http://www.w3.org/Provider/Style/URI">people like Tim Berners Lee think so</a>. You know that guy &#8212; the one who invented the Web?</p>
<p>That said, while we certainly aren&#8217;t trying to tell people not to use pageXchanger to clean up their urls, it isn&#8217;t really designed for that.  You’ll get the most impact from pageXchanger using it for true content negotiation, allowing you to transparently select and serve language, image, and other content based on the user’s browser or device type.  Simply put, content negotiation is a great technology for the diversity of the Web, as one page really doesn&#8217;t fit all!</p>
<p>Cheers,<br />
Port80</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.port80software.com/2008/10/14/xhtml-content-negotiation-and-the-real-purpose-of-pagexchanger/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
