<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Mitigating XSS - Why Input Validation is Bogus</title>
	<atom:link href="http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/</link>
	<description>The Cigital Software Security and Quality Blog</description>
	<pubDate>Tue, 06 Jan 2009 11:33:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: anonymous coward</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2048</link>
		<dc:creator>anonymous coward</dc:creator>
		<pubDate>Sun, 12 Aug 2007 16:22:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2048</guid>
		<description>Nitesh Dhanjani's 2005 blog entry &lt;a href="http://www.oreillynet.com/onlamp/blog/2005/10/repeat_after_me_lack_of__outpu.html" rel="nofollow"&gt;Repeat After Me: Lack of _Output Encoding_ Causes XSS Vulnerabilities&lt;/a&gt; talks about this..</description>
		<content:encoded><![CDATA[<p>Nitesh Dhanjani&#8217;s 2005 blog entry <a href="http://www.oreillynet.com/onlamp/blog/2005/10/repeat_after_me_lack_of__outpu.html" rel="nofollow">Repeat After Me: Lack of _Output Encoding_ Causes XSS Vulnerabilities</a> talks about this..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Steingruebl</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2021</link>
		<dc:creator>Andy Steingruebl</dc:creator>
		<pubDate>Sat, 11 Aug 2007 02:48:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2021</guid>
		<description>Yeah, I just felt bad blaming him :)</description>
		<content:encoded><![CDATA[<p>Yeah, I just felt bad blaming him :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: scott</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2019</link>
		<dc:creator>scott</dc:creator>
		<pubDate>Sat, 11 Aug 2007 00:53:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2019</guid>
		<description>If you are designing a new system, I highly recommend designing in an input validation framework.  But, many systems are already deployed and the pragmatic answer is that adding input validation is only going to create backward incompatibility and give the IT group and "the security guy" specifically a bad name.

Err, the architectural fault for lack of separation between code and data is more deeply rooted than the web.  Try von Neumann.</description>
		<content:encoded><![CDATA[<p>If you are designing a new system, I highly recommend designing in an input validation framework.  But, many systems are already deployed and the pragmatic answer is that adding input validation is only going to create backward incompatibility and give the IT group and &#8220;the security guy&#8221; specifically a bad name.</p>
<p>Err, the architectural fault for lack of separation between code and data is more deeply rooted than the web.  Try von Neumann.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Steingruebl</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2017</link>
		<dc:creator>Andy Steingruebl</dc:creator>
		<pubDate>Fri, 10 Aug 2007 23:37:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2017</guid>
		<description>Fair enough.  I've seen and/or heard of both types of attacks so I agree it isn't a either/or, its a both type of answer.  

Part of figuring out which to try and tackle first, assuming they both are non-ideal, is understanding the data flows and what you can solve with the least effort, or at least the order to fix them in.

Architecturally one of the problems in the web space anyway is that we don't have a clear separation between code and data, hence this problem in the first place.  We wouldn't have so much trouble if they were actually separate and/or we had a content-restriction policy. Witness the thread on the WASC mailing list today...</description>
		<content:encoded><![CDATA[<p>Fair enough.  I&#8217;ve seen and/or heard of both types of attacks so I agree it isn&#8217;t a either/or, its a both type of answer.  </p>
<p>Part of figuring out which to try and tackle first, assuming they both are non-ideal, is understanding the data flows and what you can solve with the least effort, or at least the order to fix them in.</p>
<p>Architecturally one of the problems in the web space anyway is that we don&#8217;t have a clear separation between code and data, hence this problem in the first place.  We wouldn&#8217;t have so much trouble if they were actually separate and/or we had a content-restriction policy. Witness the thread on the WASC mailing list today&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: scott</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2015</link>
		<dc:creator>scott</dc:creator>
		<pubDate>Fri, 10 Aug 2007 22:19:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2015</guid>
		<description>Input validation is a very seductive choice for the reason you mention: there's a choke point that can be clearly identified within the design.  I further agree that the notion of trying to fix the problem at all the points where one generates output is like trying to snip off the leaves of a tree.  But at the end of the day, you have to have good output encoding because all of your input validation is going to have holes - it's just the nature of the beast.

In your example, you're assuming that the Web app is the input source.  My perspective is the opposite.  I see a lot of legacy systems and B2B systems providing the bulk of the input and the Web applications are just the dashboard for the data.  That's the opposite of your example - data's coming from all over the enterprise and the poor little (in comparision to the overall system) has to cope with this data that it doesn't have a chance to filter.

You can certainly implement input-validation for a defense depth strategy.  I'm totally on board with that.  But, too often I see input validation paraded around as a silver bullet.  I guess my title was a bit of a knee jerk reaction to that.</description>
		<content:encoded><![CDATA[<p>Input validation is a very seductive choice for the reason you mention: there&#8217;s a choke point that can be clearly identified within the design.  I further agree that the notion of trying to fix the problem at all the points where one generates output is like trying to snip off the leaves of a tree.  But at the end of the day, you have to have good output encoding because all of your input validation is going to have holes - it&#8217;s just the nature of the beast.</p>
<p>In your example, you&#8217;re assuming that the Web app is the input source.  My perspective is the opposite.  I see a lot of legacy systems and B2B systems providing the bulk of the input and the Web applications are just the dashboard for the data.  That&#8217;s the opposite of your example - data&#8217;s coming from all over the enterprise and the poor little (in comparision to the overall system) has to cope with this data that it doesn&#8217;t have a chance to filter.</p>
<p>You can certainly implement input-validation for a defense depth strategy.  I&#8217;m totally on board with that.  But, too often I see input validation paraded around as a silver bullet.  I guess my title was a bit of a knee jerk reaction to that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Steingruebl</title>
		<link>http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/comment-page-1/#comment-2014</link>
		<dc:creator>Andy Steingruebl</dc:creator>
		<pubDate>Fri, 10 Aug 2007 20:40:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/10/mitigating-xss-why-input-validation-is-bogus/#comment-2014</guid>
		<description>I was going to respond to Pravir's earlier piece on this, but I'll just do it here.

From an architectural basis we often have 1 place where input can enter our system (at least direct user input) but multiple places where we consume that data downstream.

Input = web application
Consumer = web application, administration interface, messagebus, database, shell script, ETL job, batch report writer, etc.

While I agree that outpt filtering is a lot cleaner way to address the issue from a proper semantic and output-type context, I worry that I'm relying on a strategy of fixing all of my endpoints rather than at least *trying* to fix the problem, or mitigate some part of it, in a single location.

Trust boundaries and borders in internal applications can be quite complicated, and ensuring that proper output validation happens at all of those points is certainly the right design, but skipping some form of input checking and relying on all of the downstream consumers to get it right seems risky.

Its sort of like the old protocol statement:  Be lenient in what you accept and stringent in what you emit.   I think the same thing holds for applications.</description>
		<content:encoded><![CDATA[<p>I was going to respond to Pravir&#8217;s earlier piece on this, but I&#8217;ll just do it here.</p>
<p>From an architectural basis we often have 1 place where input can enter our system (at least direct user input) but multiple places where we consume that data downstream.</p>
<p>Input = web application<br />
Consumer = web application, administration interface, messagebus, database, shell script, ETL job, batch report writer, etc.</p>
<p>While I agree that outpt filtering is a lot cleaner way to address the issue from a proper semantic and output-type context, I worry that I&#8217;m relying on a strategy of fixing all of my endpoints rather than at least *trying* to fix the problem, or mitigate some part of it, in a single location.</p>
<p>Trust boundaries and borders in internal applications can be quite complicated, and ensuring that proper output validation happens at all of those points is certainly the right design, but skipping some form of input checking and relying on all of the downstream consumers to get it right seems risky.</p>
<p>Its sort of like the old protocol statement:  Be lenient in what you accept and stringent in what you emit.   I think the same thing holds for applications.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
