<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7023583569207199066</id><updated>2012-01-12T23:24:01.318-10:00</updated><title type='text'>Manicode</title><subtitle type='html'>Musings on Software Engineering and Application Security from Jim Manico</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>86</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2672060394441010694</id><published>2011-06-12T16:58:00.003-10:00</published><updated>2011-06-12T17:22:51.496-10:00</updated><title type='text'>Financial Responsibility and OWASP</title><content type='html'>OWASP Leaders,&lt;br /&gt;&lt;br /&gt;  I recently took a trip across Europe where I gave a vendor-neutral     talk on Advanced XSS mitigation strategies in three countries. I     also attended a conference as an OWASP representative and gave a     talk there. Before this trip, several chapters agreed to compensate     me for travel and I applied for OTM funds.&lt;br /&gt;&lt;br /&gt;  But I can't do it. I can't charge OWASP thousands for 3-10 hours of     work. So OWASP Netherlands, France and Brussels - I'm going to     donate my travel expenses back to you chapters and not bill OWASP.     I'm only making this public because I'd really like to see more of     this happen in the community. I'm taking this hit out of pocket and     am happy to do so. It's the right thing to do.&lt;br /&gt;&lt;br /&gt;  I'd also like to make a few *recommendations* to the community for     us all to consider. As we grow we constantly need to revisit     financial ethics.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;    If you are running an event and need to pay for human help,     please make this public and let folks from the community apply for     such a position&lt;/li&gt;&lt;li&gt;         Instead of hiring folks to help run events, consider     seeking volunteers and compensate them with free conference     admission!&lt;/li&gt;&lt;li&gt;         Be careful if you hire a family member or friend in a paid     position where you have not offered others in the community a chance     to apply. DANGER!&lt;/li&gt;&lt;li&gt;    If you are a providing services to OWASP - it's critical that     no-bid contracts are avoided. Make sure you make such contracts and     services public and give other folks a chance to bid or apply.&lt;/li&gt;&lt;li&gt;    In general, if you are a leader of OWASP please try to avoid any     kind of compensation from OWASP when possible. It's better for us to     bring in third-party providers so leaders can remain objective.&lt;/li&gt;&lt;/ol&gt;       These recommendations are not directed at any company or individual.     I just want to make sure that every penny in OWASP is, as much as     possible, spent in honoring our mission, which is the responsibility     of all of us who love this 501c3 not-for-profit charitable     organization.&lt;br /&gt;  &lt;b&gt;&lt;i&gt;&lt;br /&gt;      Our mission is to make application security visible, so that         people and organizations can make informed decisions about true         application security risks. &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  Respectfully,&lt;br /&gt;  Jim Manico&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2672060394441010694?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2672060394441010694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2672060394441010694' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2672060394441010694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2672060394441010694'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2011/06/financial-responsibility-and-owasp.html' title='Financial Responsibility and OWASP'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-396961541150445057</id><published>2011-02-13T09:34:00.012-10:00</published><updated>2011-02-23T13:47:12.194-10:00</updated><title type='text'>Taming the Beast</title><content type='html'>&lt;div&gt;The recent cross-platform numerical parsing DOS bug has been named the  "&lt;a href="http://www.theregister.co.uk/2011/02/09/java_floating_point_bug_fixed/"&gt;Mark of the Beast&lt;/a&gt;". Some claim that this bug was first reported &lt;a href="http://mail.openjdk.java.net/pipermail/core-libs-dev/2011-February/005798.html"&gt;as early as 2001&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a significant bug in (at least) &lt;a href="http://www.exploringbinary.com/why-volatile-fixes-the-2-2250738585072011e-308-bug/comment-page-1/#comment-4645"&gt;PHP&lt;/a&gt; and Java. Similar issues have effected &lt;a href="http://www.ruby-lang.org/en/news/2009/06/09/dos-vulnerability-in-bigdecimal/"&gt;Ruby&lt;/a&gt; in the past. This bug has left a number of servers, web frameworks and custom web applications vulnerable to easily exploitable Denial of Service.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Oracle has &lt;a href="http://www.theregister.co.uk/2011/02/09/java_floating_point_bug_fixed/"&gt;patched this vuln&lt;/a&gt; but there are several non-Oracle JVM's that have yet to release a patch. Tactical patching may be prudent for environment.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Here are three filters that may help you tame this beast of a bug.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;1) Ryan Barnett deployed a series of mod security rules and documented several options here &lt;a href="http://blog.spiderlabs.com/2011/02/java-floating-point-dos-attack-protection.html"&gt;http://blog.spiderlabs.com/2011/02/java-floating-point-dos-attack-protection.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;2) &lt;a href="http://blogs.adobe.com/asset/2011/02/year-of-the-snail.html"&gt;Bryan Sullivan from Adobe came up with the following Java-based blacklist filter&lt;/a&gt;.  This rule is actually quite accurate in *rejecting input* in the DOSable JVM numeric range. This fix, while simple, does indeed reject a series of normally good values.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public static boolean containsMagicDoSNumber(String s) {&lt;/div&gt;&lt;div&gt;    return s.replace(".", "").contains("2225073858507201");&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;3) The following data sanitization code came from &lt;a href="http://blog.fortify.com/blog/2011/02/08/Double-Trouble"&gt;Brian Chess at HP/Fortify&lt;/a&gt;. This approach detects the evil range before trying to call parseDouble and returns the IEEE official value for any double in this most evil range ( 2.2250738585072014E-308 ).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;private static BigDecimal bigBad;&lt;/div&gt;&lt;div&gt;private static BigDecimal smallBad;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;static {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;BigDecimal one = new BigDecimal(1);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;BigDecimal two = new BigDecimal(2);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;BigDecimal tiny = one.divide(two.pow(1022));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// 2^(-1022) ­ 2^(-1076)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;bigBad = tiny.subtract(one.divide(two.pow(1076)));   &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//2^(-1022) ­ 2^(-1075)&lt;/div&gt;&lt;div&gt; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;smallBad = tiny.subtract(one.divide(two.pow(1075))); &lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;public static Double parseSafeDouble(String input) throws InvalidParameterException {&lt;br /&gt;&lt;br /&gt;    if (input == null) throw new InvalidParameterException("input is null");&lt;br /&gt;   &lt;br /&gt;    BigDecimal bd;&lt;br /&gt;    try {&lt;br /&gt;        bd = new BigDecimal(input);&lt;br /&gt;    } catch (NumberFormatException e) {&lt;br /&gt;        throw new InvalidParameterException("cant parse number");&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    if (bd.compareTo(smallBad) &gt;= 0 &amp;amp;&amp;amp; bd.compareTo(bigBad) &lt;= 0) {&lt;br /&gt;        // if you get here you know you're looking at a bad value. The final&lt;br /&gt;        // value for any double in this range is supposed to be the following safe #   &lt;br /&gt;        //return safe number&lt;br /&gt;        System.out.println("BAD NUMBER DETECTED - returning 2.2250738585072014E-308");&lt;br /&gt;        return new Double("2.2250738585072014E-308");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //safe number, return double value&lt;br /&gt;    return bd.doubleValue();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-396961541150445057?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/396961541150445057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=396961541150445057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/396961541150445057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/396961541150445057'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2011/02/taming-beast-java-double-dos.html' title='Taming the Beast'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3424349699793728501</id><published>2011-01-09T08:14:00.002-10:00</published><updated>2011-01-09T08:19:45.345-10:00</updated><title type='text'>Touchpoints and BSIMM hurt AppSec</title><content type='html'>&lt;div class="comment"&gt;     &lt;p&gt;Conjecture: &lt;span style="font-style: italic;"&gt;BSIMM and Touchpoints are harmful to developers and organizations seeking cost effective application security based risk reduction&lt;/span&gt;. &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Let’s start with the flaws of Touchpoints:&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;1. Touchpoints make security separate from development&lt;br /&gt;2. Touchpoints are all verification, not build secure apps&lt;br /&gt;3. Touchpoints are only SDLC (one app), not full boar appsec program planning across an entire application portfolio&lt;br /&gt;4. Touchpoints makes security a cost, not an opportunity for improvement in other aspects of software dev&lt;br /&gt;5. Touchpoints are negative vulnerability focused, not positive controls centric thinking&lt;br /&gt;6. Touchpoints are basically hacking ourselves secure, not assurance evidence based&lt;br /&gt;7. Touchpoints are trivial in the sense that they are just a concept with no backing... just a picture and a book. No meat!&lt;br /&gt;8. Touchpoints are designed to sell tools - not totally, but somewhat&lt;br /&gt;9. Touchpoints are not free and open (creative commons anyone?)&lt;/p&gt;  &lt;p&gt;BSIMM continues with this tradition.&lt;/p&gt;  &lt;p&gt;Does your organization really care if the software you are writing is secure, or is it a burden and a chore?  No amount of process will fix not caring.  BSIMM does almost nothing to create a culture of good security practices for developers. It’s again, 80% verification activities. It extends the tradition of the Touchpoints model which was 100% verification. &lt;/p&gt;  &lt;p&gt;BSIMM and touchpoints do not go down and dirty to figure out how to  actually make software secure.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And frankly, that’s what the entire world really  needs right now. &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3424349699793728501?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3424349699793728501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3424349699793728501' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3424349699793728501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3424349699793728501'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2011/01/touchpoints-and-bsimm-hurt-appsec.html' title='Touchpoints and BSIMM hurt AppSec'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7723346108973675583</id><published>2010-06-30T16:44:00.004-10:00</published><updated>2011-03-04T17:54:49.916-10:00</updated><title type='text'>Injection-safe templating languages</title><content type='html'>&lt;div&gt;The state of the art for Cross Site Scripting (XSS) software engineering defense is, of course, contextual output encoding. This involves manually escaping/encoding each piece of user data within the right context of a HTML document. The best programmer-centric OWASP resource around XSS defense can be found here: &lt;a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet"&gt;http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet &lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, manually escaping user data can be a complex, error prone and time consuming process - especially if you are battling DOM based XSS vulns. We need a more efficient way. We need our frameworks to automatically defend against XSS so programmers can focus on innovation and functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;The future of XSS defense is HTML templating languages that are injection-safe by default.&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to Mike Samuel from Google's AppSec team for pointing these projects out to me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First we have GXP : &lt;a href="http://code.google.com/p/gxp/"&gt;http://code.google.com/p/gxp/&lt;/a&gt; .  It's an older Google offering that is much closer structurally to JSP and so possibly a better option for someone who has a bunch of broken JSPs and wants to migrate piecemeal to a better system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;There are also Java libraries like &lt;a href="http://gxp.googlecode.com/svn/trunk/javadoc/com/google/gxp/html/HtmlClosure.html"&gt;http://gxp.googlecode.com/svn/trunk/javadoc/com/google/gxp/html/HtmlClosure.html&lt;/a&gt; - this Library throws exceptions that are captured in the java type system which makes auditing them and logging and assertions around them fairly easy. They've done a really bad job documenting and advocating GXP but it's very well thought out, easy to use, and feature complete. &lt;a href="https://docs.google.com/a/google.com/present/view?id=dcbpz3ck_8gphq8bdt"&gt;https://docs.google.com/a/google.com/present/view?id=dcbpz3ck_8gphq8bdt&lt;/a&gt; is the best intro.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another angle on the problem of generating safe HTML is&lt;a href="http://google-caja.googlecode.com/svn/changes/mikesamuel/string-interpolation-29-Jan-2008/trunk/src/js/com/google/caja/interp/index.html"&gt; http://google-caja.googlecode.com/svn/changes/mikesamuel/string-interpolation-29-Jan-2008/trunk/src/js/com/google/caja/interp/index.html&lt;/a&gt; which talks about ways to redefine string interpolation in languages like perl and PHP.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marcel Laverdet from Facebook is trying another tack for PHP with his XHP scheme : &lt;a href="http://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919"&gt;http://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919&lt;/a&gt; . Rasmus has publicly been very skeptical of XHP, but I think a lot of his criticisms were a result of conflating XHP with other Facebook PHP schemes, such as precompilation to C and the like.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And course, there is the Google Auto-Escape project to keep a close eye on. It was first announced on March 31st of 2009. &lt;a href="http://googleonlinesecurity.blogspot.com/2009/03/reducing-xss-by-way-of-automatic.html"&gt;http://googleonlinesecurity.blogspot.com/2009/03/reducing-xss-by-way-of-automatic.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Today, we  need to manually output encode each piece of user driven data that we display. Perhaps tomorrow, our frameworks will do that work for us.&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7723346108973675583?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7723346108973675583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7723346108973675583' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7723346108973675583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7723346108973675583'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2010/06/injection-safe-templating-languages_30.html' title='Injection-safe templating languages'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6005396897931731408</id><published>2010-03-30T16:03:00.003-10:00</published><updated>2010-03-30T16:06:39.111-10:00</updated><title type='text'>Shure SM-7B</title><content type='html'>Thank you to OWASP for this new studio-quality microphone, a Shure SM-7B. It's an incredible piece of equipment that makes my life a lot easier - and takes up a lot less space in my very crowded computer area.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Rwklb1TzS_U/S7KthTtFenI/AAAAAAAAAG0/pxt86SlKI9U/s1600/shure-sm7b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 184px; height: 200px;" src="http://3.bp.blogspot.com/_Rwklb1TzS_U/S7KthTtFenI/AAAAAAAAAG0/pxt86SlKI9U/s200/shure-sm7b.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5454612886435756658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I have quite a few podcasts on deck - including a 5 show batch to be released in sync with the Top Ten release!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Thanks all.&lt;br /&gt;&lt;br /&gt;Aloha,&lt;/div&gt;&lt;div&gt;Jim&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6005396897931731408?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6005396897931731408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6005396897931731408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6005396897931731408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6005396897931731408'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2010/03/shure-sm-7b.html' title='Shure SM-7B'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Rwklb1TzS_U/S7KthTtFenI/AAAAAAAAAG0/pxt86SlKI9U/s72-c/shure-sm7b.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2530734006699119332</id><published>2010-01-21T13:07:00.014-10:00</published><updated>2010-01-29T02:33:52.589-10:00</updated><title type='text'>How bad is it?</title><content type='html'>&lt;div&gt;&lt;b&gt;Thank you to  &lt;a href="mailto:jmenerick@netsuite.com"&gt;John Menerick&lt;/a&gt; and &lt;a href="mailto:ben@iagu.net"&gt;Ben Nagy&lt;/a&gt;  for entertaining my questions on the Daily Dave list.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q: Is the recent ie6 0-day anything special?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Not really.  Not as special as the NT &lt;-&gt; Win 7 issue recently highlighted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q: How many similar 0-days are for sale on the black market?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Quite a few.&lt;br /&gt;&lt;br /&gt;Ben: I'd love to see your basis for this assertion. I'm not saying that in the "I don't believe you" sense, only in the "everyone always says that but nobody ever puts up any facts" sense.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q: What is the rate/difficulty for discovery of new windows-based 0-days for the common MS and Adobe products that are installed on almost every corporate client? (I heard Dave mention that discovery is getting more difficult)? &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Not terribly difficult for someone who is dedicated.  Then again, my idea of difficult is much different from the avg. person&lt;br /&gt;&lt;br /&gt;Ben: I think that while finding 0-days might be 'not terribly difficult', selecting and properly weaponising useful 0-days from the masses of dreck your fuzzer spits out IS difficult - at least in my experience. There was some discussion of the 'too many bugs' problem on this list previously and I know several of the other fuzzing guys are currently researching  the same area. Of course you'd explain this to your 'avg. person', as well as explaining that the skillset for finding bugs is not necessarily the same as the skillset for writing reliable exploits for them, and that 'dedication' may not sufficiently substitute for either.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="mailto:pusscat@metasploit.com"&gt;Lurene Grenier&lt;/a&gt;: I really feel that the "selecting good crashes" problem is not that hard to overcome if you have a proper bucketing system, and the ability to do just a bit of auto-triage at crash time.  For example, the fuzzer I use now both separates crashes by what it perceives to be the base issue at hand, and provides a brief notes file with some information about the crash and what is controlled.  This requires just a bit of sense in providing fuzzed input, and very little smarts on the part of the debugger. I really think the next step is automating that brain-jutsu; much of it is hard to keep in your head, but not hard to do in code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using this output, it's pretty easy to spend a lazy morning with your coffee grepping the notes files for the sorts of things you usually find to be reliably exploitable.  From there you can call in your 30 ninjas and have at.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Creating reliable exploits is for sure the hardest part, but once you've done the initial work on a program, the next few exploits in it are of course more quickly and easily done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As for the thought experiment, I think that the benefit of the top four researchers is that they've trained themselves over a long period of time (and with passion) to have a very good set of pattern-recognition tools which they call instincts.  They know how to get crashes, and they know having seen one crash what's likely to find more.  They know how to think about a process to get proper execution, and they're rewarded by success emotionally which makes the lesson learned this time around stick for when they need it again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I honestly think that there is more pattern recognition "muscle-memory" type skill involved in RE, bug hunting, and exploit dev than pure mechanical process, which is why the numbers are so&lt;/div&gt;&lt;div&gt;skewed.  It's like taking 4 native speakers of a language (who love to read!) and 100 students of general linguistics with a zillion dollars. Who will read a book in the language faster?&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q:  How easy is discovery for someone with resources like the Chinese government?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Much simpler.&lt;br /&gt;&lt;br /&gt;Ben: Setting aside the previous point that discovery is only the start, I think it's instructive to consider which elements of the process scale well with money.&lt;br /&gt;&lt;br /&gt;Finding the bugs: You need a fuzzing infrastructure that scales - running peach on one laptop with 30 ninjas standing around it with IDA Pro open is not going to work. Also consider tracking what you've already tested, tracking the results, storing all the crashes, blah blah blah. This does scale well with money, but it's an area that not as many people have looked at as I would like.&lt;br /&gt;&lt;br /&gt;Seeing which bugs are exploitable: Using a naive approach, this scales horribly poorly with money - non-linearly, to put it mildly. There are only so many analysts you will be able to hire that have enough smarts to look at a non-trivial bug and correctly determine its exploitability. You only have to look at some of the Immunity guys' (hi Kostya) records with turning bugs that other people had discarded as DoS or "Just Too Hard" into tight exploits. Even for ninjas, it's slow. There is research being done into doing 'some' of this process automatically (well, I'm doing some, and I know a couple of other guys are too, so that counts), but I don't know of anyone that has a great result in the area yet - I'd love to be corrected.&lt;br /&gt;&lt;br /&gt;Creating nice, reliable exploits: I'd assert that this is like the previous point, but even harder. To be honest, it's not really my thing, so probably one of the people that write exploits for a living would be better to comment, but from talking to those kind of guys, it's often a very long road from 'woo we control ebx' to reliable exploitation, especially against modern OSes and modern software that has lots of stuff built in to make your life harder. I don't know how much of the process can really be automated - I mean there are some nice things like the (old now) EEREAP and newer windbg extensions from the Metasploit guys that will find you jump targets according to parameters and so forth, but up until now I was labouring under the impression that a lot of it remains brain-jitsu, which is hard to scale linearly with money.&lt;br /&gt;&lt;br /&gt;So, while I think that 'simpler' is certainly unassailable, I would need more than a two word assertion to be convinced that it is 'much' simpler. If you give one team a million dollars and 100 people selected at random from the top 10% graduating computer science and you give the other team their pick of any 4 researchers in the world and 3 imacs, whom does the smart money think will produce more weapons grade 0day after 6 months?&lt;br /&gt;&lt;br /&gt;(No it's not a fair comparison. It's a thought experiment.)&lt;br /&gt;&lt;br /&gt;Food for thought, perhaps, since sound bites need little care and feeding.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q:  How bad is it really?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Look at the CVSSv2 score and adjust it to the environments where you determine "how bad it is."  It could be much worse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Q:  I suspect we are just looking at one grain of sand in a beach of 0-days....&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;John: Correct.  No one wants to let everyone else know what cards they hold in their hand, the tools in their toolbox, etc....&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2530734006699119332?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2530734006699119332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2530734006699119332' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2530734006699119332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2530734006699119332'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2010/01/how-bad-is-it.html' title='How bad is it?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7675579790337588716</id><published>2009-12-23T12:57:00.004-10:00</published><updated>2009-12-23T18:05:27.385-10:00</updated><title type='text'>If I were cyberczar</title><content type='html'>(Read to the tune of "Rage Against the Machine : Killing in the Name")&lt;br /&gt;&lt;br /&gt;1) I would defeat SQL Injection. This would be a multi-phased plan focusing on programmer tools and programmer training. The main use of any Federal funding I could secure would be to build the worlds best open source SQL Escaping library so legacy code could be retrofitted.&lt;br /&gt;&lt;br /&gt;2) I would lobby the Fed's to create a new branch of the military. ARMY - NAVY - AIRFORCE - CYBERFORCE - MARINES. The problem is that big, and we are losing the game.&lt;br /&gt;&lt;br /&gt;3) I would take copious notes from day 1. This is a thankless job with heaps of responsibility and absolutely no power. Might as well get a good book deal out of the experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7675579790337588716?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7675579790337588716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7675579790337588716' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7675579790337588716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7675579790337588716'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/12/if-i-were-cyberczar_2130.html' title='If I were cyberczar'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3764879468195281055</id><published>2009-11-22T00:30:00.006-10:00</published><updated>2009-11-22T01:04:09.542-10:00</updated><title type='text'>OWASP Top 5 rc1 released!</title><content type='html'>I'm very impressed with the latest &lt;a href="http://www.owasp.org/index.php/File:OWASP_T10_-_2010_rc1.pdf"&gt;OWASP Top 10 2010 release candidate&lt;/a&gt; . But if a 10 item list is to long for you in this era of 140 character tweets, I present to you the unauthorized &lt;a href="http://www.thefreedictionary.com/reductionistic"&gt;reductionistic&lt;/a&gt; OWASP Top 5.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the OWASP Top 5 is:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) Injection Flaws&lt;/div&gt;&lt;div&gt;2) Broken Authentication&lt;/div&gt;&lt;div&gt;3) Broken Access Control&lt;/div&gt;&lt;div&gt;4) Broken Encryption&lt;/div&gt;&lt;div&gt;5) Security Misconfiguration&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://goodwitchbadwitch.files.wordpress.com/2009/07/monkies-hear-see-speak-no-evil.jpg"&gt;OWASP Top 5 team&lt;/a&gt; felt that A2 (XSS) could be considered to be another kind of injection problem. Like most injection flaws, XSS is controlled by contextual encoding.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A4 (Direct Object Reference), A5 (CSRF), A6 (Failure to Restrict URL Access) and A8 (Unvalidated Redirects and Forwards) could be considered to be classes of access control/authorization flaws. I think that A4/A6/A8 all easily fit into the access control category. But CSRF as just an access control problem? Yes! Authentication validates WHO you are. Authorization/Access Control validates WHAT can you do.  CSRF tokens are just a piece of that task/activity validation.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A9 (Insecure Cryptographic Storage) and A10 (Insufficient Transport Layer Security) are 2 sides of the same data-encryption-lifecycle. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hat's off to the OWASP Top Ten team. This brief reductionism is just a form of OWASP Top 10 flattery! :)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3764879468195281055?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3764879468195281055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3764879468195281055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3764879468195281055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3764879468195281055'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/11/owasp-top-5-rc1-released.html' title='OWASP Top 5 rc1 released!'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1122893720616088096</id><published>2009-11-14T23:58:00.002-10:00</published><updated>2009-11-15T00:00:59.423-10:00</updated><title type='text'>Hardware Security</title><content type='html'>A recent article in "Foreign Affairs"  magazine titled "Securing the Information Highway" (co-authored by General Clarke and Peter Levin) caught my attention. Interesting stuff. Focuses on hardware security.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.foreignaffairs.com/articles/65499/wesley-k-clark-and-peter-l-levin/securing-the-information-highway"&gt;http://www.foreignaffairs.com/articles/65499/wesley-k-clark-and-peter-l-levin/securing-the-information-highway&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Their basic thesis is that there is just no way possible to stop the threat of "electronic infiltration, data theft, and hardware sabotage" and that  securing the nation infrastructure is "neither cost effective or technically feasible".&lt;br /&gt;&lt;br /&gt;They suggest:&lt;br /&gt;&lt;br /&gt;1) Risk Management : "US must develop an integrated strategy that addresses ... the sprawling communications network to the individual chips inside computers"&lt;br /&gt;2) Diversification of the country's digital infrastructure&lt;br /&gt;3) Secure the hardware supply chain&lt;br /&gt;&lt;br /&gt;Worthwhile read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1122893720616088096?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1122893720616088096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1122893720616088096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1122893720616088096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1122893720616088096'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/11/hardware-security.html' title='Hardware Security'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3789124502097747802</id><published>2009-08-17T13:47:00.003-10:00</published><updated>2009-08-17T13:51:01.056-10:00</updated><title type='text'>justifying the focus on insider threat</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;Thank you to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span" style="white-space: nowrap; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;Mat Caughron at &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a href="mailto:mat@phpconsulting.com"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;mat@phpconsulting.co&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a href="mailto:mat@phpconsulting.com"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;m&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt; for authoring this most excellent blog entry.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:arial;font-size:13px;"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:arial;font-size:13px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;It is common to have the insider threat dismissed as a scare tactic or&lt;br /&gt;worst-case-scenario and I believe this is a mistake.&lt;br /&gt;&lt;br /&gt;We are all about the business value of risk.&lt;br /&gt;&lt;br /&gt;Most enterprise companies have to protect themselves from malicious&lt;br /&gt;insiders at all times and this affects the design of their software,&lt;br /&gt;specifically the need for least privilege and generally all&lt;br /&gt;requirements surrounding logging and internal controls.  My thinking&lt;br /&gt;is that if you want to have a seat at the table during the beginning&lt;br /&gt;phases of the software development life cycle, it is best to master&lt;br /&gt;the concerns and business needs imposed by this type of risk.&lt;br /&gt;&lt;br /&gt;Granted, our industry seems to generate snake oil by the barrel, which&lt;br /&gt;is all the more reason for us to take these threats seriously and&lt;br /&gt;calmly seek publicly documented data on real cases.&lt;br /&gt;&lt;br /&gt;Indeed, one would hope the information security professional is&lt;br /&gt;someone who helps to establish the boundaries of trust in systems&lt;br /&gt;being built, not someone who vacuums up the pieces of broken projects,&lt;br /&gt;however well such housekeeping pays.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some references not yet mentioned in this thread:&lt;br /&gt;&lt;br /&gt;Report from 1999 by NSTISSAM:&lt;br /&gt;  &lt;/span&gt;&lt;a href="http://www.cnss.gov/Assets/pdf/nstissam_infosec_1-99.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.cnss.gov/Assets/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;pdf/nstissam_infosec_1-99.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;Focus is on mechanisms more than specific incidents though a few are mentioned.&lt;br /&gt;&lt;br /&gt;U^S3 report with Carnegie Mellon on insider threat, focus on&lt;br /&gt;infrastructure and financial services industries, dated 2004/05/08:&lt;br /&gt; &lt;/span&gt;&lt;a href="http://www.secretservice.gov/ntac/its_report_050516.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.secretservice.gov/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;ntac/its_report_050516.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;a href="http://www.secretservice.gov/ntac/its_report_040820.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.secretservice.gov/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;ntac/its_report_040820.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;a href="http://www.treasury.gov/usss/ntac/gov%20ExecSummary%202008_0108.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.treasury.gov/usss/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;ntac/gov%20ExecSummary%202008_&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;0108.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;Each sampling set is around 50 incidents or less.&lt;br /&gt;&lt;br /&gt;Department of Energy is grappling with this as the disruptions from&lt;br /&gt;insiders could be high impact:&lt;br /&gt; &lt;/span&gt;&lt;a href="http://www.cio.energy.gov/documents/Tues_1400_SalonII_Randall.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.cio.energy.gov/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;documents/Tues_1400_SalonII_&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;Randall.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;br /&gt;Belani / Wilson web application incident response and forensics&lt;br /&gt;considers insider threats with two great examples:&lt;br /&gt;   &lt;/span&gt;&lt;a href="http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Willis.pdf" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;www.blackhat.com/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;presentations/bh-usa-06/BH-US-&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;06-Willis.pdf&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;Also presented in Seattle at an OWASP chapter meeting.&lt;br /&gt;&lt;br /&gt;None of these reports, however, can compare in detail to the data set&lt;br /&gt;of the Privacy Rights Clearinghouse' chronological list of data&lt;br /&gt;breaches.&lt;br /&gt; &lt;/span&gt;&lt;a href="http://www.privacyrights.org/ar/ChronDataBreaches.htm" target="_blank" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;http://www.privacyrights.org/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;ar/ChronDataBreaches.htm&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;br /&gt;Until about 2006, the PRC list identified inside threat incidents as&lt;br /&gt;"Dishonest insider." After that, the number of employee instigated&lt;br /&gt;events is described with greater detail but is therefore harder to&lt;br /&gt;search.   A quick look here should be enough to convince most on this&lt;br /&gt;webappsec list that the impact from insider threats is not&lt;br /&gt;insignificant.&lt;br /&gt;&lt;br /&gt;As software security professionals, we can help to mitigate insider&lt;br /&gt;threat problems and our value in doing so should not be&lt;br /&gt;underestimated.&lt;br /&gt;&lt;br /&gt;The commonplace nature of OWASP-top-ten type flaws should not prevent&lt;br /&gt;us from acknowledging their utility in the hands of a malicious&lt;br /&gt;employee, developer, manager, etc.&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;Mat Caughron CISSP&lt;br /&gt;(408) 910-1266&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; color: rgb(136, 136, 136);  font-family:arial;font-size:13px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;mat@phpconsulting.co&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 255, 255);"&gt;&lt;wbr&gt;m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3789124502097747802?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3789124502097747802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3789124502097747802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3789124502097747802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3789124502097747802'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/08/justifying-focus-on-insider-threat.html' title='justifying the focus on insider threat'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4990230970691268559</id><published>2009-08-09T11:41:00.003-10:00</published><updated>2009-08-09T11:46:02.996-10:00</updated><title type='text'>When to use OWASP AntiSamy?</title><content type='html'>&lt;style&gt;&lt;/style&gt;&lt;div&gt;&lt;a href="http://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project"&gt;OWASP AntiSamy&lt;/a&gt; is a software engineering tool that allows a programmer to verify user-driven HTML/CSS input against a whitelist policy to ensure that is does not contain XSS.&lt;br /&gt;&lt;br /&gt;But when do you use it?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;1) If you accept "normal text data" from a user, then &lt;/div&gt; &lt;div&gt;        a) (input validation) Use the ESAPI validator for input valiation  (functions OTHER than getValidSafeHTML)&lt;/div&gt; &lt;div&gt;        b) (output encoding) Use the ESAPI encoding library for contextual  output encoding when displaying dynamic data in a web browser&lt;/div&gt; &lt;div&gt;                1. encodeForHTML&lt;/div&gt; &lt;div&gt;                2. encodeForJavascript&lt;/div&gt; &lt;div&gt;                3. encodeForHTMLEntity&lt;/div&gt; &lt;div&gt;                4. encodeForCSS&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;br /&gt;2) If you accept HTML from a user, you need to use AntiSamy&lt;/div&gt; &lt;div&gt;       a) (input validation) You must validate and CHANGE (make it safer) HTML  that you accept from a user with AntiSamy (which can be called via ESAPI -  getValidSafeHTML)&lt;/div&gt; &lt;div&gt;       b) (output translation) You can optionally use AntySamy for output  translation (it does not encode; it only makes HTML "safer")&lt;/div&gt; &lt;div&gt;                1. This is crucial when you have legacy HTML in your data storage  mechanism that may still contain XSS&lt;/div&gt; &lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4990230970691268559?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4990230970691268559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4990230970691268559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4990230970691268559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4990230970691268559'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/08/when-to-use-owasp-antisamy.html' title='When to use OWASP AntiSamy?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1386284709993878533</id><published>2009-08-08T21:56:00.001-10:00</published><updated>2009-08-08T21:59:07.768-10:00</updated><title type='text'>Real world cookie length limits</title><content type='html'>Daniel Stenberg &lt;daniel@haxx.se&gt; recently posted some interesting test code and browser results to http-state@ietf.org describing the maximum amount of data that can be stored in a cookie:&lt;br /&gt;&lt;br /&gt;****&lt;br /&gt;&lt;br /&gt;... I just went ahead and wrote a CGI script that redirects to itself and grows a &lt;br /&gt;cookie and stores its length in a URL field like "cookie.cgi?len=200" until &lt;br /&gt;the length in the URL and the actual cookie length no longer  matches.&lt;br /&gt;&lt;br /&gt;Here's a few results from various browsers:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Firefox  3.0.12:         4000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Firefox 3.5:            4000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;curl 7.19.5:             4999&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;IE 8:                   5000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Opera 10.00 beta:       4000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Android  1.5 browser:    4000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Chrome 3.0.195.6:       4000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Wget 1.11.4:             7000[*]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mobile safari (iphone): 8000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;lynx 2.8.7dev.9:        4000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I  think we can safely say that most browsers support at least 4000 characters &lt;br /&gt;cookie contents.&lt;br /&gt;&lt;br /&gt;[*] = this reports "500 Internal Server Error" on  8000, which I don't&lt;br /&gt;understand why but haven't bothered much more  about.&lt;br /&gt;&lt;br /&gt;The test is live here: &lt;a href="http://daniel.haxx.se/test/longcookie.cgi"&gt;http://daniel.haxx.se/test/longcookie.cgi&lt;/a&gt;  Feel free to&lt;br /&gt;use it if you want to try out other browsers, without torturing  it of course!&lt;br /&gt;&lt;br /&gt;And the perl script that runs it looks like  this:&lt;br /&gt;&lt;br /&gt;require "CGI.pm";&lt;br /&gt;&lt;br /&gt;$len = CGI::param('len');&lt;br /&gt;$c =  CGI::cookie('data');&lt;br /&gt;&lt;br /&gt;print "Content-Type: text/html\n";&lt;br /&gt;&lt;br /&gt;if($len ==  length($c)) {&lt;br /&gt;     $c .= "A" x 1000;&lt;br /&gt;     $len += 1000;&lt;br /&gt;     print  "Set-Cookie: data=$c\n";&lt;br /&gt;&lt;br /&gt;     print "Location:  longcookie.cgi?len=$len\n";&lt;br /&gt;     print "\nmoo\n";&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;      printf "\nMax cookie length: %d\n", length($c);&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1386284709993878533?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1386284709993878533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1386284709993878533' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1386284709993878533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1386284709993878533'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/08/real-world-cookie-length-limits.html' title='Real world cookie length limits'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1818813602109923881</id><published>2009-07-18T12:33:00.006-10:00</published><updated>2009-07-20T09:12:05.696-10:00</updated><title type='text'>Open letter to the Struts 1.x team on AUTOCOMPLETE</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;font-family:Arial;" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I'm a big fan of Struts 1.3.x. I currently use Struts 1.3.10, the latest release of the 1.x Struts line.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;font-family:Arial;" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I would like the ability to disable autocomplete in an HTML form. Sadly (from a security perspective), most every browser enables autocomplete by default. We need to explicitly attribute our form html with &lt;b&gt;autocomplete="off"&lt;/b&gt; - in both the form and form element tags of HTML 4.01+ pages. This is a very basic security protection. Wanting to prevent the browser from caching credit card numbers, PII and other critical user data is a no-brainier; appsec 101.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;font-family:Arial;" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;font-family:Arial;" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Now, the recent 1.3.10 release made a great stride in this direction. Finally for the first time the main Struts 1.3.x branch &lt;/span&gt;&lt;a href="https://issues.apache.org/struts/browse/STR-2810"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;supports the autocomplete tag&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; (which defensive coders need - just to disable this feature via html!). &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;But it's still not enabled by default in Struts! &lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; I need to modify the struts tld xml file in order to enable the autocomplete form and form element attribute; which takes me off the main branch of Struts 1.3.x.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;font-family:Arial;" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I implore you to &lt;/span&gt;&lt;a href="https://issues.apache.org/struts/browse/STR-3189"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;consider enabling autocomplete by default,&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; so we can turn it off - without having to customize our version of struts 1.3.x! The best security is "secured by default", and this request moves us in that direction. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Jim Manico&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;OWASP, Intrinsic Security Working Group&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1818813602109923881?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1818813602109923881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1818813602109923881' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1818813602109923881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1818813602109923881'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/07/open-letter-to-struts-1x-team-on.html' title='Open letter to the Struts 1.x team on AUTOCOMPLETE'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-69441725472263594</id><published>2009-06-28T22:54:00.009-10:00</published><updated>2009-06-28T23:57:48.497-10:00</updated><title type='text'>ESAPI Logging</title><content type='html'>&lt;div&gt;The OWASP ESAPI Logging interface is a security-centric but thin abstraction on top of traditional high-performance logging API's. There are both Log4j and native Java Logging default ESAPI logging implementations. The Log4j  implementation is especially mature.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The logging interface of the OWASP ESAPI library pre-defines 4 types of log files entries specific to the glory of security monitoring.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static final EventType ....&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;SECURITY_SUCCESS = new EventType( "SECURITY SUCCESS", true);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;SECURITY_FAILURE = new EventType( "SECURITY FAILURE", false);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;EVENT_SUCCESS = new EventType( "EVENT SUCCESS", true);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;EVENT_FAILURE = new EventType( "EVENT FAILURE", false);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Attributing every log entry with a security type is fundamental to ESAPI. Your implementation of ESAPI can extend or change this list if desired. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ESAPI also supports a hierarchy of logging levels which can be configured at runtime to determine the severity of events that are logged, so that those log entries below the current threshold that are discarded. This is a common logging API feature and includes the following severity levels (fatal, error, warning, info, debug, trace). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The ESAPI team considered simply adding a security severity level to Log4J, but decided that was not enough. We wanted to force a programmer to tag &lt;span class="Apple-style-span" style="font-style: italic;"&gt;every &lt;/span&gt;log entry as a security event (or not), regardless of severity level. We did not add yet another logging abstraction to your life lightly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The reference implementations also includes the following protections:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;encodes any CRLF characters included in log data in order to prevent log injection attacks&lt;br /&gt;&lt;/li&gt;&lt;li&gt;optionally encodes HTML characters into the HTML entity to protect web based log viewing software&lt;br /&gt;&lt;/li&gt;&lt;li&gt;provides a mechanism to log session ids referentially so that sessions can be tracked in log files without exposing real session identifiers that could be used to hijack active sessions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;provides a mechanism to automatically log HTTP post/get variables while allowing for masking of passwords and other security-critical information that should not be logged&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Much of this is configurable in ESAPI.properties &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;#ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Specify your application name if you wish to log it. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger.ApplicationName=ARMS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# If you use an HTML log viewer that does not properly HTML escape &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# log data, you can set LogEncodingRequired to true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger.LogEncodingRequired=false&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger.LogApplicationName=false&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger.LogServerIP=false&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# LogFileName, the name of the logging file. Provide a full directory path (e.g., C:\\ESAPI\\ESAPI_logging_file) if you&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# want to place it in a specific directory.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger.LogFileName=ARMS_ESAPI_LOGFILE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# MaxLogFileSize, the max size (in bytes) of a single log file before it cuts over to a new one (default is 10,000,000)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Logger.MaxLogFileSize=10000000&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now you want to (securely) log. Right on. Simply specify a logger in each class that requires logging:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;private final Logger logger = ESAPI.getLogger(SimpleESAPIFilter.class.getName());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And log away!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;logger.error(Logger.SECURITY_FAILURE,  "session has expired, log out user");&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is an example of a log entry from one of my projects at Aspect. I'm not deploying on a cluster, yet, so I supressed the server IP, port and appName via ESAPI.properties.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:10px;"&gt;2009-06-29 05:48:25,281 WARN  IntrusionDetector SECURITY FAILURE Anonymous:0@unknown:unknown Incorrect password provided for dave&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:10px;"&gt;org.owasp.esapi.errors.ValidationException: Login failed&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at com.aspectsecurity.arms.web.SimpleESAPIFilter.doFilter(SimpleESAPIFilter.java:149)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:10px;"&gt;at java.lang.Thread.run(Thread.java:595)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:10px;"&gt;2009-06-29 05:48:25,281 ERROR com.aspectsecurity.arms.web.actions.ARMSBaseAction EVENT SUCCESS Anonymous:0@unknown:270186 ENTRY POINT FOR ALL ACTIONS: 1246268905281&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:10px;"&gt;2009-06-29 05:48:25,281 ERROR com.aspectsecurity.arms.service.HibernateAccessController SECURITY SUCCESS Anonymous:0@unknown:270186 START assertAuthorizedForAction : action=com.aspectsecurity.arms.web.actions.user.LoginSubmitAction&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:10px;"&gt;2009-06-29 05:48:25,281 ERROR com.aspectsecurity.arms.service.HibernateAccessController SECURITY SUCCESS Anonymous:0@unknown:270186 ACCESS GRANTED assertAuthorizedForAction completeActionName=com.aspectsecurity.arms.web.actions.user.LoginSubmitAction IS NOT MANAGED, SO ALLOW GLOBAL ACCESS&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-69441725472263594?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/69441725472263594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=69441725472263594' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/69441725472263594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/69441725472263594'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/esapi-logging.html' title='ESAPI Logging'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-456641165377579584</id><published>2009-06-25T00:00:00.003-10:00</published><updated>2009-06-25T00:03:22.668-10:00</updated><title type='text'>One file to secure them all</title><content type='html'>&lt;div&gt;&lt;div&gt;Can you imagine having a WebAppSec program for your company that standardized on a open source secure code library, which was vetted by many smart people, and had several supporting tools available that could be used to ensure its use? I can....&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Jeff is getting close to releasing ESAPI 2.0. I was checking out the new ESAPI default configuration file, checking in a little bit of cleanup, and was very taken aback by all of the rich appsec defense categories that it covers.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Properties file for OWASP Enterprise Security API (ESAPI)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# You can find more information about ESAPI&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# http://www.owasp.org/index.php/ESAPI&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# WARNING: Operating system protection should be used to lock down the .esapi&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# resources directory and all the files inside.  Note that if you are using file-based&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# implementations that some files may need to be read-write as they get&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# updated dynamically.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Before using, be sure to update the MasterKey and MasterSalt as described below.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Configuration&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI is designed to be easily extensible. You can use the reference implementation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# or implement your own providers to take advantage of your enterprise's security&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# infrastructure. The functions in ESAPI are referenced using the ESAPI locator, like:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#      ESAPI.encryptor().encrypt( "Secret message" );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Below you can specify the classname for the provider that you wish to use in your&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# application. The only requirement is that it implement the appropriate ESAPI interface.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# This allows you to switch security implementations in the future without rewriting the&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# entire application.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# DefaultAccessController requires ESAPI-AccessControlPolicy.xml in .esapi directory&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.AccessControl=org.owasp.esapi.reference.accesscontrol.DefaultAccessController&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# FileBasedAuthenticator requires users.txt file in .esapi directory&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Log4JFactory Requires log4j.xml or log4j.properties in classpath - http://www.laliluna.de/log4j-tutorial.html&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Authenticator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.AllowedLoginAttempts=3&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.MaxOldPasswordHashes=13&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.UsernameParameterName=username&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.PasswordParameterName=password&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# RememberTokenDuration (in days)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.RememberTokenDuration=14&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Session Timeouts (in minutes)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.IdleTimeoutDuration=20&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Authenticator.AbsoluteTimeoutDuration=120&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Encryption&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# The ESAPI Encryptor provides basic cryptographic functions with a simplified API.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# To get started, generate a new key using java -classpath esapi.jar org.owasp.esapi.reference.JavaEncryptor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# There is not currently any support for key rotation, so be careful when changing your key and salt as it&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# will invalidate all signed, encrypted, and hashed data.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# WARNING: Not all combinations of algorithms and key lengths are supported.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# If you choose to use a key length greater than 128 (and you should), you must download the&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# unlimited strength policy files and install in the lib directory of your JRE/JDK.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# See http://java.sun.com/javase/downloads/index.jsp for more information.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.MasterKey=pJhlri8JbuFYDgkqtHmm9s0Ziug2PE7ovZDyEPm4j14=&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.MasterSalt=SbftnvmEWD5ZHHP+pX3fqugNysc=&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# AES is the most widely used and strongest encryption algorithm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.EncryptionKeyLength=256&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.EncryptionAlgorithm=AES&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Do not use DES except in a legacy situation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#Encryptor.EncryptionKeyLength=56&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#Encryptor.EncryptionAlgorithm=DES&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# TripleDES is considered strong enough for most purposes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#Encryptor.EncryptionKeyLength=168&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#Encryptor.EncryptionAlgorithm=DESede&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.HashAlgorithm=SHA-512&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.HashIterations=1024&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.DigitalSignatureAlgorithm=DSA&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.DigitalSignatureKeyLength=1024&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.RandomAlgorithm=SHA1PRNG&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Encryptor.CharacterEncoding=UTF-8&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI HttpUtilties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# The HttpUtilities provide basic protections to HTTP requests and responses. Primarily these methods &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# protect against malicious data from attackers, such as unprintable characters, escaped characters,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# and other simple attacks. The HttpUtilities also provides utility methods for dealing with cookies,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# headers, and CSRF tokens.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Default file upload location (remember to escape backslashes with \\)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HttpUtilities.UploadDir=C:\\ESAPI\\testUpload&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Force HTTP only on all cookies in ESAPI SafeRequest&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HttpUtilities.ForceHTTPOnly=false&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# File upload configuration&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HttpUtilities.ApprovedUploadExtensions=.zip,.pdf,.doc,.docx,.ppt,.pptx,.tar,.gz,.tgz,.rar,.war,.jar,.ear,.xls,.rtf,.properties,.java,.class,.txt,.xml,.jsp,.jsf,.exe,.dll&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HttpUtilities.MaxUploadFileBytes=500000000&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Using UTF-8 throughout your stack is highly recommended. That includes your database driver,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# container, and any other technologies you may be using. Failure to do this may expose you&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# to Unicode transcoding injection attacks. Use of UTF-8 does not hinder internationalization.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;HttpUtilities.ResponseContentType=text/html; charset=UTF-8&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Executor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Executor.WorkingDirectory=C:\\Windows\\Temp&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Executor.ApprovedExecutables=C:\\Windows\\System32\\cmd.exe,C:\\Windows\\System32\\runas.exe&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Logging&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Set the application name if these logs are combined with other applications&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Logger.ApplicationName=ESAPITest&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# If you use an HTML log viewer that does not properly HTML escape log data, you can set LogEncodingRequired to true&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Logger.LogEncodingRequired=false&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# LogFileName, the name of the logging file. Provide a full directory path (e.g., C:\\ESAPI\\ESAPI_logging_file) if you&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# want to place it in a specific directory.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Logger.LogFileName=ESAPI_logging_file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# MaxLogFileSize, the max size (in bytes) of a single log file before it cuts over to a new one (default is 10,000,000)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Logger.MaxLogFileSize=10000000&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Intrusion Detection&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Each event has a base to which .count, .interval, and .action are added&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# The IntrusionException will fire if we receive "count" events within "interval" seconds&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# The IntrusionDetector is configurable to take the following actions: log, logout, and disable&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#  (multiple actions separated by commas are allowed e.g. event.test.actions=log,disable&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Custom Events&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Names must start with "event." as the base&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Use IntrusionDetector.addEvent( "test" ) in your code to trigger "event.test" here&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.event.test.count=2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.event.test.interval=10&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.event.test.actions=disable,log&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Exception Events&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# All EnterpriseSecurityExceptions are registered automatically&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Call IntrusionDetector.getInstance().addException(e) for Exceptions that do not extend EnterpriseSecurityException&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Use the fully qualified classname of the exception as the base&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# any intrusion is an attack&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntrusionException.count=1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntrusionException.interval=1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntrusionException.actions=log,disable,logout&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# for test purposes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntegrityException.count=10&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntegrityException.interval=5&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.IntegrityException.actions=log,disable,logout&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# rapid validation errors indicate scans or attacks in progress&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# org.owasp.esapi.errors.ValidationException.count=10&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# org.owasp.esapi.errors.ValidationException.interval=10&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# org.owasp.esapi.errors.ValidationException.actions=log,logout&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# sessions jumping between hosts indicates session hijacking&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.count=2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.interval=10&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.actions=log,logout&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#===========================================================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# ESAPI Validation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# The ESAPI validator does many security checks on input, such as canonicalization&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# and whitelist validation. Note that all of these validation rules are applied *after*&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# canonicalization. Double-encoded characters (even with different encodings involved,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# are never allowed.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# To use:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# First set up a pattern below. You can choose any name you want, prefixed by the word&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# "Validation." For example:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#   Validation.Email=^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Then you can validate in your code against the pattern like this:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#   Validator.getInstance().getValidDataFromBrowser( "Email", input );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#   Validator.getInstance().isValidDataFromBrowser( "Email", input );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.SafeString=^[\p{L}\p{N}.]{0,1024}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.Email=^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.IPAddress=^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.URL=^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\:\\'\\/\\\\\\+=&amp;amp;%\\$#_]*)?$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.SSN=^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Validators used by ESAPI&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.AccountName=^[a-zA-Z0-9]{3,20}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.SystemCommand=^[a-zA-Z\\-\\/]{0,64}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.RoleName=^[a-z]{1,20}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.Redirect=^\\/test.*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Global HTTP Validation Rules&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Values with Base64 encoded data (e.g. encrypted state) will need at least [a-zA-Z0-9\/+=]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPScheme=^(http|https)$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPServerName=^[a-zA-Z0-9_.\\-]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPParameterName=^[a-zA-Z0-9_]{0,32}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPParameterValue=^[a-zA-Z0-9.\\-\\/+=_ ]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPCookieName=^[a-zA-Z0-9\\-_]{0,32}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPCookieValue=^[a-zA-Z0-9\\-\\/+=_ ]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPHeaderName=^[a-zA-Z0-9\\-_]{0,32}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPHeaderValue=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&amp;amp;_ ]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPContextPath=^[a-zA-Z0-9.\\-_]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPPath=^[a-zA-Z0-9.\\-_]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPQueryString=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&amp;amp;_ ](1,50)$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPURI=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&amp;amp;_ ]*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPURL=^.*$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.HTTPJSESSIONID=^[A-Z0-9]{10,30}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;# Validation of file related input&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.FileName=^[a-zA-Z0-9!@#$%^&amp;amp;{}\\[\\]()_+\\-=,.~'` ]{0,255}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Validator.DirectoryName=^[a-zA-Z0-9:\\\\!@#$%^&amp;amp;{}\\[\\]()_+\\-=,.~'` ]{0,255}$&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Rwklb1TzS_U/SkNKXL0GhxI/AAAAAAAAAGc/ts2vHCH2vEQ/s1600-h/35999.jpg"&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Rwklb1TzS_U/SkNKXL0GhxI/AAAAAAAAAGc/ts2vHCH2vEQ/s1600-h/35999.jpg"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-456641165377579584?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/456641165377579584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=456641165377579584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/456641165377579584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/456641165377579584'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/one-file-to-secure-them-all.html' title='One file to secure them all'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2162621526269687104</id><published>2009-06-17T13:18:00.004-10:00</published><updated>2009-06-18T20:32:15.704-10:00</updated><title type='text'>OWASP Podcast #26 - April News part 2</title><content type='html'>&lt;style&gt;&lt;/style&gt;&lt;div style="font-family: arial;"&gt;&lt;style&gt;&lt;/style&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;I just pushed OWASP Podcast #26 live&lt;/span&gt;. We had &lt;span style=""&gt;Tom Brennan (White Hat Security), &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;Alex Smolen (Foundstone), &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;Jeff Williams  (Aspect) and Andre Gironda (The "House" of AppSec) on the  show - a very mixed group with different perspectives.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;Download options and show notes are here &lt;/span&gt;&lt;a href="http://www.owasp.org/index.php/Podcast_26"&gt;http://www.owasp.org/index.php/Podcast_26&lt;/a&gt;&lt;span style=""&gt; or just grab the mp3 &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_26.mp3"&gt;http://www.owasp.org/download/jmanico/owasp_podcast_26.mp3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;   &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt;PS : &lt;span style=""&gt;We  discussed the following articles:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;dl&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/16 &lt;a class="external free" title="http://www.informit.com/articles/article.aspx?p=1338343" href="http://www.informit.com/articles/article.aspx?p=1338343" rel="nofollow"&gt;http://www.informit.com/articles/article.aspx?p=1338343&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;&lt;a class="external free" title="http://www.cigital.com/justiceleague/2009/04/16/software-security-2008/" href="http://www.cigital.com/justiceleague/2009/04/16/software-security-2008/" rel="nofollow"&gt;http://www.cigital.com/justiceleague/2009/04/16/software-security-2008/&lt;/a&gt;  Gary McGraw uses statistics to show that Software (Application) Security has come of age  &lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/17 &lt;a class="external free" title="http://research.zscaler.com/2009/04/we-used-to-laugh-at-xss.html" href="http://research.zscaler.com/2009/04/we-used-to-laugh-at-xss.html" rel="nofollow"&gt;http://research.zscaler.com/2009/04/we-used-to-laugh-at-xss.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Michael Sutton discusses history of XSS from Defcon 10 (2002) to the present  day (Twitter worm)&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/17 &lt;a class="external free" title="http://jeremiahgrossman.blogspot.com/2009/04/software-security-grew-to-nearly-500m.html" href="http://jeremiahgrossman.blogspot.com/2009/04/software-security-grew-to-nearly-500m.html" rel="nofollow"&gt;http://jeremiahgrossman.blogspot.com/2009/04/software-security-grew-to-nearly-500m.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Jeremiah uses McDonalds and Mortons as comparatives for black-box vs.  white-box security testing&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/17 &lt;a class="external free" title="http://jeremiahgrossman.blogspot.com/2009/04/website-threats-and-their-capabilities.html" href="http://jeremiahgrossman.blogspot.com/2009/04/website-threats-and-their-capabilities.html" rel="nofollow"&gt;http://jeremiahgrossman.blogspot.com/2009/04/website-threats-and-their-capabilities.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;OWASP Catalyst announced&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/20 &lt;a class="external free" title="http://paco.to/?p=305" href="http://paco.to/?p=305" rel="nofollow"&gt;http://paco.to/?p=305&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Paco lists 5 reasons for software certifications&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/20 &lt;a class="external free" title="http://labs.securitycompass.com/index.php/2009/04/20/security-analysis-of-core-j2ee-design-patterns/" href="http://labs.securitycompass.com/index.php/2009/04/20/security-analysis-of-core-j2ee-design-patterns/" rel="nofollow"&gt;http://labs.securitycompass.com/index.php/2009/04/20/security-analysis-of-core-j2ee-design-patterns/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Rohit Sethi of SecurityCompass posts a blog post on a new Security Compass  Labs blog about "Security Analysis of Core Java Enterprise Patterns"&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/21 &lt;a class="external free" title="http://docs.google.com/Doc?id=dd7x5smw_16hdd34ggz" href="http://docs.google.com/Doc?id=dd7x5smw_16hdd34ggz" rel="nofollow"&gt;http://docs.google.com/Doc?id=dd7x5smw_16hdd34ggz&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;mario heiderich posts some results of browser fuzzing on extraneous  characters in tags&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/22 &lt;a class="external free" title="http://plynt.com/blog/2009/04/how-frequently-should-an-appli/" href="http://plynt.com/blog/2009/04/how-frequently-should-an-appli/" rel="nofollow"&gt;http://plynt.com/blog/2009/04/how-frequently-should-an-appli/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;The Plynt blog asks the question, "How frequently shoud Applications be  Tested?"&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/24 &lt;a class="external free" title="http://www.troopers09.org/content/e3/e445/index_eng.html" href="http://www.troopers09.org/content/e3/e445/index_eng.html" rel="nofollow"&gt;http://www.troopers09.org/content/e3/e445/index_eng.html&lt;/a&gt;&lt;/span&gt;  &lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Wendel Guglielmetti Henrique from Trustwave and Sandro Gauchi of  EnableSecurity spoke at TROOPERS09 in Munch about "The Truth of Web Application  Firewalls: what the vendors do NOT want you to know"  &lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/27 &lt;a class="external free" title="http://tacticalwebappsec.blogspot.com/2009/04/scanner-and-waf-data-sharing.html" href="http://tacticalwebappsec.blogspot.com/2009/04/scanner-and-waf-data-sharing.html" rel="nofollow"&gt;http://tacticalwebappsec.blogspot.com/2009/04/scanner-and-waf-data-sharing.html&lt;/a&gt;&lt;/span&gt;   &lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Ryan Barnett gives guidance on how best to make VA+WAF work together  &lt;/span&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-size:85%;"&gt;4/27 &lt;a class="external free" title="http://www.owasp.org/index.php/Category:OWASP_PCI_Project" href="http://www.owasp.org/index.php/Category:OWASP_PCI_Project" rel="nofollow"&gt;http://www.owasp.org/index.php/Category:OWASP_PCI_Project&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;span style="font-size:85%;"&gt;Ed Bellis and Trey Ford start a PCI effort to ensure their activities  uniformly meet PCI requirements, and for those getting started - to aid in  building a website security strategy that also ensures sustainable PCI  compliance. &lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2162621526269687104?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2162621526269687104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2162621526269687104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2162621526269687104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2162621526269687104'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/owasp-podcast-26-april-news-part-2.html' title='OWASP Podcast #26 - April News part 2'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3325177837407664852</id><published>2009-06-12T02:23:00.005-10:00</published><updated>2009-06-17T13:21:30.166-10:00</updated><title type='text'>OWASP Podcast #24 - April News part 1</title><content type='html'>OWASP Podcast #24 - Part 1 of the OWASP Newscast for April 2009 - is now live!&lt;br /&gt;&lt;br /&gt;OWASP Podcast #24 features Alex Smolen, Andre Gironda and Jeff Williams. Andre did all of the extensive copy editor work. We cover a variety of Web App Sec articles found &lt;a href="http://www.owasp.org/index.php/Podcast_24"&gt;here&lt;/a&gt;. The show lasts about 40 minutes.&lt;br /&gt;&lt;br /&gt;To listen to &lt;a href="https://www.owasp.org/index.php/Podcast_24"&gt;OWASP Podcast #24&lt;/a&gt; you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_24.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;,  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s1600-h/owasp2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s400/owasp2.jpg" alt="" id="BLOGGER_PHOTO_ID_5334894701436908466" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3325177837407664852?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3325177837407664852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3325177837407664852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3325177837407664852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3325177837407664852'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/owasp-podcast-24-april-newscast-part-1.html' title='OWASP Podcast #24 - April News part 1'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s72-c/owasp2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1330824932119966997</id><published>2009-06-08T12:11:00.007-10:00</published><updated>2009-06-08T14:26:15.692-10:00</updated><title type='text'>Has WHS jumped the shark?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Rwklb1TzS_U/Si2OEljgurI/AAAAAAAAAFs/ij6wZ4F6uws/s1600-h/200px-Fonzie_jumps_the_shark.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 168px;" src="http://2.bp.blogspot.com/_Rwklb1TzS_U/Si2OEljgurI/AAAAAAAAAFs/ij6wZ4F6uws/s400/200px-Fonzie_jumps_the_shark.PNG" alt="" id="BLOGGER_PHOTO_ID_5345084542210325170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Does the "&lt;span class="subHD1"&gt;&lt;a href="http://www.whitehatsec.com/home/services/certified.html"&gt;WhiteHat Website Security Certification Program&lt;/a&gt;" &lt;/span&gt;demonstrate that WHS has &lt;a href="http://en.wikipedia.org/wiki/Jumping_the_shark"&gt;jumped the proverbial shark&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;25% or more of WHS's customers demanded a logo program of this nature, says Jeremiah Grossman, CTO of WHS. Customer demand is not something to ignore lightly.&lt;br /&gt;&lt;br /&gt;By the same token, website logo programs of this nature have a dubious past, at best.&lt;br /&gt;&lt;br /&gt;Take McAfee's "Hack Safe" program as an obvious example.  The level of negative press that the "Hacker Safe" program has generated to date is outstanding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;McAfee 'Hacker Safe' cert sheds more cred. Rubber stamp factory exposed&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.theregister.co.uk/2008/04/29/mcafee_hacker_safe_sites_vulnerable/"&gt;http://www.theregister.co.uk/2008/04/29/mcafee_hacker_safe_sites_vulnerable/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;More bad news for McAfee, HackerSafe certification&lt;/span&gt;&lt;br /&gt;&lt;a href="http://blogs.zdnet.com/security/?p=1068"&gt;http://blogs.zdnet.com/security/?p=1068&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hackersafe? Not so much.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://holisticinfosec.org/video/HS_ISSA/ISSA_Regional_HackerSafe.html"&gt;http://holisticinfosec.org/video/HS_ISSA/ISSA_Regional_HackerSafe.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Russ McGee had a very interesting blog post that was favorable to WHS's new website cert program.&lt;br /&gt;&lt;div class="chat in"&gt;&lt;div class="msg 1st"&gt;&lt;a href="http://holisticinfosec.blogspot.com/2009/05/whitehats-trustmark-program-as-game.html"&gt;http://holisticinfosec.blogspot.com/2009/05/whitehats-trustmark-program-as-game.html&lt;/a&gt;.  In the comment section, Jeremiah states:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I think it's also fair to say that what we're offering is more of a "Trust mark" than "Security mark." We do not want lay claim as to the implied security of a website, or the lack thereof. Doing so is a very slippery slope. If our mark does that it is not our intent and we are open to ideas on how best to clarify its true meaning. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;To answer your question, only Sentinel customers may display our mark -- which does not come cheaply as compared to others. Organizations who use the Sentinel Service are those who really care about security and the mark should represent that.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and &lt;a href="http://www.whitehatsec.com/home/services/certified.html"&gt;http://www.whitehatsec.com/home/services/certified.html&lt;/a&gt; states:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The “website security by WhiteHat Security” mark allows Sentinel subscribers to assure their site visitors that the WhiteHat Sentinel Services is being actively deployed to safeguard confidential data from security breaches and hacker attacks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;Jeremiah was faced with a rather difficult choice : upset his customer, or upset some in the security community.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But I must call this a "security fail" for for time being. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;a) This cert is not claiming that the website is secure&lt;br /&gt;b) This cert claims that Whitehat Security is the web security service provider, only&lt;br /&gt;c) This cert is consumer based; it's meant for the consumer not the security pro&lt;br /&gt;d) A security-ignorant consumer (the masses) will incorrectly conclude that the website IS secure based on seeing the WHS certification logo, even thou WHS is not making that claim&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;We need more in-depth verification and more process, not less.  Projects like the &lt;a href="http://www.owasp.org/index.php/ASVS"&gt;OWASP Application Security Verification Standard&lt;/a&gt; meets that challenge head-on.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://manicode.blogspot.com/2009/06/owasp-asvs-release-version-published.html"&gt;http://manicode.blogspot.com/2009/06/owasp-asvs-release-version-published.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS: So in a few years, when we have a "Aspect Assured" logo, please give me a hard  time. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1330824932119966997?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1330824932119966997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1330824932119966997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1330824932119966997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1330824932119966997'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/has-whs-jumped-shark.html' title='Has WHS jumped the shark?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Rwklb1TzS_U/Si2OEljgurI/AAAAAAAAAFs/ij6wZ4F6uws/s72-c/200px-Fonzie_jumps_the_shark.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2348171247553421505</id><published>2009-06-08T09:36:00.004-10:00</published><updated>2009-06-08T14:31:41.498-10:00</updated><title type='text'>OWASP ASVS Release Version published</title><content type='html'>&lt;div&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="126444412-03062009"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;Release quality OWASP projects are the level of quality of professional tools and documents.&lt;br /&gt;&lt;br /&gt;Application Security Verification Standards are specifications produced by OWASP in cooperation with secure applications developers and verifiers worldwide for the purpose of accelerating the deployment of secure Web applications. First published in 2008 as a result of an OWASP Summer of Code grant and meetings with a small group of early adopters, the ASVS documents have become widely referenced and implemented. Further development of ASVS occurs through mailing list discussions and occasional workshops, and suggestions for improvement are welcome. You can download it here (&lt;a href="http://www.owasp.org/index.php/ASVS"&gt;http://www.owasp.org/index.php/ASVS&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;For more information, please contact us. &lt;a href="mailto:mike.boberski@owasp.org"&gt;Mike Boberski&lt;/a&gt;, &lt;a href="mailto:Jeff.Williams@aspectsecurity.com"&gt;Jeff Williams&lt;/a&gt;, and &lt;a href="mailto:Dave.Wichers@aspectsecurity.com"&gt;Dave Wichers&lt;/a&gt; are the primary authors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2348171247553421505?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2348171247553421505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2348171247553421505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2348171247553421505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2348171247553421505'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/owasp-asvs-release-version-published.html' title='OWASP ASVS Release Version published'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8634209217134812902</id><published>2009-06-01T00:00:00.005-10:00</published><updated>2009-06-02T10:23:04.282-10:00</updated><title type='text'>OWASP Podcast #23 - Dr. Boaz Gelbord</title><content type='html'>&lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;OWASP Podcast #23, an interview with Dr. Boaz Gelbord - is now live!  &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_23.mp3"&gt;http://www.owasp.org/download/jmanico/owasp_podcast_23.mp3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Boaz is the co-author of the &lt;a href="http://www.owasp.org/images/b/b2/OWASP_SSB_Project_Report_March_2009.pdf"&gt;OWASP Security Spending Benchmarks Project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt;RSS: &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;http://www.owasp.org/download/jmanico/podcast.xml&lt;/a&gt;&lt;br /&gt;iTunes:  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8634209217134812902?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8634209217134812902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8634209217134812902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8634209217134812902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8634209217134812902'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/06/owasp-podcast-23-dr-boaz-gelbord.html' title='OWASP Podcast #23 - Dr. Boaz Gelbord'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7806854144541838420</id><published>2009-05-26T12:12:00.012-10:00</published><updated>2010-08-18T08:36:35.926-10:00</updated><title type='text'>'Sound' Analysis by Dave Wichers</title><content type='html'>( This blog post was authored by &lt;a href="mailto://dave.wichers@aspectsecurity.com"&gt;dave.wichers@aspectsecurity.com&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;I recently attended the NSA High Confidence Software &amp;amp; Systems (HCSS) Conference and noticed that many tool vendors and researchers working on static and dynamic analysis were using a new term called &lt;span style="font-weight: bold;"&gt;&lt;u&gt;sound analysis&lt;/u&gt;&lt;/span&gt;, which means, ‘no false negatives’. In other words, a ‘sound’ analysis won’t miss any of the types of flaws it is looking for. It might have some false positives.&lt;br /&gt;&lt;br /&gt;Bill Scherlis, one of the speakers, defined this as: “In a &lt;span style="font-weight: bold;"&gt;sound analysis&lt;/span&gt;, as distinct from heuristic analysis, we do not produce false negatives. If there is a defect of a particular variety, our sound analysis will find it. I’ll note that a sound analysis may have false positives. The mathematics generally preclude the possibility of having it both ways. But in practice we don’t get many false positives. But the main point is to avoid false negatives, to not miss a diagnosis. We may occasionally over-diagnose but we will never miss a diagnosis.”&lt;br /&gt;&lt;br /&gt;I like the idea of this, but I have never heard any of the vendors in our space claim sound analysis for anything they look for. I did see one vendor there that claimed they could provide sound analysis for buffer overflows. The company was Kestrel Technology. They define soundness as: &lt;a href="http://www.kestreltechnology.com/about/sound.php"&gt;http://www.kestreltechnology.com/about/sound.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, if you hear of any code scanning vendor claim they provide ‘sound’ analysis, I’d be interested in hearing about it.  dave.wichers@aspectsecurity.com&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Dave Wichers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PS: Because Kestrel does ‘sound’ analysis, they are able to report the kinds of positive information I would love to see from a tool. In my presentation, I had the following security facts label (updated based on Jeff’s original idea 5+ years ago). Imagine tools in our space reporting what I have listed in gray … Wouldn’t that be nice :-)&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://manico.net/blogpics/contents.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;PPS:  I don’t think this is an attack ‘against’ the tools. I think there are two points here:&lt;br /&gt;1)   Sound analysis vs. best we can do with current state of the art (and even sound analysis can improve with less false positives).&lt;br /&gt;2)    And separately, tools reporting what they have found that’s good, rather just what is bad. However, if tools aren’t doing ‘sound’ analysis, they will be reluctant to report goodness, since they can’t find/report everything that’s relevant (and are thus unsound)   :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Rwklb1TzS_U/ShxpyrzugII/AAAAAAAAAFc/jJUjUt31B4c/s1600-h/test.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7806854144541838420?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7806854144541838420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7806854144541838420' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7806854144541838420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7806854144541838420'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/sound-analysis-by-dave-wichers.html' title='&apos;Sound&apos; Analysis by Dave Wichers'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6881461292886400559</id><published>2009-05-26T00:19:00.001-10:00</published><updated>2009-05-26T00:21:36.407-10:00</updated><title type='text'>OWASP Top 6 2009</title><content type='html'>6. OWASP Legal Project (Secure Software Contracts for Developers and their  Clients) &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Legal_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_Legal_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. OWASP  Live CD! FREE TOOLS!  &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Live_CD_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_Live_CD_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. OWASP  Application Security Verification Standard  &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.  OWASP Code Review Guide  &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Code_Review_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_Code_Review_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. OWASP  Developers Guide  &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Guide_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_Guide_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1. OWASP Coders  Security Library for Java, PHP, .NET, ASP and Haskel (ESAPI - FOSS&lt;br /&gt;Enterprise Security API)  &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API"&gt;http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6881461292886400559?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6881461292886400559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6881461292886400559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6881461292886400559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6881461292886400559'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/owasp-top-6-2009.html' title='OWASP Top 6 2009'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3654058991464965484</id><published>2009-05-25T18:07:00.021-10:00</published><updated>2009-05-25T22:08:03.759-10:00</updated><title type='text'>Please do not log session ids</title><content type='html'>&lt;div&gt;I'm very disappointed to see Johannes Ullrich @ the &lt;a href="http://isc.sans.org/"&gt;Internet Storm Center&lt;/a&gt; lead off the SANS Software Security Institute blogging effort at &lt;a href="http://www.appsecstreetfighter.com/"&gt;appsecstreetfighter.com&lt;/a&gt; by &lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;providing a software security recommendation that will significantly increase application risk&lt;/span&gt;!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://appsecstreetfighter.com/2009/05/24/logging-cookies-in-apache/"&gt;http://appsecstreetfighter.com/2009/05/24/logging-cookies-in-apache/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This is absolutely positively bad application security advice. &lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;Logging a session id will actually increase&lt;/span&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt; application risk! Never log session ids!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;To quote Johannes, "The cookie typically includes the session ID, which then links to a particular user. So this way, you can figure out which user caused a particular action."&lt;br /&gt;&lt;br /&gt;&lt;div&gt;An insider could hijack all active sessions by simply having access to a live application log file.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Never log session ids. If you need to uniquely identify each session in your log files for debugging or other purposes, then &lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;hash your session id's before logging them&lt;/span&gt;. Only transmit session ids over well configured https. Keep session ids out of urls. Make sure session ids are cryptographically random and long. Reduce idle timeout. Enforce absolute timeout. Invalidate sessio&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;n ids at logout.  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;But really, if you think you need to log a session id or ANY credentials, think again.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Make sure your Web Application Security educator utilizes OWASP principles!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;PS: &lt;a href="http://appsecstreetfighter.com/2009/05/25/logging-cookies-in-apache/"&gt;appsecstreetfighter.com&lt;/a&gt; is a great blog name.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Rwklb1TzS_U/ShuiazsdRpI/AAAAAAAAAFM/HDGPFO6aDrQ/s1600-h/UgBgY9j9VG.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 221px;" src="http://2.bp.blogspot.com/_Rwklb1TzS_U/ShuiazsdRpI/AAAAAAAAAFM/HDGPFO6aDrQ/s400/UgBgY9j9VG.jpg" alt="" id="BLOGGER_PHOTO_ID_5340040364614829714" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3654058991464965484?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3654058991464965484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3654058991464965484' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3654058991464965484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3654058991464965484'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/sans-and-session-ids.html' title='Please do not log session ids'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Rwklb1TzS_U/ShuiazsdRpI/AAAAAAAAAFM/HDGPFO6aDrQ/s72-c/UgBgY9j9VG.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3108507983062569434</id><published>2009-05-22T15:06:00.001-10:00</published><updated>2009-05-22T15:07:31.965-10:00</updated><title type='text'>OWASP Podcast #22 - Dan Cornell</title><content type='html'>&lt;style&gt;&lt;/style&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;OWASP Podcast #22, an interview with Dan Cornell,  CTO of the Denim Group - is now live!  &lt;a href="http://www.owasp.org/index.php/Podcast_22"&gt;http://www.owasp.org/index.php/Podcast_22&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Dan is a smart cookie who puts in incredible amount  of time volunteering for OWASP. He's a great guy with a very pragmatic  perspective on Application Security. I hope you enjoy!&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt;OWASP Podcast Series RSS: &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;http://www.owasp.org/download/jmanico/podcast.xml&lt;/a&gt;&lt;br /&gt;OWASP Podcast Series iTunes:  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3108507983062569434?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3108507983062569434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3108507983062569434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3108507983062569434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3108507983062569434'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/owasp-podcast-22-dan-cornell.html' title='OWASP Podcast #22 - Dan Cornell'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-9133018983998243187</id><published>2009-05-20T14:13:00.005-10:00</published><updated>2009-05-20T14:48:21.491-10:00</updated><title type='text'>OWASP Podcast #21 - Richard Stallman</title><content type='html'>&lt;span style="font-size:100%;"&gt;OWASP Podcast #21, an interview with Richard Stallman, is now live!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Richard is the founder of the GNU Project and the Free Software Foundation.  Created the GNU Compiler and Debugger. Emacs, too. He is one of the original (MIT Style) hackers. He also created a few licenses, like the GPL.  He is the original Software Freedom Fighter.  (Just don't ask him what his Skype address is, ouch my bad)&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;To listen to OWASP Podcast #&lt;/span&gt;&lt;span style="font-size:100%;"&gt;21&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_21.ogg"&gt;download the OGG  file directly&lt;/a&gt; or  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;. This podcast is only being released in OGG format only to honor Richards request.  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;I'm very grateful to&lt;/span&gt; &lt;a href="http://www.twistedmusic.com/artists/shpongle/" class="external text" title="http://www.twistedmusic.com/artists/shpongle/" rel="nofollow"&gt;Shpongle&lt;/a&gt; and &lt;a href="http://www.twistedmusic.com/" class="external text" title="http://www.twistedmusic.com/" rel="nofollow"&gt;Twisted Records&lt;/a&gt;&lt;span class="external text"&gt; for allowing the OWASP Podcast Series FREE use of their music for the show!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-9133018983998243187?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/9133018983998243187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=9133018983998243187' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/9133018983998243187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/9133018983998243187'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/owasp-podcast-21-richard-stallman.html' title='OWASP Podcast #21 - Richard Stallman'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2129996309801193753</id><published>2009-05-12T00:48:00.006-10:00</published><updated>2009-05-22T11:17:26.541-10:00</updated><title type='text'>OWASP Podcast #19 - March 2009 News Part 2</title><content type='html'>OWASP Podcast #19 - Part 2 of the OWASP Newscast for March 2009 - is now live!&lt;br /&gt;&lt;br /&gt;OWASP Podcast #19 features Arshan Dabirsiagh, Andre Gironda and Jeff Williams.  Andre did all of the extensive copy editor work. We cover a variety of Web App Sec articles found &lt;a href="http://www.owasp.org/index.php/Podcast_19"&gt;here&lt;/a&gt;. The show lasts about 55 minutes.&lt;br /&gt;&lt;br /&gt;To listen to &lt;a href="http://www.owasp.org/index.php/Podcast_19"&gt;OWASP Podcast #19&lt;/a&gt; you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_19.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;,  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Gareth Heyes was kind enough to donate some new album art for the show!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s1600-h/owasp2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s400/owasp2.jpg" alt="" id="BLOGGER_PHOTO_ID_5334894701436908466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The OWASP Podcast News Commentary Show will soon be on a 2 week production cycle. I've also invited John Steven from Cigital, Alex Smollen from Foundstone, and Tom Brennan from Whitehat Security to join the show. It should make for a very interesting appsec mix!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2129996309801193753?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2129996309801193753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2129996309801193753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2129996309801193753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2129996309801193753'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/owasp-podcast-19-march-2009-news-part-2.html' title='OWASP Podcast #19 - March 2009 News Part 2'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Rwklb1TzS_U/SgladylCs7I/AAAAAAAAAE8/S9jWkMl4OmQ/s72-c/owasp2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6207655359247906812</id><published>2009-05-03T20:13:00.003-10:00</published><updated>2009-05-03T20:22:33.838-10:00</updated><title type='text'>OWASP Podcast #18 - Jeremiah Grossman</title><content type='html'>&lt;span style="font-size:100%;"&gt;OWASP Podcast #18, an interview with &lt;a href="http://jeremiahgrossman.blogspot.com/"&gt;Jeremiah Grossman&lt;/a&gt;, is now &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_18.mp3"&gt;live&lt;/a&gt;! &lt;/span&gt;Jeremiah is the CTO of Whitehat Security and has been an active member of the Web Application Security community for well over 10 years.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;To listen to OWASP Podcast #18, you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_18.mp3"&gt;download the mp3 file directly&lt;/a&gt;,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;I'm very greatful to&lt;/span&gt; &lt;a href="http://www.twistedmusic.com/artists/shpongle/" class="external text" title="http://www.twistedmusic.com/artists/shpongle/" rel="nofollow"&gt;Shpongle&lt;/a&gt; and &lt;a href="http://www.twistedmusic.com/" class="external text" title="http://www.twistedmusic.com/" rel="nofollow"&gt;Twisted Records&lt;/a&gt;&lt;span class="external text"&gt; for allowing the OWASP Podcast Series to use their music for the show! I'm a very big fan of Ambient and Down-tempo techno. Perfect coding music. Shpongle is among the best.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Rwklb1TzS_U/Sf6Ji3jxCEI/AAAAAAAAAE0/GlqgkFIc9zY/s1600-h/A0707_TT_16.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 227px; height: 157px;" src="http://1.bp.blogspot.com/_Rwklb1TzS_U/Sf6Ji3jxCEI/AAAAAAAAAE0/GlqgkFIc9zY/s400/A0707_TT_16.jpg" alt="" id="BLOGGER_PHOTO_ID_5331850240975767618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="external text"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6207655359247906812?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6207655359247906812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6207655359247906812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6207655359247906812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6207655359247906812'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/05/owasp-podcast-18-jeremiah-grossman.html' title='OWASP Podcast #18 - Jeremiah Grossman'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Rwklb1TzS_U/Sf6Ji3jxCEI/AAAAAAAAAE0/GlqgkFIc9zY/s72-c/A0707_TT_16.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4534198119623869586</id><published>2009-04-23T14:24:00.006-10:00</published><updated>2009-05-03T20:20:55.417-10:00</updated><title type='text'>OWASP Podcast #17 - Interview with RSnake</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_17.mp3"&gt;OWASP Podcast #17, an interview with &lt;span style="text-decoration: underline;"&gt;Robert Hansen&lt;/span&gt;, is now live&lt;/a&gt;! Robert achieved fame and glory in the early wild west days of web application security &lt;/span&gt;working for e-bay. He's also the brain behind the Google-approved security blog, &lt;a href="http://ha.ckers.org/"&gt;http://ha.ckers.org&lt;/a&gt; .&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ha.ckers.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 360px; height: 480px;" src="http://ha.ckers.org/images/google-ha.ckers.jpg" alt="" border="0" /&gt;&lt;/a&gt;"courtesy" of &lt;a href="http://ha.ckers.org/"&gt;ha.ckers.org&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4534198119623869586?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4534198119623869586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4534198119623869586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4534198119623869586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4534198119623869586'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/04/owasp-podcast-17-interview-with-rsnake.html' title='OWASP Podcast #17 - Interview with RSnake'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1322714150546800732</id><published>2009-04-09T14:03:00.004-10:00</published><updated>2009-04-13T17:53:10.547-10:00</updated><title type='text'>OWASP Podcast #16 - Interview with Dave Aitel</title><content type='html'>&lt;span style="font-size:100%;"&gt;The first rule of Fight Club is: you do not talk about Fight Club.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;OWASP Podcast #16, an interview with &lt;a href="http://en.wikipedia.org/wiki/Dave_Aitel"&gt;Dave Aitel&lt;/a&gt;, covers a wide variety of topics. Dave&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;started working as a security researcher for the NSA at the age of 18 and has no shortage of experience to pull from in this interview.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;To listen to OWASP Podcast #16, you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_16.mp3"&gt;download the mp3 file directly&lt;/a&gt;,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Rwklb1TzS_U/SeQIkHXZ0pI/AAAAAAAAAEs/lCBEh7xC0Hc/s1600-h/dave_aitel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 240px;" src="http://4.bp.blogspot.com/_Rwklb1TzS_U/SeQIkHXZ0pI/AAAAAAAAAEs/lCBEh7xC0Hc/s400/dave_aitel.jpg" alt="" id="BLOGGER_PHOTO_ID_5324390076004291218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1322714150546800732?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1322714150546800732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1322714150546800732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1322714150546800732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1322714150546800732'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/04/owasp-podcast-16-interview-with-dave.html' title='OWASP Podcast #16 - Interview with Dave Aitel'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Rwklb1TzS_U/SeQIkHXZ0pI/AAAAAAAAAEs/lCBEh7xC0Hc/s72-c/dave_aitel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-151854427877667265</id><published>2009-04-07T00:41:00.006-10:00</published><updated>2009-04-07T00:53:09.459-10:00</updated><title type='text'>Form input names with reserved words and JQuery</title><content type='html'>When you have an HTML form that contains an input field with the name of &amp;quot;action&amp;quot; or &amp;quot;submit&amp;quot; - submitting a form via javascript becomes problematic.&lt;br /&gt;&lt;br /&gt;Normally, Jquery users would simply call $(&amp;quot;#formid&amp;quot;).submit() after referencing a form. However, if your form contains an input field named &amp;quot;submit&amp;quot; (like &amp;lt;input name=&amp;quot;submit&amp;quot;&amp;gt;) then $(&amp;quot;#formid&amp;quot;).submit() does not submit the form.&lt;br /&gt;&lt;br /&gt;This is my workaround - essentially programatically clicking the submit button, instead of programatically submitting the form.&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script src=&amp;quot;jquery-1.3.2.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;$(document).ready(function() { &lt;br /&gt;    alert('action=' + $(&amp;quot;#formid&amp;quot;).attr(&amp;quot;action&amp;quot;));&lt;br /&gt;    alert('try to submit');&lt;br /&gt;    $(&amp;quot;#sneaky&amp;quot;).click();&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form action=&amp;quot;http://www.testdomain.net/actionworksok&amp;quot; id=&amp;quot;formid&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;input type=submit name=testname id=sneaky&amp;gt;&lt;br /&gt;&amp;lt;input name=action value=test1&amp;gt;&lt;br /&gt;&amp;lt;input name=submit value=test2&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-151854427877667265?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/151854427877667265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=151854427877667265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/151854427877667265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/151854427877667265'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/04/form-input-names-with-reserved-words.html' title='Form input names with reserved words and JQuery'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8548929195019570811</id><published>2009-04-06T04:41:00.003-10:00</published><updated>2009-04-13T17:50:53.644-10:00</updated><title type='text'>OWASP Podcast #15 - Interview with Brian Chess</title><content type='html'>&lt;span style="font-size:100%;"&gt;Brian Chess talks about the &lt;a href="http://www.bsi-mm.com/"&gt;Building Security In Maturity Model&lt;/a&gt; and software maturity models in general.&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #15, you can &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_15.mp3"&gt;download the mp3 file directly&lt;/a&gt;,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8548929195019570811?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8548929195019570811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8548929195019570811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8548929195019570811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8548929195019570811'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/04/owasp-podcast-15-interview-with-brian.html' title='OWASP Podcast #15 - Interview with Brian Chess'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2153392372122465046</id><published>2009-03-25T13:36:00.002-10:00</published><updated>2009-03-25T13:39:00.732-10:00</updated><title type='text'>OWASP Podcast #14 - Pravir Chandra and OpenSAMM</title><content type='html'>&lt;span style="font-size: 100%;"&gt;Pravir Chandra talks about the &lt;a href="http://www.opensamm.org/"&gt;OWASP OpenSAMM project&lt;/a&gt; and software maturity models in general. Pravir has been deep in this space for some time and even provides us with the inside scoop as to how OpenSAMM relates to BSIMM!&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #14 you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_14.mp3"&gt;download the mp3 file directly&lt;/a&gt; ,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2153392372122465046?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2153392372122465046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2153392372122465046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2153392372122465046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2153392372122465046'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/03/owasp-podcast-14-pravir-chandra-and.html' title='OWASP Podcast #14 - Pravir Chandra and OpenSAMM'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-11913568385847297</id><published>2009-03-18T17:28:00.002-10:00</published><updated>2009-03-23T14:29:48.624-10:00</updated><title type='text'>OWASP Podcast #13 - Newscast for March 09</title><content type='html'>&lt;a href="http://www.owasp.org/index.php/Podcast_13"&gt;OWASP Podcast #13&lt;/a&gt; - the OWASP newscast for Match 2009 - is now live!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Podcast_13"&gt;OWASP Podcast #13&lt;/a&gt; features Andre Gironda, Jeff Williams and Arshan Dabirsiagh. The show is hosted by me, Jim Manico. Andre did all of the extensive copy editor work.&lt;br /&gt;&lt;br /&gt;To listen to&lt;a href="http://www.owasp.org/index.php/Podcast_13"&gt; OWASP Podcast #13&lt;/a&gt; you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_13.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;,  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;, or listen right now!&lt;br /&gt;&lt;br /&gt;We cover a very wide array of web app sec news topics. I hope you enjoy the show!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Rwklb1TzS_U/ScgpY3_YOlI/AAAAAAAAAEk/y5oJ94FvC1k/s1600-h/News-clipart.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 362px;" src="http://2.bp.blogspot.com/_Rwklb1TzS_U/ScgpY3_YOlI/AAAAAAAAAEk/y5oJ94FvC1k/s400/News-clipart.jpg" alt="" id="BLOGGER_PHOTO_ID_5316544867434248786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-11913568385847297?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/11913568385847297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=11913568385847297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/11913568385847297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/11913568385847297'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/03/owasp-podcast-13-newscast-for-march-09.html' title='OWASP Podcast #13 - Newscast for March 09'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Rwklb1TzS_U/ScgpY3_YOlI/AAAAAAAAAEk/y5oJ94FvC1k/s72-c/News-clipart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3295383270129063816</id><published>2009-03-11T18:41:00.004-10:00</published><updated>2009-03-11T18:48:51.369-10:00</updated><title type='text'>OWASP Podcast #12 - Interview with Ryan C. Barnett</title><content type='html'>&lt;span style="font-size:100%;"&gt;Ryan Barnett talks about the &lt;a href="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project"&gt;OWASP ModSecurity core ruleset projec&lt;/a&gt;&lt;a href="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project"&gt;t&lt;/a&gt; and WAF technology in general.  Ryan has such incredible experience in this space - this one is definately a "must listen" for anyone who deals with web application security operations.&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #11 you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_12.mp3"&gt;download the mp3 file directly&lt;/a&gt; ,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3295383270129063816?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3295383270129063816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3295383270129063816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3295383270129063816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3295383270129063816'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/03/owasp-podcast-112-interview-with-ryan-c.html' title='OWASP Podcast #12 - Interview with Ryan C. Barnett'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8149760888346173462</id><published>2009-03-04T10:25:00.004-10:00</published><updated>2009-03-09T18:25:29.313-10:00</updated><title type='text'>OWASP Podcast #11 - Interview with Steve Christey and Bob Martin from MITRE</title><content type='html'>&lt;span style="font-size:100%;"&gt;Steve and Bob give us the "inside scoop" as to how the &lt;a href="http://cwe.mitre.org/top25/"&gt;CWE Top 25 Programming Errors&lt;/a&gt; list was created.&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #11 you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_11.mp3"&gt;download the mp3 file directly&lt;/a&gt; ,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8149760888346173462?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8149760888346173462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8149760888346173462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8149760888346173462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8149760888346173462'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/03/owasp-podcast-11-interview-with-steve.html' title='OWASP Podcast #11 - Interview with Steve Christey and Bob Martin from MITRE'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1895987146120371159</id><published>2009-03-02T16:54:00.008-10:00</published><updated>2009-03-02T17:34:01.464-10:00</updated><title type='text'>HTTPOnly Supported in Tomcat 6.0.19+</title><content type='html'>&lt;a href="http://twitter.com/planetlevel/statuses/1271935532"&gt;Jeff caught it first&lt;/a&gt;,  but the upcoming release of Tomcat 6.0.19 will include HTTPOnly session cookie suppor&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;t!&lt;br /&gt;&lt;br /&gt;This upcoming feature will be disabled by default and you will need to use the following setting to enable it.&lt;br /&gt;&lt;br /&gt;&amp;lt;Context&amp;gt;&amp;lt;Manager useHttpOnly="true" /&amp;gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;" class="status-body"&gt;&lt;span class="entry-content"&gt;&lt;context&gt;&lt;manager usehttponly="true"&gt;&lt;/manager&gt;&lt;/context&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;&lt;context&gt;&lt;/context&gt;&lt;/span&gt;&lt;/span&gt;I first blogged about this topic back in &lt;a href="http://manicode.blogspot.com/2008/03/httponly-safari-servlets-and-tomcat.html"&gt;March 27,  2008&lt;/a&gt; and submitted a patch to Apache a few days later on March 30, 2008.  It's great to know that this functionality will really exist in Tomcat 6.0.19  - which is the current "trunk" as of the posting -  and be released - when it's released. =)&lt;br /&gt;&lt;br /&gt;To quote someone from the Apache crowd: "&lt;span&gt;If you're interested in &lt;b class="highlight"&gt;getting&lt;/b&gt; the &lt;/span&gt;&lt;span&gt;next release out more quickly, perhaps you could volunteer to fix some bugs? "&lt;/span&gt; =)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Rwklb1TzS_U/SayisJjAmKI/AAAAAAAAAEc/9g4Ufikip0E/s1600-h/apache_feather.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 113px;" src="http://3.bp.blogspot.com/_Rwklb1TzS_U/SayisJjAmKI/AAAAAAAAAEc/9g4Ufikip0E/s400/apache_feather.png" alt="" id="BLOGGER_PHOTO_ID_5308796940123674786" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1895987146120371159?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1895987146120371159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1895987146120371159' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1895987146120371159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1895987146120371159'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/03/httponly-supported-in-tomcat-6019.html' title='HTTPOnly Supported in Tomcat 6.0.19+'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Rwklb1TzS_U/SayisJjAmKI/AAAAAAAAAEc/9g4Ufikip0E/s72-c/apache_feather.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-272012366999155637</id><published>2009-02-28T19:27:00.004-10:00</published><updated>2009-03-01T10:09:30.694-10:00</updated><title type='text'>OWASP Podcast #10 - an interview with Ken van Wyk</title><content type='html'>OWASP Podcast #10 - an interview with Ken van Wyk - is live!!&lt;br /&gt;&lt;br /&gt;Ken began to approach application security professionally a lot earlier than most folks. I believe his pragmatic and level-headed perspective is of value to anyone in the information security biz.&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #10 you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_10.mp3"&gt;download the mp3 file directly&lt;/a&gt; ,  &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt; or  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly through iTunes&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Rwklb1TzS_U/Saodz_mpO8I/AAAAAAAAAEU/qxGW71Q7O9o/s1600-h/page0_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 268px;" src="http://1.bp.blogspot.com/_Rwklb1TzS_U/Saodz_mpO8I/AAAAAAAAAEU/qxGW71Q7O9o/s400/page0_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5308087889893604290" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-272012366999155637?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/272012366999155637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=272012366999155637' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/272012366999155637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/272012366999155637'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/owasp-podcast-10-interview-with-ken-van.html' title='OWASP Podcast #10 - an interview with Ken van Wyk'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Rwklb1TzS_U/Saodz_mpO8I/AAAAAAAAAEU/qxGW71Q7O9o/s72-c/page0_1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8502736765991369153</id><published>2009-02-25T16:24:00.006-10:00</published><updated>2010-02-23T14:31:44.004-10:00</updated><title type='text'>Apache Tomcat HttpOnly Support Saga Continues</title><content type='html'>I see Mark Thomas from Apache still trying to get resolution on the whether to back-port the Apache Tomcat 7 HTTPOnly session-id attribution (per Java Servlet 3.0) into Tomcat 6 (a Servlet 2.5 container). The patch has been complete for well over 5 months and is still awaiting approval. What's more important here; standards or security?&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;For more info:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mail-archive.com/dev@tomcat.apache.org/msg30309.html"&gt;Recent Apache Tomcat HTTPOnly activity&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.apache.org/viewvc?view=rev&amp;amp;revision=694992"&gt;Actual Apache Tomcat HTTPOnly patch, on deck&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; HTTPOnly is now supported in at least some versions of Tomcat! &lt;a href="http://manicode.blogspot.com/2009/03/httponly-supported-in-tomcat-6019.html"&gt;http://manicode.blogspot.com/2009/03/httponly-supported-in-tomcat-6019.html&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8502736765991369153?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8502736765991369153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8502736765991369153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8502736765991369153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8502736765991369153'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/apache-tomcat-httponly-support-saga.html' title='Apache Tomcat HttpOnly Support Saga Continues'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4186099570017350182</id><published>2009-02-19T20:01:00.008-10:00</published><updated>2009-02-21T23:38:48.549-10:00</updated><title type='text'>OWASP Podcasts #8  and #9 - Newscast</title><content type='html'>Hot off the press, &lt;a href="http://www.owasp.org/index.php/OWASP_Podcast"&gt;OWASP Podcasts&lt;/a&gt; #&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_8.mp3"&gt;8&lt;/a&gt; and #&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_9.mp3"&gt;9&lt;/a&gt; are now live!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/OWASP_Podcast"&gt;OWASP Podcast&lt;/a&gt; #&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_8.mp3"&gt;8&lt;/a&gt; and #&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_8.mp3"&gt;9&lt;/a&gt; make up a 2 part Newscast featuring Andre Gironda, Jeff Williams and Arshan Dabirsiagh hosted by me, Jim Manico(de!).&lt;br /&gt;&lt;br /&gt;To listen to&lt;a href="http://www.owasp.org/index.php/Podcast_8"&gt; OWASP Podcast #8&lt;/a&gt; you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_8.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;,  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;, or listen right now!&lt;br /&gt;&lt;br /&gt;To listen to &lt;a href="http://www.owasp.org/index.php/Podcast_9"&gt;OWASP Podcast #9&lt;/a&gt; you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_9.mp3"&gt;download the mp3 file directly&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We cover a very wide array of news topics, listed &lt;a href="http://www.owasp.org/index.php/Podcast_8"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Rwklb1TzS_U/SaEbt6TG2MI/AAAAAAAAAEM/TdQglSZmNrk/s1600-h/News-clipart.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 257px; height: 231px;" src="http://1.bp.blogspot.com/_Rwklb1TzS_U/SaEbt6TG2MI/AAAAAAAAAEM/TdQglSZmNrk/s400/News-clipart.jpg" alt="" id="BLOGGER_PHOTO_ID_5305552311576615106" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4186099570017350182?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4186099570017350182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4186099570017350182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4186099570017350182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4186099570017350182'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/owasp-podcast-8-newscast-part-1.html' title='OWASP Podcasts #8  and #9 - Newscast'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Rwklb1TzS_U/SaEbt6TG2MI/AAAAAAAAAEM/TdQglSZmNrk/s72-c/News-clipart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1631787855232784216</id><published>2009-02-15T15:57:00.002-10:00</published><updated>2009-02-15T15:59:15.643-10:00</updated><title type='text'>HTTPOnly on Tomcat Update</title><content type='html'>&lt;pre wrap=""&gt;The following note was sent to the Apache Tomcat DEV community on 2/13/2009 by Mark Thomas, the Tomcat lead. This has been quite an ordeal - it's been over a year and still we are debating the HTTPOnly patch in Tomcat! *sigh*&lt;br /&gt;&lt;br /&gt;Folks,&lt;br /&gt;&lt;br /&gt;The implementation of httpOnly support in Tomcat 7 fits well with the previous&lt;br /&gt;httpOnly patch [1] that is currently the proposed backport for 6.0.x&lt;br /&gt;&lt;br /&gt;When originally proposed there was some concern that the v3 servlet spec may&lt;br /&gt;require some changes. This hasn't been the case. With that in mind could folks&lt;br /&gt;please review their comments and votes for this patch. I'd like to get it into&lt;br /&gt;6.0.19 if posible.&lt;br /&gt;&lt;br /&gt;If you still think there is room for improvement, I'm happy to take another look&lt;br /&gt;at this. Some pointers as to how you think things could/should be improved would&lt;br /&gt;be appreciated.&lt;br /&gt;&lt;br /&gt;If you do vote for this patch, please remember to indicate your preference for&lt;br /&gt;using or not using httpOnly for session cookies by default.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Mark&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1631787855232784216?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1631787855232784216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1631787855232784216' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1631787855232784216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1631787855232784216'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/httponly-on-tomcat-update.html' title='HTTPOnly on Tomcat Update'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6313340403593964920</id><published>2009-02-15T11:33:00.004-10:00</published><updated>2009-02-15T16:00:52.220-10:00</updated><title type='text'>Facebook Throttling Rate of New Friends</title><content type='html'>Take a look at this CNN TechNews article on &lt;a href="http://scitech.blogs.cnn.com/2009/02/13/are-you-a-facebook-friend-padder/"&gt;Facebook Friend padding&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This article has apparently nothing to do with AppSec. However, this paragraph caught my eye:&lt;br /&gt;&lt;br /&gt;"After (Facebook User Zorn) had sent 180 friend requests in less than an hour, an automated note from Facebook popped up on his screen warning him to stop or he’d be kicked off the site."&lt;br /&gt;&lt;br /&gt;I think is a excellent defensive coding technique from Facebook. A defensive technique like this would have stopped the &lt;a href="http://en.wikipedia.org/wiki/Samy_%28XSS%29"&gt;MySpace SAMY XSS worm&lt;/a&gt;.  Samy's worm esentially added friends to his profile so fast and frequently that it took down the global myspace cluster. This friend-adding “throttling” feature could have stopped or slowed down that attack.&lt;br /&gt;&lt;br /&gt;This feature is a wise move that will not disturb the vast majority of users. Go Facebook for your appSec excellence!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6313340403593964920?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6313340403593964920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6313340403593964920' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6313340403593964920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6313340403593964920'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/facebook-throttling-rate-of-new-friends.html' title='Facebook Throttling Rate of New Friends'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3243323515194267539</id><published>2009-02-13T02:53:00.006-10:00</published><updated>2009-02-13T03:29:25.727-10:00</updated><title type='text'>OWASP Podcast #7 Interview with Jeff Williams</title><content type='html'>We just pushed OWASP Podcast #7 - an interview with Jeff Williams - live!.&lt;br /&gt;&lt;br /&gt;We discussed Jeff's  involvement in OWASP, builders vs breakers, his work on the &lt;a href="https://www.owasp.org/index.php?title=XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet"&gt;XSS prevention cheatsheat&lt;/a&gt; and of course - &lt;a href="http://www.owasp.org/index.php/ESAPI"&gt;ESAPI&lt;/a&gt;. Jeff also directly responded to several of Gary McGraw's comments from OWASP Podcast #5 - and did not hold back any punches. This one is sure to please.&lt;br /&gt;&lt;br /&gt;To listen to OWASP Podcast #7 you can, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_7.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;,  &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;, or listen right now!&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://www.odeo.com/flash/audio_player_standard_gray.swf" quality="high" allowscriptaccess="always" wmode="transparent" type="application/x-shockwave-flash" flashvars="valid_sample_rate=true&amp;amp;external_url=http://www.owasp.org/download/jmanico/owasp_podcast_7.mp3" pluginspage="http://www.macromedia.com/go/getflashplayer" width="300" height="52"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold;"&gt;Long live the king!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Rwklb1TzS_U/SZVzLcuGAtI/AAAAAAAAAD8/w4wbfgqYAis/s1600-h/burger-king.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 231px; height: 344px;" src="http://3.bp.blogspot.com/_Rwklb1TzS_U/SZVzLcuGAtI/AAAAAAAAAD8/w4wbfgqYAis/s400/burger-king.jpg" alt="" id="BLOGGER_PHOTO_ID_5302270776823907026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Shout out to my co-producer, Kevin Coons from &lt;a href="http://www.manatribe.com/"&gt;ManaTribe&lt;/a&gt;. Keep up the good work, Kevin - we are just getting started!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3243323515194267539?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3243323515194267539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3243323515194267539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3243323515194267539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3243323515194267539'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/owasp-podcast-7-interview-with-jeff.html' title='OWASP Podcast #7 Interview with Jeff Williams'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Rwklb1TzS_U/SZVzLcuGAtI/AAAAAAAAAD8/w4wbfgqYAis/s72-c/burger-king.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3217817668771841692</id><published>2009-02-10T13:20:00.007-10:00</published><updated>2009-02-11T14:29:37.935-10:00</updated><title type='text'>Threat Classification v2 on Logic Flaws</title><content type='html'>&lt;pre  wrap="" style="font-family:arial;"&gt;MANICODE would like to say thank you to guest blogger &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Bil Corry&lt;/span&gt;&lt;/span&gt; who wrote this excellent section for the upcoming "Threat Classification v2 on Logic Flaws". I found his inclusion of recent real world examples to be fascinating!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Threat Classification v2 on Logic Flaws - Real World Examples&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;By Bil Corry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;* Yahoo had a promotional offer where if you deposited USD $30 into an advertising account, Yahoo would then add an additional USD $50 to that account.  The sign-up process was able to be circumvented in such a way that failing to deposit the requisite USD $30 still allowed the additional USD $50 to be credited to the account.&lt;br /&gt;&lt;br /&gt;Yahoo SEM Logic Flaw&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://ha.ckers.org/blog/20080616/yahoo-sem-logic-flaw/"&gt;http://ha.ckers.org/blog/20080616/yahoo-sem-logic-flaw/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Tower Records' form validation assumed that the user would fill out a form in the order presented, but in reality, some users filled out the bottom portion first, causing a bug that wasn't caught during development and resulted in the loss of sales.&lt;br /&gt;&lt;br /&gt;Tower Records Tunes Its Site&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://www.storefrontbacktalk.com/story/021005tower.php"&gt;http://www.storefrontbacktalk.com/story/021005tower.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* YouTube restricts some videos to users that are 18-years-old and older on their site. However, if the same video is embedded in another site, then the process that filters the videos is bypassed, allowing anyone of any age to view the video.&lt;br /&gt;&lt;br /&gt;Youtube’s 18+ Filters Don’t Work&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://www.darkseoprogramming.com/2008/06/01/youtubes-18-filters-dont-work/"&gt;http://www.darkseoprogramming.com/2008/06/01/youtubes-18-filters-dont-work/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Facebook restricts access to private user pages, but there have been incidences where an attacker can replace the user ID in the URL with a victim ID, thereby circumventing the security measures.  Two examples include accessing private photos and accessing private fan pages.&lt;br /&gt;&lt;br /&gt;Peekaboo! Facebook fills photo security hole&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://news.cnet.com/8301-1009_3-10042909-83.html"&gt;http://news.cnet.com/8301-1009_3-10042909-83.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hole unveils Facebook fan pages&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://news.cnet.com/8301-1009_3-10046932-83.html"&gt;http://news.cnet.com/8301-1009_3-10046932-83.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* E-trade and Schwab failed to limit one bank account to any given user, allowing an attacker to assign the same bank account to tens of thousands of users, resulting in a loss of USD $50,000.00.&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3217817668771841692?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3217817668771841692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3217817668771841692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3217817668771841692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3217817668771841692'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/threat-classification-v2-on-logic-flaws.html' title='Threat Classification v2 on Logic Flaws'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8054343407126464011</id><published>2009-02-06T09:37:00.001-10:00</published><updated>2009-02-06T09:40:09.087-10:00</updated><title type='text'>double-submit cookie CSRF defense and HTTPOnly</title><content type='html'>Let's start with reviewing the Wikipedia paragraph on this subject.&lt;br /&gt;&lt;br /&gt; &lt;i&gt;&lt;b&gt;A variation on this approach is to "double submit" cookies. If an authentication cookie is read using JavaScript before the post is made, JavaScript's stricter (and more correct) &lt;a href="http://en.wikipedia.org/wiki/Same_origin_policy" title="Same origin policy"&gt;cross-domain rules&lt;/a&gt; will be applied. If the server requires requests to contain the value of the authentication cookie in the body of POST requests or the URL of dangerous GET requests, then the request must have come from a trusted domain, since other domains are unable to read cookies from the trusting domain. On the other hand, this method forces users to enable JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;They are suggesting that you build your HTML form in a way that at the time the form is posted, javascript gets called which reads the session cookie and places that cookie in the body of the html (or part of the form post payload as a normal form element). The server would then verify that the session id is valid in both the session cookie and the html body (or form post payload). If the CSRF attack code was hosted on a different server than the victim server, this "session cookie transfer to body" code would fail due to the cross domain rules. Not an unreasonable defense!&lt;br /&gt;&lt;br /&gt; The scenario for CSRF defense would not work in the face of HTTPOnly. BUT - I can circumvent this defense by placing CSRF attack code on a cross-site that reads the cookies out of an XHR header (since they are not httponly for this defense), and adds it to the post manually. This lets an attacker circumvent double click defense!&lt;br /&gt;&lt;br /&gt; Now, as browsers handling of XHR matures, the validity of this claim gets stronger (the claim that double-click defense is good).&lt;br /&gt;&lt;br /&gt;IE lets you read cookies out of XHR request headers (that are not httponly) which would let an attacker circumvent the double-cookie defense like I described above. FireFox is vulnerable to this defense too, prior to 3.0.0.6. Starting with FireFox 3.0.0.6, cookies - any cookies - are no longer included in Firefox XHR response headers.&lt;br /&gt;&lt;br /&gt; HTTPOnly will block this defense from working, since it depends on JavaScript reading cookie in the context of the current domain.&lt;br /&gt;&lt;br /&gt; In a world where you can no longer read ANY cookies from XHR headers, AND httponly is in widespread use - I can see an argument to not use HTTPOnly depending on the risk - which is why implementers for server side products should provide options to disable HTTPOnly! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8054343407126464011?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8054343407126464011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8054343407126464011' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8054343407126464011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8054343407126464011'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/double-submit-cookie-csrf-defense-and.html' title='double-submit cookie CSRF defense and HTTPOnly'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-302848520535283909</id><published>2009-02-04T11:15:00.007-10:00</published><updated>2009-02-04T11:56:17.183-10:00</updated><title type='text'>FireFox 3.0.0.6 HTTPOnly Champion!</title><content type='html'>FireFox 3.0.0.6 is truly an HTTPOnly champion!&lt;br /&gt;&lt;br /&gt;I want to extend sincere congratulations the the entire Mozilla team. For the first time in history, a browser has been released that completely supports the HTTPOnly cookie flag, including protection against leakage of HTTPOnly cookies via XHR response headers.&lt;br /&gt;&lt;br /&gt;The JavaScript document.cookie call has been blocked for HTTPOnly cookies since FireFox 2.0.0.6. The problem that delayed true comprehensive HTTPOnly support in FireFox, as &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380418"&gt;described by the bug entry&lt;/a&gt; states: "XMLHttpRequest subverts the idea of HTTPOnly cookies since it allows sending a&lt;span style="font-family:monospace;"&gt; &lt;/span&gt;request and reading of Set-Cookie or Set-Cookie2 headers in the response - even if it has&lt;span style="font-family:monospace;"&gt; &lt;/span&gt;HTTPOnly flag set."&lt;br /&gt;&lt;br /&gt;IE 7/8 is very close to complete HTTPOnly support. When we test IE 7.0.5730.13 against &lt;a href="http://ha.ckers.org/httponly.cgi"&gt;http://ha.ckers.org/httponly.cgi&lt;/a&gt; - the result is set-cookie2 leakage. At least set-cookie is not leaked. (Note that even though IE exposes a set-cookie call below, it was a non-httponly cookie, so the exposure is reasonable.)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Rwklb1TzS_U/SYoIGBKvH2I/AAAAAAAAADs/nsKtOqT91nw/s1600-h/ie.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 363px; height: 223px;" src="http://4.bp.blogspot.com/_Rwklb1TzS_U/SYoIGBKvH2I/AAAAAAAAADs/nsKtOqT91nw/s400/ie.jpg" alt="" id="BLOGGER_PHOTO_ID_5299056811040513890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But look at the test results of FireFox 3.0.0.6 - ALL SET COOKIE(2) CALLS ARE REMOVED! Even non HTTPOnly cookies are now removed from the XHR request headers!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Rwklb1TzS_U/SYoIxE2p-OI/AAAAAAAAAD0/qgvUobsQvQ4/s1600-h/ff.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 326px; height: 200px;" src="http://2.bp.blogspot.com/_Rwklb1TzS_U/SYoIxE2p-OI/AAAAAAAAAD0/qgvUobsQvQ4/s400/ff.jpg" alt="" id="BLOGGER_PHOTO_ID_5299057550764407010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sincere congratulations the the entire Mozilla team. I applaud your dedication to web application security excellence!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-302848520535283909?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/302848520535283909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=302848520535283909' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/302848520535283909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/302848520535283909'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/firefox-3006-httponly-champion.html' title='FireFox 3.0.0.6 HTTPOnly Champion!'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Rwklb1TzS_U/SYoIGBKvH2I/AAAAAAAAADs/nsKtOqT91nw/s72-c/ie.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6787419227339497829</id><published>2009-02-02T09:50:00.002-10:00</published><updated>2009-02-02T09:57:13.402-10:00</updated><title type='text'>Servlet Containers and HTTPOnly support</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Oracle (acquired BEA Jan 08) Weblogic is not playing ball at all: &lt;a href="http://coding-insecurity.blogspot.com/2008/12/oracle-just-doesn-get-it.html"&gt;http://coding-insecurity.blogspot.com/2008/12/oracle-just-doesn-get-it.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apache Tomcat JSESSIONID Cookie: A developer submitted a patch to Apache Tomcat, which is close to going live in Tomcat 7 for sure soon (aiming to be a 3.0 servlet container). The core developers are voting to decide on whether to include HTTPOnly support for Tomcat 5/6 right now. &lt;a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=44382"&gt;https://issues.apache.org/bugzilla/show_bug.cgi?id=44382&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IBM Websphere: (Sept 08) "WebSphere Application Server has been modified to properly recognize, accept and process HTTP-Only cookies. This support is targeted for fixpacks 6.0.2.21 and 6.1.0.11. Please review the recommended updates page at &lt;a href="http://www-1.ibm.com/support/docview.wss?rs=180&amp;amp;uid=swg27004980"&gt;http://www-1.ibm.com/support/docview.wss?rs=180&amp;amp;uid=swg27004980&lt;/a&gt;  for more information."&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:black;"   &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6787419227339497829?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6787419227339497829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6787419227339497829' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6787419227339497829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6787419227339497829'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/02/servlet-containers-and-httponly-support.html' title='Servlet Containers and HTTPOnly support'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2629685695999374393</id><published>2009-01-26T00:45:00.006-10:00</published><updated>2009-01-26T02:05:11.669-10:00</updated><title type='text'>OWASP Podcast #5 - Interview with Gary McGraw</title><content type='html'>I just finished updating the OWASP Podcast series &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;RSS&lt;/a&gt;/&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;iTunes&lt;/a&gt; &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;feed&lt;/a&gt; to include OWASP Podcast #5 - an interview with Gary McGraw! You can &lt;a href="https://www.owasp.org/index.php/Podcast_5"&gt;read the show notes here&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_5.mp3"&gt;download the mp3 file directly here&lt;/a&gt;, or &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the OWASP Podcast series RSS Feed here&lt;/a&gt;. If you use the iTunes podcast management feature, you can&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt; subscribe to the OWASP Podcast series via iTunes here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The podcast starts with a 30 second introduction from the song "To You Right Now" off the album &lt;a href="http://www.wheresaubrey.com/100feetabovetheground/"&gt;&lt;span style="font-style: italic;"&gt;100 Feet Above the Ground&lt;/span&gt;&lt;/a&gt;. Gary performed the mandolin, fiddle, sang backup vocals and produced this album.&lt;br /&gt;&lt;br /&gt;Gary did not shy away from any difficult questions in this interview. In fact, he encouraged them. I was very impressed with Gary's courage to dive into controversy - as well as cause it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2629685695999374393?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2629685695999374393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2629685695999374393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2629685695999374393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2629685695999374393'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/01/owasp-podcast-5-interview-with-gary.html' title='OWASP Podcast #5 - Interview with Gary McGraw'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8803237276711709246</id><published>2009-01-22T22:13:00.002-10:00</published><updated>2009-01-22T22:32:17.760-10:00</updated><title type='text'>Browser HTTPOnly Support Update</title><content type='html'>If you update your Windows OS with the the MSXML Core Services patch  &lt;a href="http://www.microsoft.com/technet/security/bulletin/ms08-069.mspx"&gt;MS08-069&lt;/a&gt; then IE 8 Beta 2 and IE 7 will prevent HTTPOnly cookies from being read by XMLHTTPRequest headers (set-cookie headers only) within IE. As of this writing, IE 8 Beta 2 and IE 7 are the only browsers that truly stop HTTPOnly set-cookie leakage in XMLHTTPRequest  headers. &lt;span style="font-weight: bold;"&gt;However,  IE 8 Beta 2 and IE 7 are not the HTTPOnly-support winners, yet.&lt;/span&gt;  IE 8 beta 2 and IE 7 with MS08-069 &lt;span style="font-weight: bold; font-style: italic;"&gt;still leaks set-cookie2&lt;/span&gt; HTTPOnly cookies in XMLHTTPRequest  headers!&lt;br /&gt;&lt;br /&gt;FireFox is on track to fix this obscure vector, completely. The FireFox patch for  XMLHTTPRequest HTTPOnly protected &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380418"&gt;is marked RESOLVED FIXED and will go live shortly&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Even Safari/Chrome will also see complete set-cookie/set-cookie2 XMLHTTPRequest exposure protection shortly - &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=10957"&gt;the patch is complete as of 12/21/08&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Final really obscure note, the &lt;span style="font-weight: bold;"&gt;OWASP WEBGOAT HTTPOnly lab is broken&lt;/span&gt; and does not show IE 8 Beta 2 and IE 7 with ms08-069 as complete in terms of HTTPOnly protection. However, &lt;a href="http://ha.ckers.org/httponly.cgi"&gt;Robert Hansens' HTTPOnly test page&lt;/a&gt; now includes set-cookie and set-cookie2 checks for XMLHTTPRequest exposure and should be used until OWASP fixes &lt;a href="http://code.google.com/p/webgoat/issues/detail?id=18"&gt;http://code.google.com/p/webgoat/issues/detail?id=18&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;And most importantly, I updated the&lt;a href="https://www.owasp.org/index.php/HTTPOnly#Browsers_Supporting_HTTPOnly"&gt; OWASP HTTPOnly&lt;/a&gt; page to reflect this information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8803237276711709246?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8803237276711709246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8803237276711709246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8803237276711709246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8803237276711709246'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/01/browser-httponly-support-update.html' title='Browser HTTPOnly Support Update'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3088497637571705345</id><published>2009-01-20T12:03:00.000-10:00</published><updated>2009-01-20T12:09:25.690-10:00</updated><title type='text'>OWASP Podcast #4 - Developers Guide</title><content type='html'>I just finished publishing OWASP Podcast #4 - an interview with Andrew van der Stock - over the status and future of the &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Guide_Project"&gt;OWASP Developers Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can check out the &lt;a href="https://www.owasp.org/index.php/Podcast_4"&gt;show notes&lt;/a&gt; for OWASP Podcast #4, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_4.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;, or &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I 'm really exited to see what Andrew does in the upcoming revision to the OWASP Developers guide.  This key OWASP reference is key for all of the "builders" out there is sure to raise the bar and contribute significantly to achieve industry-wide application security excellence. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3088497637571705345?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3088497637571705345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3088497637571705345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3088497637571705345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3088497637571705345'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/01/owasp-podcast-4-developers-guide.html' title='OWASP Podcast #4 - Developers Guide'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-143226040919323837</id><published>2009-01-07T01:32:00.000-10:00</published><updated>2009-01-07T01:38:03.317-10:00</updated><title type='text'>OWASP Podcast #3 - Live CD</title><content type='html'>I just finished publishing OWASP Podcast #3 - an interview with Matt Tesauro.&lt;br /&gt;&lt;br /&gt;Matt is the OWASP Live CD Project lead. He's also a member of the &lt;a href="https://www.owasp.org/index.php/Global_Projects_and_Tools_Committee" title="Global Projects and Tools Committee"&gt;Global Project and Tools Committee&lt;/a&gt;.  His interview is about the OWASP Live CD Project history, status and future.&lt;br /&gt;&lt;br /&gt;You can check out the &lt;a href="https://www.owasp.org/index.php/Podcast_3"&gt;show notes&lt;/a&gt; for OWASP Podcast #3, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_3.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;, or &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I found Matt to be a very motivated and inspired quartermaster for OWASP. I'm certain he will continue to grow the OWASP Live CD project and I look forward to hearing about his progress in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-143226040919323837?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/143226040919323837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=143226040919323837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/143226040919323837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/143226040919323837'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2009/01/owasp-podcast-3-live-cd.html' title='OWASP Podcast #3 - Live CD'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3170641372311546324</id><published>2008-12-29T12:40:00.000-10:00</published><updated>2008-12-29T12:48:36.088-10:00</updated><title type='text'>OWASP Podcast #2 Securing Webgoat with ModSecurity</title><content type='html'>I just finished publishing OWASP Podcast #2 - an interview with Stephen Craig Evans.&lt;br /&gt;&lt;br /&gt;We discussed Stephen's OWASP Summer of Code Project, &lt;a href="https://www.owasp.org/index.php/OWASP_Securing_WebGoat_using_ModSecurity_Project"&gt;Securing Webgoat with Mod Security&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can check out the &lt;a href="https://www.owasp.org/index.php/Podcast_2"&gt;show notes&lt;/a&gt; for OWASP Podcast #2, &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_2.mp3"&gt;download the mp3 file directly&lt;/a&gt;, &lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;subscribe to the RSS feed&lt;/a&gt;, or &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012"&gt;subscribe directly to iTunes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I found Stephen to be very interesting in his analysis of when WAF deployment is prudent.  Although WAF deployment is something I personally think of as a last resort, intelligent discussion and arguments like I heard from Stephen make it tougher for me to dismiss WAF technology outright. Great job, Stephen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3170641372311546324?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3170641372311546324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3170641372311546324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3170641372311546324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3170641372311546324'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/owasp-podcast-2-securing-webgoat-with.html' title='OWASP Podcast #2 Securing Webgoat with ModSecurity'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4759576237383053139</id><published>2008-12-21T02:36:00.000-10:00</published><updated>2008-12-21T23:26:30.694-10:00</updated><title type='text'>HTTPOnly XMLHTTPRequest  exposure update</title><content type='html'>The HTTPOnly crusade grows stronger.&lt;br /&gt;&lt;br /&gt;I have victories to report on several fronts regarding the adoption of HTTPOnly, to the point of stopping XMLHTTPRequest.getAllResponseHeaders leakage of HTTPOnly cookies.&lt;br /&gt;&lt;br /&gt;The HTTPOnly world was &lt;span style="font-style: italic;"&gt;rocked &lt;/span&gt;in the Summer of 2007 when the famous HTTPOnly test url at &lt;a href="http://ha.ckers.org/httponly.cgi"&gt;http://ha.ckers.org/httponly.cgi&lt;/a&gt;  demonstrated that HTTPOnly cookies could be exposed via the JavaScript XMLHTTPRequest (XHR) object through the getAllResponseHeaders function which includes HTTP headers that contain set-cookie headers - even for HTTPOnly cookies.&lt;br /&gt;&lt;br /&gt;So even though HTTPOnly cookies stopped JavaScript calls like document.cookie, they did not stop advanced XSS techniques like &lt;a href="http://insanesecurity.wordpress.com/2007/08/01/httponly-vs-xmlhttprequest/"&gt;http://insanesecurity.wordpress.com/2007/08/01/httponly-vs-xmlhttprequest/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The latest and greatest browsers and standards address this issue.&lt;br /&gt;&lt;br /&gt;First out the gate, is Internet Explorer. My HTTPOnly hat's off to Microsoft for delivering the first browser to implement defense from the HTTPOnly exposure vector described above. &lt;a href="http://www.microsoft.com/technet/security/bulletin/ms08-069.mspx"&gt;http://www.microsoft.com/technet/security/bulletin/ms08-069.mspx &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, IE did NOT implement protection from set-cookie2 header exposure!! The horror!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;I still declare the HTTPOnly browser war active!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Will &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380418"&gt;FireFox deliver the first browser to truly implement complete HTTPOnly&lt;/a&gt; in a way that would make the &lt;a href="http://docs.google.com/View?docid=dxxqgkd_0cvcqhsdw"&gt;HTTPOnly working group&lt;/a&gt; pleased? Could Opera, Safari or Chrome sneak in with a win?&lt;br /&gt;&lt;br /&gt;As I mentioned in an &lt;a href="http://manicode.blogspot.com/2008/12/xmlhttprequest-will-be-more-secure-in.html"&gt;earlier post&lt;/a&gt;, some of the &lt;a href="http://dev.w3.org/2006/webapi/XMLHttpRequest/"&gt;recent editorial version of the XHR specificatio&lt;/a&gt;n at w3c includes clear verbiage that prevents reading of &lt;span style="font-weight: bold;"&gt;ALL &lt;/span&gt;set-cookie/2 headers via getAllResponseHeaders() and getResponseHeader() in a case insensitive way. Nice!&lt;br /&gt;&lt;br /&gt;It's the securing of these core RFC's that help make the applications and browsers of tomorrow more secure. Thanks Anne!&lt;br /&gt;&lt;br /&gt;PS: As a HTTPOnly bonus, check out Ryan Barnett's blog post on how to add &lt;a href="http://blog.modsecurity.org/2008/12/helping-protect-cookies-with-httponly-flag.html"&gt;HTTPOnly protection using ModSecurity&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4759576237383053139?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4759576237383053139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4759576237383053139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4759576237383053139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4759576237383053139'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/httponly-xmlhttprequest-exposure-update.html' title='HTTPOnly XMLHTTPRequest  exposure update'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4276722604954912990</id><published>2008-12-16T15:16:00.000-10:00</published><updated>2008-12-16T15:17:43.375-10:00</updated><title type='text'>How to restart Tomcat properly</title><content type='html'>&lt;div class="chat in"&gt; &lt;div class="msg 1st"&gt;&lt;span class="salutation"&gt;&lt;span style="font-weight: bold;"&gt;David:&lt;/span&gt; &lt;/span&gt;hmm, i get no cancel confirmation&lt;/div&gt; &lt;/div&gt;  &lt;div class="chat out"&gt; &lt;div class="msg 1st"&gt; &lt;div class="icon"&gt; &lt;/div&gt;&lt;span class="salutation"&gt;&lt;span style="font-weight: bold;"&gt;James:&lt;/span&gt; &lt;/span&gt;update all code&lt;/div&gt; &lt;div class="msg Nth"&gt;then refresh&lt;/div&gt; &lt;div class="msg Nth"&gt;then project-clean&lt;/div&gt; &lt;div class="msg Nth"&gt;sacrifice 2 chickens&lt;/div&gt; &lt;div class="msg Nth"&gt;reload tomcat&lt;br /&gt;&lt;/div&gt; &lt;div class="msg Nth"&gt;sacrifice a goat&lt;/div&gt; &lt;div class="msg Nth"&gt;then you should be ok&lt;/div&gt; &lt;/div&gt;  &lt;div class="chat in"&gt; &lt;div class="msg 1st"&gt; &lt;div class="icon"&gt; &lt;/div&gt;&lt;span class="salutation"&gt;&lt;span style="font-weight: bold;"&gt;David:&lt;/span&gt; &lt;/span&gt;ok, i forgot the goat&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4276722604954912990?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4276722604954912990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4276722604954912990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4276722604954912990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4276722604954912990'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/how-to-restart-tomcat-properly.html' title='How to restart Tomcat properly'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-5599893368564321681</id><published>2008-12-15T15:47:00.001-10:00</published><updated>2008-12-15T18:08:14.981-10:00</updated><title type='text'>OWASP Podcast #1</title><content type='html'>I am very pleased to announce the inception of the OWASP Podcast series.&lt;br /&gt;&lt;br /&gt;OWASP Podcast #1 was recorded on November 21, 2008. The guest panel includes Jeff Williams, Arshan Dabirsiaghi, Jeremiah Grossman and your host, Jim Manico.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_1.mp3"&gt;You can download OWASP Podcast #1 here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.owasp.org/index.php/Podcast_1"&gt;You can read the show notes here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;You can subscribe rss/itunes/feedburner here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thank you, very much, to all participants and listeners.  Please pass the word!&lt;br /&gt;&lt;br /&gt;This is only the beginning. My hope is that the OWASP podcast series serves the community well.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-5599893368564321681?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/5599893368564321681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=5599893368564321681' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5599893368564321681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5599893368564321681'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/owasp-podcast-1.html' title='OWASP Podcast #1'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4588837965185798855</id><published>2008-12-11T19:58:00.001-10:00</published><updated>2008-12-15T00:45:55.274-10:00</updated><title type='text'>XMLHttpRequest will be more secure in the future</title><content type='html'>Some of the most recent iterations of the XHR specification at w3c (edited by &lt;a href="http://annevankesteren.nl/"&gt;Anne van Kesteren&lt;/a&gt;) includes excellent security choices which will lock down the JavaScript HTTPOnly edge-case exposure vectors.&lt;br /&gt;&lt;br /&gt;The latest editorial draft of the XHR w3c spec &lt;a href="http://dev.w3.org/2006/webapi/XMLHttpRequest/"&gt;http://dev.w3.org/2006/webapi/XMLHttpRequest/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;•    prevents creating set-cookie/2 headers via setRequestHeader() in a case insensitive way. (but XHR is free to send Cookie/2 headers for any existing cookie (HTTPOnly or otherwise).&lt;br /&gt;•    prevents reading set-cookie/2 headers via getAllResponseHeaders() and getResponseHeader() in a case insensitive way.&lt;br /&gt;&lt;br /&gt;Excerpts from the spec:&lt;br /&gt;&lt;br /&gt;getAllResponseHeaders(), method….&lt;br /&gt;Return all the HTTP headers, excluding headers that case-insensitively match Set-Cookie or Set-Cookie2, as a single string, with each header line separated by a U+000D CR U+000A LF pair excluding the status line, and with each header name and header value separated by a U+003A COLON U+0020 SPACE pair.&lt;br /&gt;&lt;br /&gt;setRequestHeader(header, value), method&lt;br /&gt;For security reasons, these steps should be terminated if the header argument case-insensitively matches one of the following headers:&lt;br /&gt;•    Accept-Charset&lt;br /&gt;•    Accept-Encoding&lt;br /&gt;•    Authorization&lt;br /&gt;•    Connection&lt;br /&gt;•    Content-Length&lt;br /&gt;•    Cookie&lt;br /&gt;•    Cookie2&lt;br /&gt;•    Content-Transfer-Encoding&lt;br /&gt;•    Date&lt;br /&gt;•    Expect&lt;br /&gt;•    Host&lt;br /&gt;•    Keep-Alive&lt;br /&gt;•    Referer&lt;br /&gt;•    TE&lt;br /&gt;•    Trailer&lt;br /&gt;•    Transfer-Encoding&lt;br /&gt;•    Upgrade&lt;br /&gt;•    User-Agent&lt;br /&gt;•    Via&lt;br /&gt;&lt;br /&gt;I’m excited to see this key specification move in such a secure direction!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4588837965185798855?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4588837965185798855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4588837965185798855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4588837965185798855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4588837965185798855'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/xmlhttprequest-will-be-more-secure-in.html' title='XMLHttpRequest will be more secure in the future'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8627757244029420464</id><published>2008-12-06T15:50:00.000-10:00</published><updated>2008-12-06T16:02:37.539-10:00</updated><title type='text'>Java and UTF-8 Shortest Form</title><content type='html'>&lt;div  style="font-weight: bold; color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-weight: normal;"&gt;Java 6 update 11 contained an interesting change to UTF-8 handling that I think is worth noting.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Here is the original JRE bug:&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;4486841 UTF-8 decoder should adhere to corrigendum to Unicode 3.0.1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;div  style="color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Here is the impact of the problem&lt;/span&gt;&lt;br /&gt;The UTF-8 (Unicode Transformation Format-8) decoder in the Java Runtime Environment (JRE) accepts encodings that are longer than the "shortest" form. This behavior is not a vulnerability in Java SE. &lt;span style="font-style: italic;"&gt;However, it may be leveraged to exploit systems running software that relies on the JRE UTF-8 decoder to reject non-shortest form sequences. For example, non-shortest form sequences may be decoded into illegal URIs, which may then allow files that are not otherwise accessible to be read, if the URIs are not checked following UTF-8 decoding.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div  style="font-weight: bold; color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-size:100%;"&gt;The solution is to flat out reject anything other than shortest-form UTF-8 per &lt;a href="http://unicode.org/versions/corrigendum1.html"&gt;http://unicode.org/versions/corrigendum1.html&lt;/a&gt; which  has been around since - March 2001??&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;  &lt;div  style="color: rgb(204, 204, 204);font-family:arial;" dir="ltr"&gt;&lt;span style="font-size:100%;"&gt; &lt;ul&gt;&lt;li&gt;In UTF-8, &lt;004d&gt; is serialized as &lt;4d&gt;.  &lt;/li&gt;&lt;li&gt;&lt;u&gt;The problematic "non-shortest form" byte sequences in UTF-8 were those  where BMP characters could be represented in more than one way. These sequences  are illegal...&lt;/u&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8627757244029420464?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8627757244029420464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8627757244029420464' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8627757244029420464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8627757244029420464'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/12/java-and-utf-8-shortest-form.html' title='Java and UTF-8 Shortest Form'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3492906097049197566</id><published>2008-08-26T10:47:00.000-10:00</published><updated>2008-08-26T10:57:01.104-10:00</updated><title type='text'>HttpOnly in Tomcat, almost?</title><content type='html'>Ah, I saw a post from one of the Tomcat leads hinting that we might see HttpOnly support in Tomcat soon....&lt;br /&gt;&lt;br /&gt;&lt;a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=45632"&gt;https://issues.apache.org/bugzilla/show_bug.cgi?id=45632&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's been 5 months since my original Tomcat HttpOnly post and patch at &lt;a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=44382"&gt;https://issues.apache.org/bugzilla/show_bug.cgi?id=44382&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No word on Webkit/Safari. &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=10957"&gt;https://bugs.webkit.org/show_bug.cgi?id=10957&lt;/a&gt; Also no word from Opera about complete HttpOnly protection. I'll start making more noise soon.&lt;br /&gt;&lt;br /&gt;The HttpOnly crusade, quietly,  does continue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3492906097049197566?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3492906097049197566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3492906097049197566' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3492906097049197566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3492906097049197566'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/08/httponly-in-tomcat-almost.html' title='HttpOnly in Tomcat, almost?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7859533200658019573</id><published>2008-08-15T15:03:00.001-10:00</published><updated>2009-12-18T18:09:33.117-10:00</updated><title type='text'>Input Validation with ESAPI - Very Important</title><content type='html'>I just committed a new concrete class into the &lt;a href="http://www.esapi.org/"&gt;ESAPI&lt;/a&gt; core called &lt;a href="http://owasp-esapi-java.googlecode.com/svn/trunk/src/org/owasp/esapi/ValidationErrorList.java"&gt;org.owasp.esapi.ValidationErrorList&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ValidationErrorList &lt;/span&gt;will allow you to attempt groups of validation checks in a non blocking way.&lt;br /&gt;&lt;br /&gt;I also added a variant of many &lt;span style="font-family:courier new;"&gt;org.owasp.esapi.Validator&lt;/span&gt; functions that will accept a &lt;span style="font-family:courier new;"&gt;ValidationErrorLis&lt;/span&gt;t as an argument instead of throwing a ValidaitonException.  These &lt;span style="font-family:courier new;"&gt;ValidationErrorList &lt;/span&gt;variants will populate the &lt;span style="font-family:courier new;"&gt;ValidationErrorList &lt;/span&gt;with the &lt;span style="font-family:courier new;"&gt;ValidationException&lt;/span&gt;, hashed by the context.&lt;br /&gt;&lt;br /&gt;To actually submit and collect errors for an entire validation group, your controller code would look something like:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;b style="font-family: courier new;"&gt;ValidationErrorList() errorList = new ValidationErrorList();.&lt;br /&gt;String name  = getValidInput("Name", form.getName(), "SomeESAPIRegExName1", 255, false, errorList);&lt;br /&gt;String address = getValidInput("Address", form.getAddress(), "SomeESAPIRegExName2", 255, false, errorList);&lt;br /&gt;Integer weight = getValidInteger("Weight", form.getWeight(), 1, 1000000000, false, errorList);&lt;br /&gt;Integer sortOrder = getValidInteger("Sort Order", form.getSortOrder(), -100000, +100000, false, errorList);&lt;br /&gt;request.setAttribute(errorList , "ERROR_LIST");&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then later in your view layer, you would be able to display all  of error messages via a helper function like:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"&gt;&lt;b&gt;public static ValidationErrorList getErrors() {      &lt;br /&gt;HttpServletRequest request = ESAPI.httpUtilities().getCurrentRequest();&lt;br /&gt;ValidationErrorList errors = new ValidationErrorList();&lt;br /&gt; if (request.getAttribute(Constants.ERROR_LIST) != null) {&lt;br /&gt;   errors = (ValidationErrorList)request.getAttribute("ERROR_LIST");&lt;br /&gt;    }&lt;br /&gt;    return errors;&lt;br /&gt;}&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And even check if a specific UI component is in error via calls like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;errorList.getError("Name");&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7859533200658019573?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7859533200658019573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7859533200658019573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7859533200658019573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7859533200658019573'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/08/input-validation-with-esapi.html' title='Input Validation with ESAPI - Very Important'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-5619549064419432791</id><published>2008-08-10T15:38:00.000-10:00</published><updated>2008-08-10T16:08:18.162-10:00</updated><title type='text'>Input Validation - Not That Important</title><content type='html'>When I bring up almost any category of &lt;a href="http://www.owasp.org/index.php/Top_10_2007-A2"&gt;web application injection attacks&lt;/a&gt;, most folks in the field almost instinctively begin talking about "input validation". Sure, input validation is important when it comes to detecting certain attacks, but encoding of user-driven data (either before you present that data to another user, or before you use that data to access various services) is actually a great deal more important for truly stopping almost any class of web application injection attack.&lt;br /&gt;&lt;br /&gt;The Java variant of &lt;a href="http://www.owasp.org/index.php/ESAPI"&gt;ESAPI &lt;/a&gt;has a wide variety of encoding functions depending on the need (called easily via ESAPI.encoder()).&lt;br /&gt;&lt;br /&gt;Some of these include:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//when user-driven data is used&lt;br /&gt;//as a javascript variable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForJavascript(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//used when presenting &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;user-driven&lt;br /&gt;//&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;data inside of an HTML tag&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForHTMLAttribute(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//used for presenting user-driven&lt;br /&gt;//data inside of an HTML body&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForHTML(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//used then presenting data&lt;br /&gt;//as a vbscript variable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForVBScript(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//used when accessing LDAP services&lt;br /&gt;//with user-driven data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForLDAP(String input);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForDN(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//XML centric encoding operations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForXPath(String input);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForXML(String input);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForXMLAttribute(String input);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//used when placing user-driven&lt;br /&gt;//data within a url&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String encodeForURL(String input) throws EncodingException;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While input validation is still crucial for a defense-in-depth application security coding practice; it's truly the encoding of user data that becomes your final and most important line of defense against XSS, SQL Injection (PreparedStements and binding of variables actually encoding user-driven data specific to each database vendor via the Java JDBC driver), LDAP injection, or any other class of &lt;a href="http://www.owasp.org/index.php/Top_10_2007-A2"&gt;injection attack&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-5619549064419432791?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/5619549064419432791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=5619549064419432791' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5619549064419432791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5619549064419432791'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/08/input-validation-not-that-important.html' title='Input Validation - Not That Important'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2317401524147725220</id><published>2008-06-27T12:22:00.000-10:00</published><updated>2008-08-10T15:36:31.769-10:00</updated><title type='text'>Getting Started with Java Web Application Security</title><content type='html'>Some in the WAF world have conjectured recently that web application security coding practices are difficult.  I am starting to believe Jeff Williams - that secure coding practices - especially when using a toolkit like ESAPI -  is actually a great deal CHEAPER and EASIER than not writing code securely in the first place.&lt;br /&gt;&lt;br /&gt;Here is my "hit list" of coding security practices that can be &lt;span style="font-weight: bold; font-style: italic;"&gt;easily &lt;/span&gt;integrated into any agile software development process:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure ALL data that is user driven is run through output encoding to render  (at least) XSS attacks inert – ESAPI.org has a version of that function that is good to use http://www.owasp.org/index.php/ESAPI - or just use this function http://www.owasp.org/index.php/How_to_perform_HTML_entity_encoding_in_Java&lt;/li&gt;&lt;li&gt;Make sure ALL user data is run through strong input validation, ESAPI.org also has a strong validation set of functions that handles double-encoding protection and canonicalization - in additional to configurable regular expressions.&lt;/li&gt;&lt;li&gt;Look out for Session Fixation problems in Java http://www.owasp.org/index.php/Session_Fixation_in_Java&lt;/li&gt;&lt;li&gt;Look out for SQL injection problems in Java (All database access must be through Hibernate, or the Java PreparedStatement class with proper binding of all variables.     String selectStatement = "SELECT * FROM User WHERE userId = ? ";PreparedStatement prepStmt = con.prepareStatement(selectStatement);prepStmt.setString(1, userId);ResultSet rs = prepStmt.executeQuery();&lt;/li&gt;&lt;li&gt;Audit access control carefully across every page. Use an access control grid to document access control across all functions and have a manger sign off on that artifact.&lt;/li&gt;&lt;li&gt;JSP’s should never be accessible via a public directory like www.somesite.com/program.jsp - they should always be placed in a private non-accessible directory to be accessed and streamed to the user via a servlet. JSP parameter tampering is to easy. If your development team uses emacs to edit code, make sure files like www.somesite.com/program.jsp~ are not deployed - it will give an attacker easy access to the source code&lt;/li&gt;&lt;li&gt;Make sure the servlet container is hardened. Here is a decent guide to Tomcat hardening http://www.owasp.org/index.php/Securing_tomcat&lt;/li&gt;&lt;li&gt;Remove all default, management or demo code that comes with any servlet container -  it’s almost always insecure.&lt;/li&gt;&lt;/ol&gt;Coding your application securely is ALWAYS better protection than depending on a WAF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2317401524147725220?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2317401524147725220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2317401524147725220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2317401524147725220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2317401524147725220'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/06/getting-started-with-java-web.html' title='Getting Started with Java Web Application Security'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7364534027412614961</id><published>2008-06-15T22:37:00.000-10:00</published><updated>2008-06-16T07:29:05.318-10:00</updated><title type='text'>Opera 9.5 HttpOnly Read Prevention</title><content type='html'>Opera 9.50 is now available for download at &lt;a href="http://www.opera.com/"&gt;http://www.opera.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Although the &lt;a href="http://www.opera.com/docs/changelogs/windows/950/#security"&gt;official release documentation did not mention it&lt;/a&gt;, Opera 9.50 does indeed include the most basic form of HttpOnly support - HttpOnly cookie read prevention. The following results are from Opera 9.50 on Vista Ultimate. I tested using the WebGoat v5.1 HttpOnly test page at /WebGoat/attack?Screen=176&amp;amp;menu=51.&lt;br /&gt;&lt;br /&gt;And here are the official results:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-size:85%;" &gt;Results:&lt;br /&gt;* SUCCESS: Your browser enforced the HTTPOnly flag properly for the 'unique2u' cookie by preventing direct client side read access to this cookie.&lt;br /&gt;* FAILURE: Your browser did not enforce the write protection property of the HTTPOnly flag for the 'unique2u' cookie.&lt;br /&gt;* The unique2u cookie was successfully modified to se/M3Lw5Ia4cMyKIUAJrbz23Ibo= on the client side.&lt;br /&gt;* FAILURE: Your browser does not prevent an XMLHTTPRequest read for the 'unique2u' cookie.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is obviously not perfect support; we should at least see HttpOnly write prevention. Current versions of IE 6/7 and FireFox 2/3 all include both HttpOnly cookie read and write prevention per &lt;a href="https://www.owasp.org/index.php/HTTPOnly#Browsers_Supporting_HTTPOnly"&gt;OWASP's HttpOnly browser support section&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, this is still another victory for HttpOnly crusaders and Web Application Security. I'll be sure to post a bug on Opera's support site requesting complete support.&lt;br /&gt;&lt;br /&gt;And don't forget to vote for the Firefox "XMLHttpRequest allows reading HTTPOnly cookies" bug at  &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380418"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=380418&lt;/a&gt; so we can have at least one browser with complete HttpOnly support!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7364534027412614961?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7364534027412614961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7364534027412614961' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7364534027412614961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7364534027412614961'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/06/opera-95-httponly-read-prevention.html' title='Opera 9.5 HttpOnly Read Prevention'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1100776397691170193</id><published>2008-05-22T09:44:00.000-10:00</published><updated>2008-05-23T08:35:10.609-10:00</updated><title type='text'>HttpOnly Crusade Update</title><content type='html'>I would like to report 2 exciting victories regarding the ongoing HttpOnly crusade!&lt;br /&gt;&lt;br /&gt;1) The underlying network library used for Safari - the Qt C++ library - particularly the QNetworkCookie class - has finished adding HttpOnly support!  See &lt;a href="http://trolltech.com/developer/task-tracker/index_html?id=206125&amp;amp;method=entry"&gt;http://trolltech.com/developer/task-tracker/index_html?id=206125&amp;amp;method=entry&lt;/a&gt; for more information on the specific bug. My undercover Safari developer resource tells me that Safari is soon to follow with full HttpOnly support in both the Windows and OSX versions!&lt;br /&gt;&lt;br /&gt;2) The latest version of the &lt;a href="http://jcp.org/en/jsr/detail?id=315"&gt;Servlet 3.0 specification (JSR 315)&lt;/a&gt; has added HttpOnly support to both the Cookie and SessionCookieConfig classes. You can download  the JavaDoc &lt;a href="http://jcp.org/aboutJava/communityprocess/edr/jsr315/index.html"&gt;here&lt;/a&gt;. Thank you to Rajiv Mordani     @ Sun!&lt;br /&gt;&lt;br /&gt;HttpOnly is not a cure-all. It's simply one defense-In-depth measure to assist in preventing XSS session hijacking attacks. HttpOnly can also be circumvented via &lt;a href="http://ha.ckers.org/blog/20070719/firefox-implements-httponly-and-is-vulnerable-to-xmlhttprequest/"&gt;triggering an AJAX request via  the XMLHttpRequest object and reading cookie data out of the headers&lt;/a&gt;. Fellow HTTPOnly crusader, Eric Bing from Oracle, is also &lt;a href="https://lists.owasp.org/pipermail/webappsec/2008-May/000597.html"&gt;leading the charge communicating with the w3c regarding future specifications to prevent the XMLHTTPRequest JavaScript object from accessing HttpOnly cookies&lt;/a&gt;! Exciting!&lt;br /&gt;&lt;br /&gt;In other HttpOnly news:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://lists.owasp.org/pipermail/webappsec/2008-May/000593.html"&gt;WebLogic is testing a HttpOnly flag and is currently reviewing the patch "for feasibility"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380418"&gt;FireFox bug already addressing the circumvention of HttpOnly via XMLHttpRequest headers&lt;/a&gt; as described above. Please consider adding you vote to help encourage the team to lock down this HttpOnly circumvention vector: &lt;a href="https://bugzilla.mozilla.org/votes.cgi?action=show_user&amp;amp;bug_id=380418#vote_380418"&gt;https://bugzilla.mozilla.org/votes.cgi?action=show_user&amp;amp;bug_id=380418#vote_380418&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the Crusade Continues......&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Rwklb1TzS_U/SDXjLBTigJI/AAAAAAAAACc/WrqHJ48Vmbs/s1600-h/images.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_Rwklb1TzS_U/SDXjLBTigJI/AAAAAAAAACc/WrqHJ48Vmbs/s400/images.jpg" alt="" id="BLOGGER_PHOTO_ID_5203314722964930706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1100776397691170193?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1100776397691170193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1100776397691170193' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1100776397691170193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1100776397691170193'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/05/httponly-crusade-update.html' title='HttpOnly Crusade Update'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Rwklb1TzS_U/SDXjLBTigJI/AAAAAAAAACc/WrqHJ48Vmbs/s72-c/images.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6700851654797150329</id><published>2008-05-22T08:16:00.000-10:00</published><updated>2008-05-22T08:34:13.226-10:00</updated><title type='text'>ShakaCon 2008 Hawaii</title><content type='html'>&lt;span style="font-size:100%;"&gt;You now have a business-critical reason to encourage your boss to send you to Hawaii. &lt;span style="font-weight: bold;"&gt;ShakaCon 2008 (June 9th-13th) is Hawaii's only i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;nformation security, IT audit, compliance and ethical hacking conference!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Rwklb1TzS_U/SDW6VhTigII/AAAAAAAAACU/yMHHJLvbDgk/s1600-h/shaka1p.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 193px; height: 164px;" src="http://bp3.blogger.com/_Rwklb1TzS_U/SDW6VhTigII/AAAAAAAAACU/yMHHJLvbDgk/s400/shaka1p.jpg" alt="" id="BLOGGER_PHOTO_ID_5203269823376818306" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;For the second year running, one of the most beautiful places on Earth will serve as the backdrop for this truly unique security conference experience.&lt;br /&gt;&lt;br /&gt;ShakaCon will include a wide variety of security speakers, including an update on the &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.owasp.org/index.php/ESAPI"&gt;OWASP ESAPI (Enterprise Security API)&lt;/a&gt; project on June 11th. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;ShakaCon will also host a 2-day Web Application Security &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Training course by the Aspect Security  Hawaii office on June 12th and 13th.&lt;br /&gt;For more information, please see &lt;a href="http://www.shakacon.org/"&gt;http://www.shakacon.org/&lt;/a&gt; or download the registration form &lt;a href="http://www.shakacon.org/registration_flyer.pdf"&gt;here&lt;/a&gt;.&lt;a href="http://www.shakacon.org/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6700851654797150329?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6700851654797150329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6700851654797150329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6700851654797150329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6700851654797150329'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/05/shakacon-2008-hawaii.html' title='ShakaCon 2008 Hawaii'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_Rwklb1TzS_U/SDW6VhTigII/AAAAAAAAACU/yMHHJLvbDgk/s72-c/shaka1p.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3642545291983933566</id><published>2008-04-12T10:38:00.000-10:00</published><updated>2008-08-11T08:52:24.537-10:00</updated><title type='text'>CSRF Solutions</title><content type='html'>The problem: CSRF.&lt;br /&gt;&lt;br /&gt;Jeremiah Grossman's explanation of the problem at RSA 08 :&lt;br /&gt;&lt;a href="http://www.slideshare.net/guestdb261a/csrfrsa2008jeremiahgrossman-349028/"&gt;http://www.slideshare.net/guestdb261a/csrfrsa2008jeremiahgrossman-349028/ &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OWASP CSRF Overview:&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/CSRF"&gt;http://www.owasp.org/index.php/CSRF&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Testing for CSRF:&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/CSRFTester"&gt;http://www.owasp.org/index.php/CSRFTester&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Java Filter for CSRF Protection:&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/CSRF_Guard"&gt;http://www.owasp.org/index.php/CSRF_Guard&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Java ESAPI Defense:&lt;br /&gt;&lt;a href="http://owasp-esapi-java.googlecode.com/svn/trunk/javadoc/org/owasp/esapi/HTTPUtilities.html#addCSRFToken%28java.lang.String%29"&gt;org.owasp.esapi.HTTPUtilities.addCSRFToken(String href)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Plaform's with built-in CSRF defense:&lt;br /&gt;&lt;a href="http://lists.virus.org/bugtraq-0707/msg00360.html"&gt;Drupal.org &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3642545291983933566?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3642545291983933566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3642545291983933566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3642545291983933566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3642545291983933566'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/04/csrf-solutions.html' title='CSRF Solutions'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2450573273212204633</id><published>2008-04-07T19:04:00.000-10:00</published><updated>2008-04-07T19:08:21.211-10:00</updated><title type='text'>ha.ckers.org pwnd?</title><content type='html'>It's strange and disheartening to see ha.ckers.org "down" this evening.  I hope it's only unscheduled maintenance.  I would hate to see the pwnders get pwnd!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Rwklb1TzS_U/R_r9JqfkomI/AAAAAAAAACM/pgCEemtA06Y/s1600-h/hackers.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_Rwklb1TzS_U/R_r9JqfkomI/AAAAAAAAACM/pgCEemtA06Y/s400/hackers.gif" alt="" id="BLOGGER_PHOTO_ID_5186736263337910882" border="0" /&gt;&lt;/a&gt;Another interesting note: ha.ckers.org uses Wordpress? Ewwwwwwwwwwwwwwwwwww&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2450573273212204633?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2450573273212204633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2450573273212204633' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2450573273212204633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2450573273212204633'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/04/hackersorg-pwnd.html' title='ha.ckers.org pwnd?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Rwklb1TzS_U/R_r9JqfkomI/AAAAAAAAACM/pgCEemtA06Y/s72-c/hackers.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-3725973582346415259</id><published>2008-03-30T14:49:00.001-10:00</published><updated>2009-01-19T19:33:58.024-10:00</updated><title type='text'>Plaintext PCI Compliance</title><content type='html'>One of the main flaws of PCI-DSS compliance requirement #4 is that it allows for plaintext transmission of credit card information within private networks.  The most recent mass-credit-card heist involves my favorite east coast grocer, &lt;a href="http://www.hannaford.com/credit_card_security/index.htm"&gt;Hannaford&lt;/a&gt;.  Hannaford passed a PCI audit. Even more interesting, Hannaford passed their PCI audit on Feb. 27, 2008 - 2 months after they were breached - and 3 weeks before public disclosure!  Just how did this happen?&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;But in Hannaford's case, the intruders were able to intercept t&lt;/span&gt;&lt;span style="font-style: italic;"&gt;he data at a point where it obviously was unencrypted&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;span class="hl"&gt;- Heather Paquette&lt;/span&gt;, Hannaford Manager Midwest Information Risk Management&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;At the time of this potential exposure, Hannaford was certified to be in compliance with the highest security standards required by the credit card industry.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.hannaford.com/credit_card_security/index.htm"&gt;Ronald C. Hodge, Hannaford's CEO&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;img style="width: 99px; height: 124px;" src="http://ecx.images-amazon.com/images/I/51XT1T294GL._SL210_.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Anytime you transmit or store credit card information - do so using industry standard strong encryption.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This seems like a no-brainer. We should have learned this lesson in InfoSec 101!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-3725973582346415259?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/3725973582346415259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=3725973582346415259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3725973582346415259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/3725973582346415259'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/03/plaintext-and-pci-compliance.html' title='Plaintext PCI Compliance'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-2865055086105655577</id><published>2008-03-27T16:42:00.000-10:00</published><updated>2008-03-27T20:22:27.980-10:00</updated><title type='text'>HttpOnly, Safari, Servlets and Tomcat</title><content type='html'>I'm a huge fan of the benefits provided by the HttpOnly cookie flag, especially as it pertains  to enhancing the security of session cookies in web applications.  As we can see by Andrew van der Stock's recent blog post on &lt;a href="http://www.greebo.net/2008/03/25/httponly-update/"&gt;HttpOnly Browser Support&lt;/a&gt;, almost every browser supports or will soon support the HttpOnly flag except for Safari.&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;img src="http://bp3.blogger.com/_Rwklb1TzS_U/R-xfXafkohI/AAAAAAAAABk/rzhyxUI2qWg/s400/images.jpg" alt="" id="BLOGGER_PHOTO_ID_5182622127049974290" border="0" &gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Safari uses the WebKit.org open source project. And there is indeed a &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=10957"&gt;bug submitted for HttpOnly support in WebKit&lt;/a&gt;. But this bug was posted back in September 06' - whats taking so long? Unfortunately the problem is Apple. Apple is blocking WebKit from supporting HttpOnly. The &lt;a href="http://developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html"&gt;CFNetwork&lt;/a&gt; library is the closed source Apple library that converts HTTPHeaders into objects - and the CFNetwork library does not support the HttpOnly cookie flag. Please do not hesitate to email the &lt;a href="mailto:product-security@apple.com"&gt;Apple Product Security Team&lt;/a&gt; to nudge them along in the right direction!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Rwklb1TzS_U/R-xgIqfkoiI/AAAAAAAAABs/0QQVdGi1VNs/s1600-h/java_starting.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 109px; height: 109px;" src="http://bp0.blogger.com/_Rwklb1TzS_U/R-xgIqfkoiI/AAAAAAAAABs/0QQVdGi1VNs/s400/java_starting.jpg" alt="" id="BLOGGER_PHOTO_ID_5182622973158531618" border="0" /&gt;&lt;/a&gt;Also, I have heard rumors that the JEE Servlet Expert Group will soon agree to support the HttpOnly flag in the &lt;a href="http://jcp.org/en/jsr/detail?id=315"&gt;Servlet 3.0 specification&lt;/a&gt;! I'm absolutely thrilled about this. I cannot provide proof of this yet, but I am a longtime Sun contractor and have authoritative sources. This is a very encouraging development.&lt;br /&gt;&lt;br /&gt;I've run across much resistance on my HttpOnly cookie crusade. The Tomcat team is hesitant to support this cookie flag since HttpOnly is not a standard - but I'm &lt;a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=44382"&gt;working on the Tomcat HttpOnly bug&lt;/a&gt; and am likely to get it rolled live into Tomcat once it becomes part of the standard for Servlets.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Vive la HttpOnly!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Rwklb1TzS_U/R-yBuafkojI/AAAAAAAAAB0/unk6BL1ejdI/s1600-h/cookie-monster3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_Rwklb1TzS_U/R-yBuafkojI/AAAAAAAAAB0/unk6BL1ejdI/s400/cookie-monster3.jpg" alt="" id="BLOGGER_PHOTO_ID_5182659905582309938" border="0" /&gt;&lt;/a&gt;Actual Photo of &lt;a href="http://i8jesus.com/"&gt;Arshan Dabirsiaghi&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-2865055086105655577?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/2865055086105655577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=2865055086105655577' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2865055086105655577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/2865055086105655577'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/03/httponly-safari-servlets-and-tomcat.html' title='HttpOnly, Safari, Servlets and Tomcat'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_Rwklb1TzS_U/R-xfXafkohI/AAAAAAAAABk/rzhyxUI2qWg/s72-c/images.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4374245299146563973</id><published>2008-03-09T09:43:00.001-10:00</published><updated>2008-03-09T19:30:48.087-10:00</updated><title type='text'>HTTPOnly support for Apache Tomcat</title><content type='html'>I've made specific suggestions to the Apache Tomcat core developer team to add HTTPOnly support to Tomcat 5.5 (for starters). The adoption is slow-going since it involves changes to three of the most core files of Tomcat.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Rwklb1TzS_U/R9TGl7VwlvI/AAAAAAAAABU/tfsPP18Sodo/s1600-h/tomcat.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_Rwklb1TzS_U/R9TGl7VwlvI/AAAAAAAAABU/tfsPP18Sodo/s400/tomcat.gif" alt="" id="BLOGGER_PHOTO_ID_5175980226641958642" border="0" /&gt;&lt;/a&gt;Here is how you can get HTTPOnly support &lt;span style="font-weight: bold; font-style: italic;"&gt;NOW &lt;/span&gt;while you wait for official adoption.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) &lt;/span&gt;First download the Tomcat source code and be able to build the core server via ANT.  See&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/building.html"&gt;http://tomcat.apache.org/tomcat-5.5-doc/building.html&lt;/a&gt; for instructions. Although the link above points to Tomcat 5.5, the changes I'm suggesting below will work for &lt;span style="font-weight: bold;"&gt;any&lt;/span&gt; Tomcat build.&lt;br /&gt;&lt;br /&gt;Once you have downloaded the Tomcat code and have set up your build environment, you will need to make the following changes to at least org.apache.catalina.connector.Request.java and org.apache.catalina.connector.Response.java. You could (should) also make changes to org.apache.tomcat.util.http.ServerCookie.java if you require a very scalable solution where every StringBuffer.append matters; but that addition is beyond the scope of this post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) &lt;/span&gt;org.apache.catalina.connector.Request.doGetSession(boolean create) is where the session cookie (JSESSIONID) is initially created. You are going to need to change this. This first change is at  approximately loc 2321 of the file org.apache.catalina.connector.Request.java (for Tomcat 5.5).&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;           //this is what needs to be changed&lt;br /&gt;  &lt;b&gt; //response.addCookieInternal(cookie);&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;   //this is whats new&lt;br /&gt;   &lt;/tt&gt;&lt;tt&gt;&lt;b&gt;response.addCookieInternal(cookie, true);&lt;/b&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;        }&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) &lt;/span&gt;In order to support the new HTTPOnly version of Response.addCookieInternal, we need to modify the functionality of org.apache.catalina.connectorResponse.addCookieInternal. The following are my suggested backward-compatible changes:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;tt&gt;public void addCookieInternal(final Cookie cookie) {&lt;br /&gt;&lt;/tt&gt;&lt;tt&gt;addCookieInternal(cookie, false);&lt;/tt&gt;&lt;br /&gt;&lt;/b&gt;&lt;tt&gt;&lt;b&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/tt&gt;&lt;b&gt;&lt;tt&gt;public void addCookieInternal(final Cookie cookie, &lt;/tt&gt;&lt;tt&gt;boolean HTTPOnly) {&lt;/tt&gt;&lt;br /&gt;&lt;/b&gt;&lt;tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;tt&gt;        if (isCommitted())&lt;br /&gt;    return;&lt;br /&gt;&lt;br /&gt;final StringBuffer sb = new StringBuffer();&lt;br /&gt;//web application code can receive a IllegalArgumentException&lt;br /&gt;//from the appendCookieValue invokation&lt;br /&gt;if (SecurityUtil.isPackageProtectionEnabled()) {&lt;br /&gt;    AccessController.doPrivileged(new PrivilegedAction() {&lt;br /&gt;        public Object run(){&lt;br /&gt;            ServerCookie.appendCookieValue&lt;br /&gt;                (sb, cookie.getVersion(), cookie.getName(),&lt;br /&gt;                 cookie.getValue(), cookie.getPath(),&lt;br /&gt;                 cookie.getDomain(), cookie.getComment(),&lt;br /&gt;                 cookie.getMaxAge(), cookie.getSecure());&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;} else {&lt;br /&gt;    ServerCookie.appendCookieValue&lt;br /&gt;        (sb, cookie.getVersion(), cookie.getName(), cookie.getValue(),&lt;br /&gt;             cookie.getPath(), cookie.getDomain(), cookie.getComment(),&lt;br /&gt;             cookie.getMaxAge(), cookie.getSecure());&lt;br /&gt;}&lt;br /&gt;&lt;b&gt;         //of course, we really need to modify ServerCookie&lt;br /&gt;//but this is the general idea&lt;br /&gt; if (HTTPOnly) {&lt;br /&gt;    sb.append("; HttpOnly");&lt;br /&gt;}&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;//if we reached here, no exception, cookie is valid&lt;br /&gt;// the header name is Set-Cookie for both "old" and v.1 ( RFC2109 )&lt;br /&gt;// RFC2965 is not supported by browsers and the Servlet spec&lt;br /&gt;// asks for 2109.&lt;br /&gt;addHeader("Set-Cookie", sb.toString());&lt;br /&gt;&lt;br /&gt;cookies.add(cookie);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/tt&gt;Any feedback is appreciated.&lt;br /&gt;&lt;br /&gt;PS: For more on HTTPOnly and how it can be a part of your defense-in-depth web application  security strategy, see &lt;a href="http://msdn2.microsoft.com/en-us/library/ms533046.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms533046.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4374245299146563973?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4374245299146563973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4374245299146563973' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4374245299146563973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4374245299146563973'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/03/httponly-support-for-apache-tomcat.html' title='HTTPOnly support for Apache Tomcat'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Rwklb1TzS_U/R9TGl7VwlvI/AAAAAAAAABU/tfsPP18Sodo/s72-c/tomcat.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-5485182880680678577</id><published>2008-02-14T17:00:00.000-10:00</published><updated>2008-02-14T17:16:41.168-10:00</updated><title type='text'>JQuery vs Prototype JS Libraries</title><content type='html'>Here are my thoughts on JQuery vs. Prototype - I do not think either is better. It's just a tradeoff based on your needs and team.&lt;br /&gt;&lt;br /&gt;JSQuery positives:&lt;br /&gt;Easier&lt;br /&gt;Better Containment&lt;br /&gt;Better Chaining&lt;br /&gt;More Active Community&lt;br /&gt;More Active/Verbal Maintainer&lt;br /&gt;Designer-centric&lt;br /&gt;More concise code&lt;br /&gt;&lt;br /&gt;JSQuery Negatives:&lt;br /&gt;Memory hog&lt;br /&gt;Cross-browser support is not so great&lt;br /&gt;Dom centric programming (not so easy for Java folks to wrap their heads around this)&lt;br /&gt;No class support or inheritance (again, odd for Java folks to wrap their head around this)&lt;br /&gt;&lt;br /&gt;Prototype positives:&lt;br /&gt;Amazing cross browser support&lt;br /&gt;Low memory footprint (compared to other frameworks)&lt;br /&gt;Great Object Orientation/Functional based programming (easy for Java/back end developers to jump in the game)&lt;br /&gt;OO Coder-centric&lt;br /&gt;More readable code&lt;br /&gt;Better security awareness/responsiveness for Ajax functionality&lt;br /&gt;&lt;br /&gt;Prototype negatives:&lt;br /&gt;sizable download file&lt;br /&gt;not as concise as JQuery&lt;br /&gt;community not as active (at times)&lt;br /&gt;&lt;br /&gt;Summary: Most designers prefer JSQuery. Most Java Programmers prefer Prototype. But if you would like to have your cake and eat it to, then &lt;a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries"&gt;use both, together.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-5485182880680678577?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/5485182880680678577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=5485182880680678577' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5485182880680678577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5485182880680678577'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/02/jquery-vs-prototype-js-libraries.html' title='JQuery vs Prototype JS Libraries'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-4747459368037356173</id><published>2008-02-10T05:34:00.000-10:00</published><updated>2008-02-10T05:42:41.852-10:00</updated><title type='text'>It's my Vista Party and I'll cry if I want to</title><content type='html'>You would cry too if it happened to you.&lt;br /&gt;&lt;br /&gt;Last week I was handed a new Vista Ultimate(tm) machine as my primary Java development machine. Yes, I wept. I tossed and turned for nights wondering WHY WHY did this happen to me? But as a social experiment and respect for my new boss, I'm going to give it a good ol college try. So far, Java 1.5 and Eclipse installed just fine. I stripped almost every feature from Vista that I could using this very reasonable gamers tweak guide for speeding up Vista.  &lt;a href="http://www.extremetech.com/article2/0,1697,2247431,00.asp"&gt;http://www.extremetech.com/article2/0,1697,2247431,00.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But I hit my first wall when trying to install MySQL 5.0. MySQL MySQLInstanceConfig 5.0.51a simply does not work on any  version of Vista due to some error with UAC configuration. Admittedly, it was the MySQL developers fault, not Vista. MySQL 5.0.45 is the latest version of MySQL to  actually run properly on Vista as of this posting.&lt;br /&gt;&lt;br /&gt;Charging forward with Vista laptop in hand....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-4747459368037356173?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/4747459368037356173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=4747459368037356173' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4747459368037356173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/4747459368037356173'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/02/its-my-vista-party-and-ill-cry-if-i.html' title='It&apos;s my Vista Party and I&apos;ll cry if I want to'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-5139394871104782604</id><published>2008-01-29T01:09:00.000-10:00</published><updated>2008-02-06T05:50:14.677-10:00</updated><title type='text'>Secure Agile Software Engineering with ESAPI</title><content type='html'>The principles of agile development are revolutionary and have only come to full fruition as computer languages, software engineering tools and software platform paradigms have matured to the depth that we have seen in recent years. But as anyone who works in Application Security well tell you, Software Development is a combat sport and we must continually march to the drumbeat of &lt;span style="font-style: italic;"&gt;Better, Faster, Stronger&lt;/span&gt;. That new frontier is developing Secure Applications with lightning speed. We are not there yet. But the dawn of the age of secure agile software development is upon us, and the weapon of choice shall be ESAPI. But with such power comes great responsibility and we must continually learn skills anew. This brief article will debunk some of the theories of agile development, but will prepare you for the battle ahead.&lt;br /&gt;&lt;br /&gt;Some of the core aspects behind agile development is placing working iterations of applications in front of the customer in a very rapid model similar to the spiral software engineering model. This rapid turnaround (and rapid desires from the customer for change) can allow software analysts to forgo much of the design process of an application. Pre-development design documentation no  longer becomes an efficient process when you are iterating so frequently with the customer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Design documentation in a secure agile development life cycle is more efficient when done after the primary live delivery.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Efficiency in the agile process is fundamental. We must be empowered to not only iterate fast, but to do so in a way that is of high quality. The chief architects code and the newest members of our team must be of similar quality, and a junior coder fresh out of school will not do. There are certain lessons that only the heat of battle and years of coding will teach you. For a new recruit, a support role to the team is more appropriate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Junior Programmers do not belong in the core of secure agile development teams&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simplicity is no longer an option. K.I.S.S. died the day the first programmer completed an application that was a combination of J2EE, Hibernate XML mapping, ANT and Tomcat xml configuration, Javascript, SQL, XHTML/DHTML and CSS. The applications being&lt;br /&gt;asked of us web-centric agile programmers are a mesh of  7 or more different programming languages with rich client cross-browser concerns that make even the most hardened  C++ programmers weep.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) We shall expect complexity as the norm and shall build such functionality in reusable well encapsulated abstractions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Our teams are now distributed. Face to face conversations are so - 1990's. We can expect our teams to be scattered all over the world. This new generation of agile warriors will use the free tools of new media to the fullest and will appear to be in the cubical next to yours from 6000 miles away in almost ninja like fashion. The Secure Agile Programmer is an extrovert who gains great satisfaction in clear and constant communication with the customer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) We shall expect our teams to be global and have the capacity to maximize Instant Message, Email, VOIP, Audio Chat Rooms and other forms of net communication in a very verbose yet clear way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Our agile developers are not cowboys, they are elite soldiers with the right tools in hand. Before a agile coder can move fast, the application architecture must be well formed. We cannot build application infrastructure on the fly. That is where ESAPI comes in. ESAPI is the only enterprise Java API that covers all aspects of secure application development. It can be injected in to&lt;br /&gt;any Java architecture. It will minimize the need for security testing when used appropriately. It will save you money, time and present you with a simple and effective way to build Java applications securely from the ground up, the first time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5) We will have a secure robust architecture in place before we begin the agile proces&lt;/span&gt;s.&lt;br /&gt;&lt;br /&gt;All areas of secure coding are covered in ESAPI:&lt;br /&gt;&lt;br /&gt;1) Authentication&lt;br /&gt;2) User Management&lt;br /&gt;3) Access Control Abstraction&lt;br /&gt;4) Secure Object Reference&lt;br /&gt;5) Input Validation&lt;br /&gt;6) Output Encoding&lt;br /&gt;7) Encryption&lt;br /&gt;8) Secure HTTPUtilities&lt;br /&gt;9) Random Number Generation&lt;br /&gt;10) Logging with proper Security Considerations&lt;br /&gt;11) Intrusion Detection&lt;br /&gt;12) Secure Configuration&lt;br /&gt;&lt;br /&gt;Game on. Join us: &lt;a href="http://www.esapi.org/"&gt;ESAPI.org&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-5139394871104782604?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/5139394871104782604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=5139394871104782604' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5139394871104782604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/5139394871104782604'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2008/01/secure-agile-software-engineering-with.html' title='Secure Agile Software Engineering with ESAPI'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8126947322784848467</id><published>2007-12-29T11:59:00.000-10:00</published><updated>2007-12-29T18:24:28.451-10:00</updated><title type='text'>Logout via Javascript with OnBeforeUnload</title><content type='html'>One sure fire way to protect users from CSRF attacks is to minimize the window of time that a user is logged in. Current CSRF mitigation strategies focus around the topic of adding a token to each form and link in addition to timing out the session after the the user has been inactive for a relatively short window of time.&lt;br /&gt;&lt;br /&gt;However, any third party site than can exploit  a weakness in Single Origin Policy can break though these defenses (such as the iframe SOP hack we saw in the past). In addition, the web world is moving to technologies that allow cross-site-requests on purpose, both through Flash, JavaScript and other technologies for mash-up capability.&lt;br /&gt;&lt;br /&gt;Not all users are kind enough to explicitly press the logout link or button when they are done using your site. There are three situations that we can trap via JavaScript and force the user to logout without requiring additional action of the part of the user.&lt;br /&gt;&lt;br /&gt;1) The user simply types in or browses to a new url in a single-tabbed environment without explicitly logging out.&lt;br /&gt;2) The user closes the tab or window without choosing to press the logout link or button.&lt;br /&gt;3) The user browses to a new tab while staying logged in the previous tab.&lt;br /&gt;&lt;br /&gt;The following code sample will allow a programmer to trap events 1) and 2) reliably in IE 6/7 and Firefox 2.  It's trivial to fire off the logout event especially if your logout server code will allow a GET request.&lt;br /&gt;&lt;pre style="font-family: courier new;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body onbeforeunload="dothis();"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function dothis() {&lt;br /&gt;alert('logmeout ajax event');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;The third situation, when a user changes a browser tab, is much more difficult of an event to trap since it does not fire a onbeforeunload or similar event. It may also harm the user experience.  Browser tab changing may not be a situation where the user actually wants to log out. None the less,  to accomplish this task, you will need to work with the windows' onblur event.  However, this event is very chatty. Just changing a tab will fire onblur event 5 times in Firefox 2.0.  You&lt;br /&gt;can play with code such as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var logout = false;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;function dothis() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    if (logout == false) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        alert('logmeout ajax event');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        logout = true;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;But Firefox 2 will still fire the alert 2x.&lt;/span&gt;&lt;span style="font-family:arial;"&gt; You will need to test and expand upon this code for each unique browser.&lt;br /&gt;&lt;br /&gt;Logging out via JavaScript is by no means a complete CSRF mitigation, but is an excellent defense-in-depth measure to add to your current mitigation strategy.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8126947322784848467?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8126947322784848467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8126947322784848467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8126947322784848467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8126947322784848467'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/12/logout-via-javascript-with-onunload.html' title='Logout via Javascript with OnBeforeUnload'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-6957689775297117277</id><published>2007-12-24T11:00:00.000-10:00</published><updated>2007-12-24T23:38:37.535-10:00</updated><title type='text'>12 Steps To Application Security</title><content type='html'>&lt;span style="font-size:100%;"&gt;There are several holdouts in the industry who wish to trump the term "Application Security" with the term "Software Security." My Christmas wish is that we standardize on the term "Application Security" - because I think it's a more realistic term to describe the state of the industry that helps organizations design, develop, deploy, assess, maintain, retire and build procedures around Applications in a way that protects them from external and internal threats.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;1) We must admit that we have a problem and that the security posture of our enterprise Applications are becoming unmanageable.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Let me start by saying that most code is insecure. This is not necessarily getting better, but seems to be getting worse.&lt;br /&gt;&lt;br /&gt;Those of us who are professional programmers were never taught to write secure code in school. Even Michael Howard, who is hiring the best and brightest out of the worlds top universities, clearly says that these star graduates have &lt;span style="font-style: italic;"&gt;no idea now to write a secure application&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;2) We must believe that a power greater than ourselves (Application Security Service Vendors) can help us restore sanity.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;It would be effective to re-write all of the worlds applications in an environment that embraces best-of-breed Application Security methodologies. But the truth is that most CIO's have several thousand applications under their responsibility, that are largely insecure. It's already built. It's already in production.  We low level programmers are tasked with writing more code, faster and faster, to keep the business moving,  since they depend on our work more every day. We simply do not have the luxury of time or budget to rewrite all of those applications. So we are stuck with a state of having to secure applications &lt;span style="font-weight: bold; font-style: italic;"&gt;after the fact. &lt;/span&gt;This is a reality check to those in the industry who conjecture that "Software Security" is a better term because "Application Security" implies protection of software after it is built.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;3) &lt;/span&gt;&lt;/span&gt;&lt;b&gt;We must make a  decision to turn our will and our lives over to Application Security excellence.&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;I also feel that the term "Software Security" is a dangerous position that both polarizes the industry and blames the coder. Software Security implies Lines Of Code. Although at the end of the day, individual lines of code need to be written using best practices (input validation, output encoding, proper access control, etc,etc,etc) it's only a small part of the entire picture. Individual coders cannot solve the problem alone.&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) We must make a fearless inventory of the security posture of our current applications.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;We cannot just run Fortify, Spi, Cenzic and Watchfire and be secure. We cannot prove that an application is secure by any predicate mathematical proof.  So what do we do? We (at times) slap up a WAF to stop the bleeding. We bring in pen testers, conduct code reviews and run tools for the most critical apps.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5)&lt;/span&gt;  &lt;span style="font-weight: bold;"&gt;We must a&lt;/span&gt;&lt;/span&gt;&lt;b&gt;dmit to a higher power (our CIO), to ourselves and to other coders the exact nature of our wrongs.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="font-size:100%;"&gt;We wage political warfare in our organizations to ensure that the "C" level, the project managers, the infrastructure teams, the architects and the low-level programmers are all on the same page about Application Security.  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Not to mention incident response. Legal issues. Risk analysis - which really has nothing to do with software - but measures a financial impact on a business.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;6) &lt;/span&gt;&lt;/span&gt;&lt;b&gt; We must be entirely ready to be re-trained to remove all these defects of how we develop applications.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="font-size:100%;"&gt;We re-train software engineers as quickly as possible. We start growing a dedicated internal AppSec team to conduct these reviews in-house in a more cost effective way.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;7) &lt;/b&gt;&lt;b&gt;We must humbly ask our Vendor to help us remove our shortcomings.&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;There are so many activities around securing an application that does not involve lines of code - and does NOT involve software - that is seems myopic to me to use the term "Software Security".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;8) We must make a list of all applications that are insecure, and become willing to make amends to them all.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No tool will answer the question of the state of our Application Security posture. It takes a village - and often several villages - to even achieve measurement of our current posture! Most CIO's have "no clue" where they are today in terms of Application Security exellence.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9) We make direct amends to our insecure Applications wherever possible by fixing the underlying code, except when it would harm the organization by spending to much to do so.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;It is not cost effective to spend 100$ to re-code an application that protects 10$ worth of data. We need outside help to do proper risk analysis - and that measurement needs to be a combination of not just engineering but also non-technical business expertise which has little to do with Software.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10) We continue to take inventory of the security posture of our applications and when we are wrong we promptly admit and fix it.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Depending on a vendor alone will not set you free. The best of breed vendors encourage building AppSec teams internally - the best Vendors help accelerate your organization &lt;span style="font-weight: bold;"&gt;to achieving Application Security Independence. &lt;/span&gt;&lt;span&gt;Continuing education is a great deal cheaper than re-education. Internal penTest expertise is a great deal cheaper than bringing in a service vendor. Using the right tools effectively is a great deal more cost effective than the shotgun approach of using whatever tool was sold to your CIO. The right Vendor will help you get there fast without disrupting the organization.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;11) Through continued education and studying of industry best practices, we try to embrace that philosophy in all of our day to day engineering activities.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once we have the knowledge, we must start building all applications with security in mind and practice from the first few days of each applications conceptual birth.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;12) Having had an awakening as a result of these steps, we carry this message to other engineers, and practice these principles in all our affairs as we build new applications.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Software implies the programs that run a computer.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Application implies a solution to a problem - in the enterprise we are talking about delivering data securely.&lt;br /&gt;&lt;br /&gt;And I think those of us who use the term "Application Security" do so because it is not the software that we are trying to fix - it's the solution to a business need that we are trying to make more robust.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-6957689775297117277?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/6957689775297117277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=6957689775297117277' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6957689775297117277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/6957689775297117277'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/12/12-steps-to-application-security.html' title='12 Steps To Application Security'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1514905534799426401</id><published>2007-12-20T22:12:00.000-10:00</published><updated>2007-12-25T17:35:46.267-10:00</updated><title type='text'>Hash Migration Strategies</title><content type='html'>I've had several engineers ask me recently about how to migrate very large number of users from an old non-salted md5 hash to SHA-512.&lt;br /&gt;&lt;br /&gt;I can think of 2 main strategies:&lt;br /&gt;&lt;br /&gt;1) Rolling migration: Weaker security, stronger user experience.&lt;br /&gt;a) Add a new database column to your USER table that will hold the 1024 bits necessary for SHA-512.&lt;br /&gt;b) Every time a user logs in, first check to see if the SHA-512 column is empty.&lt;br /&gt;c) If empty, just verify the password though the old md5 hash. If that login is successful, rehash  to SHA-512 and delete the md5 column.&lt;br /&gt;d) If the md5 column is not empty, verify the password via SHA-512 (preferably with per-user salts and multiple iterations of the hash)&lt;br /&gt;&lt;br /&gt;2) Mass migration: Stronger Security, weaker user experience.&lt;br /&gt;a)  Email users (in blocks of 10,000) that their password will be expiring soon.&lt;br /&gt;b) At login time, do the same as a rolling migration except also force the user to change their password upon successful login.&lt;br /&gt;c) If a user does not change their password within a limited amount of time, lock their account and force a customer service interaction in order to re-open the account - giving that user 1 hour to change their password or be locked out again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1514905534799426401?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1514905534799426401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1514905534799426401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1514905534799426401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1514905534799426401'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/12/hash-migration-strategies.html' title='Hash Migration Strategies'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-416988262413648051</id><published>2007-12-08T13:41:00.000-10:00</published><updated>2007-12-23T21:24:39.927-10:00</updated><title type='text'>Input Validaton Rant</title><content type='html'>When should we do input validation in J2EE applications?&lt;br /&gt;&lt;br /&gt;I can think of 3 scenarios all with their own trade-offs.&lt;br /&gt;&lt;br /&gt;1) "Let's just skip validation inside the application, and apply a few J2EE filters before we deploy. "&lt;br /&gt;&lt;br /&gt;This is the solution I've been forced down in the past. I'm not a fan. It's not fair to be in a situation where the coder has the responsibility, but not so much the power. J2EE filters, while still being Java code, are external to the core app. I think of J2EE filters as part of the configuration layer; not integrated deep into the app itself.&lt;br /&gt;&lt;br /&gt;Now, there are occasions where adding a filter (such as Eric Sheridan's CSRFGuard) is completely external to the app. The programmer never even needs to think about this kind of vulnerability if CSRFGuard is deployed. However, validation of a form element to ensure that it's a proper email address really seems like programmer responsibility to me. But adding a configuration filter like CSRFGuard to modify all forms by adding form keys really does not seem like programmer responsibility to be, but the platforms responsibility. When are we going to see work like CSRFGuard and the OWASP ESAPI project integrated deeper into J2EE, Sun?!&lt;br /&gt;&lt;br /&gt;2) "Let's just start using Struts XML ActionForm configuration, have programmers completely skip doing any kind of validation, and have a AppSec regex professional work with our architect to set up configuration."&lt;br /&gt;&lt;br /&gt;This has significant benefits, and I'm a fan of this methodology for big teams. But do not be lulled into a false sense to security just because you might have your input validation dialed in. Strong input validation does not protect you from security design flaws and a host of other attack vectors. But still, Struts input validation configuration at the XML level can be very powerful if done completely across the entire app. (each and every form element.) But you better have some serious regEx experience in-house, and have a regEx expert who is very much willing to take the time to learn the application as deeply as the folks who wrote it.&lt;br /&gt;&lt;br /&gt;3) Let's do white list validation inside our controllers' dispatchers the moment we get data from the request.&lt;br /&gt;&lt;br /&gt;This is my favorite, because I'm a manicoder.&lt;br /&gt;&lt;br /&gt;[rant]&lt;br /&gt;With the exception of Dinis Cruz, everyone in the industry is blaming the coders. &lt;a href="http://reddevnews.com/features/article.aspx?editorialsid=2386"&gt;http://reddevnews.com/features/article.aspx?editorialsid=2386&lt;/a&gt; (Thank you, Dinis) Yes, we are often the scapegoat (baaaaaaaaah!) being asked to write code faster, cram more functionality in, and get it done before some arbitrary date passes. And we have wonderful people like Alan Paller "expressing frustration with the fact that everything on the [SANS Institute Top 20 Internet Security] vulnerability list is a result of poor coding, testing and sloppy software engineering."&lt;br /&gt;&lt;br /&gt;Thanks Alan; but when are executives like you going to really invest the time, energy, money, training, Q/A resource and longer development cycles to truly allow us manicoders to engineer secure applications? Blaming the coder is an easy way out; Application Security policy, money and time needs to come from the top down. And this is a very tough sell when all you get out of it is insurance and assurance that is still very difficult to mathematically prove correct. If you have programmers in you org who are writing insecure code, I conjecture that we need to look  at the "C-level" and see how much they truly care about this topic and take note if they are willing to commit to the cost and time necessary to win the battle of secure code.&lt;br /&gt;&lt;br /&gt;We can't just blame the likes of Alan, even Gartner is telling the "C-level" that "developers need to take more responsibility" &lt;a href="http://news.zdnet.co.uk/security/0,1000000189,39291194,00.htm"&gt;http://news.zdnet.co.uk/security/0,1000000189,39291194,00.htm&lt;/a&gt; thereby taking responsibility off the hands of the C's. Again, so unfair, when even Michael Howard at Microsoft with an almost unlimited hiring budget says that even the best and the brightest minds coming out of college have "no idea" now to write secure applications. &lt;a href="http://searchsoftwarequality.techtarget.com/qna/0,289202,sid92_gci1283745,00.html?track=sy280&amp;amp;asrc=RSS_RSS-25_280"&gt;http://searchsoftwarequality.techtarget.com/qna/0,289202,sid92_gci1283745,00.html?track=sy280&amp;amp;asrc=RSS_RSS-25_280&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's kick it up another notch.&lt;br /&gt;&lt;br /&gt;Right now, coders with security awareness are the "high priests" of software engineering groups. It does not have to be this way, but that is the truth in most organizations. AppSec knowledge is not integrated well into most organizations yet. And sadly, those coders who do have solid AppSec awareness and ability need to apply best-practice security guidelines **IN OPPOSITION TO UPPER MANAGEMENTS DESIRE TO DEPLOY CODE FAST**&lt;br /&gt;&lt;br /&gt;If you really want to put the responsibility of AppSec into the hand of me, the coder, than we cannot depend on external configuration to lock down our apps. If you really want me to add IDS type logging deep within the bowels of my code, then you need to both empower me with training, tools and time to do so. This AppSec squeeze-play from the C-level needs to end.&lt;br /&gt;[/rant]&lt;br /&gt;&lt;br /&gt;Ok, back to input validation. I want control over my application at the absolute soonest possible situation when user input enters my code. I want to make sure strong whitelist validation is applied at the earliest point of entry into my code. I want to empower an auditor to easily dig through my code, look for every situation where we do request.getParemter and the like, and see whitelist validation applied right there and then, without having to dig through 10 other files or some elaborate platform technology to ensure proper validation is being done.&lt;br /&gt;&lt;br /&gt;Thanks kindly for reading this far. For more information, contact &lt;a href="http://www.aspectsecurity.com/"&gt;Aspect Security&lt;/a&gt; for all of your appSec training, assurance and acceleration needs! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-416988262413648051?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/416988262413648051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=416988262413648051' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/416988262413648051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/416988262413648051'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/12/input-validaton-rant.html' title='Input Validaton Rant'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-243507969850697873</id><published>2007-10-29T08:46:00.000-10:00</published><updated>2007-12-19T21:54:29.876-10:00</updated><title type='text'>Deeper CSRF Protection</title><content type='html'>It's almost impossible to truly protect against stored CSRF found on a secondary/malicious website, not to mention browser Trojans that we see in the banking industry on a regular basis. It's non trivial to protect against these problems, but here is one potential solution to deeply secure this frightful attack vector:&lt;br /&gt;&lt;br /&gt;a) Implement form keys defense on all forms where both the key name and value is a strong random session id. (Current standard defense)&lt;br /&gt;b) At time of login, inject another per-link session ID to all URL's of that page. No request can even request a copy of a form without the correct url-level session id.&lt;br /&gt;c) If some code is trying to request a page/form with the wrong session id, explain to the user of the attack and log them off their session immediately.&lt;br /&gt;d) Any time a new page is returned to the user, create new per-link session ids for all additional links on page.&lt;br /&gt;&lt;br /&gt;This defense strategy would still work in a multi-tabbed enviornment. The key differentiator is that a potential attack from malicious CSRF would be detected and drop the users session immediately since there is an obvious compromise or poor surfing habits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-243507969850697873?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/243507969850697873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=243507969850697873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/243507969850697873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/243507969850697873'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/deeper-csrf-protection.html' title='Deeper CSRF Protection'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-1979212549558666706</id><published>2007-10-18T11:33:00.001-10:00</published><updated>2007-10-18T11:43:25.211-10:00</updated><title type='text'>I want Cake, but please make it Light (as in Lightppd)</title><content type='html'>What a great post from Brendon Crawford (working on the woefully insecure PHP language)  showing how to get CakePHP 1.1x running on Lighttpd. The woosies at CakePHP rejected his excellent patches for "IP reasons", so sad.&lt;br /&gt;&lt;br /&gt;Anyhow, here we go!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thefaultandfracture.blogspot.com/2007/10/enabling-cakephp-11-on-lighttpd-15.html"&gt;http://thefaultandfracture.blogspot.com/2007/10/enabling-cakephp-11-on-lighttpd-15.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-1979212549558666706?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/1979212549558666706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=1979212549558666706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1979212549558666706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/1979212549558666706'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/i-want-cake-but-please-make-it-light.html' title='I want Cake, but please make it Light (as in Lightppd)'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-573915727308214506</id><published>2007-10-13T09:23:00.000-10:00</published><updated>2007-12-08T13:49:17.027-10:00</updated><title type='text'>Java Snob Laughter</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tnx.nl/php_small.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://tnx.nl/php_small.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yes, I'm a serious Java snob who has spent way to much time working with PHP. I've tried hard to artfully describe my disdain for PHP, and I would like to thank the people at http://tnx.nl/php for helping describe my feelings in my favorite art medium: inspirational posters! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-573915727308214506?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/573915727308214506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=573915727308214506' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/573915727308214506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/573915727308214506'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/java-snob-laughter.html' title='Java Snob Laughter'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7385222616417615481</id><published>2007-10-04T17:03:00.001-10:00</published><updated>2010-10-18T21:17:55.019-10:00</updated><title type='text'>Reflective XSS protection, output encoding</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;UPDATE: The best XSS defense strategy is described here: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; "&gt;&lt;a href="http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet"&gt;http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;***&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Thanks to Eric Sheridan over at OWASP for fielding our "battle of the output encoding method for reflective XSS Protection" competition today! All commentary below is from Eric via email on 10/4/07.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &gt;&gt;1) Output encoding try 1 (Jim)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;  "&lt;b&gt;&lt;/b&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Although it is not frequently mentioned, URL encoding will prevent reflected XSS attacks. The browser will not interpret URL encoded values. It looks as though this approach is sufficient for this particular instance. However, I'd recommend you use HTML entity encoding instead. Aside from addressing XSS, entity encoding will fix that 'ugliness' problem that you mentioned.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &gt;&gt;2) Output encoding try 2 (Brendon)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;badChars = [ "&lt;", "&gt;", "#", "&amp;amp;", "'", "\"" , "%", "\\" ];&lt;br /&gt;entities = [ "&lt;", "&gt;", "&amp;amp;", "'", "*", "%",&lt;br /&gt;"\" ];&lt;br /&gt;&lt;br /&gt;word = "some bad xss phrase goes here";&lt;br /&gt;out = "";&lt;br /&gt;i = 0;&lt;br /&gt;while(i &lt; ordinal =" toAscii(word{i});" killbadchar =" false;" j =" 0;" ordinal ="="="" killbadchar =" entities[j];"&gt; 126) {&lt;br /&gt;    out .= " ";&lt;br /&gt;    i++;&lt;br /&gt;   }&lt;br /&gt;   else {&lt;br /&gt;    out .= word{i};&lt;br /&gt;    i++;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print( out );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Eck, rough looking pseudo-code :)&lt;br /&gt;&lt;br /&gt;If I were doing a security review and I saw some code like this used to prevent XSS, I would mark it as a finding (albeit low, for the moment). This is a 'negative' or 'blacklist' approach - the developer is rejecting known 'bad' characters rather than accepting known 'good' characters. Guys like RSnake (&lt;a href="http://ha.ckers.org/"&gt;http://ha.ckers.org&lt;/a&gt;) spent their entire career bypassing such blacklist filters. Don't get me wrong, this method will prove effective in a lot of scenarios. Unfortunately, there are going to be special cases where this particular method fails. Consider the case when user supplied data lands within a JavaScript tag. Example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script language="JavaScript"&amp;gt;&lt;br /&gt;var a = ;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In this particular example, the proof-of-concept would look like "a; alert(document.cookie); var b=" (without the quotes). A real attack vector would have to do quite a bit of obfuscation, but a determined individual will find a way (see 'Myspace Worm').&lt;br /&gt;&lt;br /&gt;If you are looking for a good output encoding example, check out&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/How_to_perform_HTML_entity_encoding_in_Java"&gt;http://www.owasp.org/index.php/How_to_perform_HTML_entity_encoding_in_Java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This method follows a 'positive security model'. It only accepts the known good values and entity-encodes all of the rest. I think the method is so simple that it can be easily ported to any language. I'd recommend you use this method in place of the two output encoding attempts listed below. Also, if your validation routines detect someone trying to enter malicious javascript, I'd highly consider logging the event as a "security event". Hope this helps!&lt;br /&gt;&lt;br /&gt;-Eric&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7385222616417615481?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7385222616417615481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7385222616417615481' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7385222616417615481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7385222616417615481'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/reflective-xss-protection-output.html' title='Reflective XSS protection, output encoding'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-819659466413696441</id><published>2007-10-02T12:58:00.000-10:00</published><updated>2007-12-08T13:55:50.223-10:00</updated><title type='text'>Secure Coding Smartie</title><content type='html'>&lt;span&gt;&lt;span&gt;"Product teams don't get better by reading secure coding standards. They get better by working with security testers, seeing how their code gets broken by attackers, and learning from the experience. Before we expect software companies to ship better products, we need to see a top-down commitment to security, just like we saw at Microsoft. Everyone from the board room down to the QA team needs to agree that security trumps feature sets and release schedules."&lt;br /&gt;&lt;br /&gt;             - &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Thomas Ptacek, principal with Matasano Security.&lt;br /&gt;&lt;br /&gt;Who would have predicted that Microsoft would become the poster-child for secure application development practices?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-819659466413696441?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/819659466413696441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=819659466413696441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/819659466413696441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/819659466413696441'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/secure-coding-smartie.html' title='Secure Coding Smartie'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-673022079162479377</id><published>2007-10-02T09:59:00.001-10:00</published><updated>2007-10-02T10:40:44.865-10:00</updated><title type='text'>JavaScript debugging in IE 6/7</title><content type='html'>Thank you Brendon Crawford for this excellent summary:&lt;br /&gt;&lt;br /&gt;After thoroughly testing and trying about 9 or 10 different products, I have come up with the definitive must have list for debugging and developing in IE. These are all free BTW:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    1) CSS/HTML inspecting - Microsoft Internet Explorer Developer Toolbar (Free)&lt;br /&gt;    2) AJAX/HTTP Inspecting - Fiddler (Free)&lt;br /&gt;    3) Javascript debugging - Microsoft Office XP Script Editor (Free if you have Office)&lt;br /&gt;&lt;br /&gt;And here are the tools to avoid (too costly, difficult to use, lacking features, lacking stability, or unnecesarily complicated)&lt;br /&gt;&lt;br /&gt;    1) Microsoft Ajax View&lt;br /&gt;    2) Firebug Lite&lt;br /&gt;    3) CSSVista&lt;br /&gt;    4) DebugBar&lt;br /&gt;    5) DebugBar/CompanionJS&lt;br /&gt;    6) Microsoft Script Debugger&lt;br /&gt;    7) IE Watch&lt;br /&gt;    8) DocMon&lt;br /&gt;    9) IE WebDeveloper V2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-673022079162479377?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/673022079162479377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=673022079162479377' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/673022079162479377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/673022079162479377'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/javascript-debugging-in-ie-67.html' title='JavaScript debugging in IE 6/7'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7947661412954918079</id><published>2007-10-01T15:20:00.000-10:00</published><updated>2007-10-01T15:23:36.606-10:00</updated><title type='text'>IED and WebAppSecurity</title><content type='html'>When reading this article about how the US Military is struggling to defeat IED's - I could not help but think of this topic parallels to how difficult of a time we are having in terms of Web App Security.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.msnbc.msn.com/id/21053750/"&gt;http://www.msnbc.msn.com/id/21053750/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7947661412954918079?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7947661412954918079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7947661412954918079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7947661412954918079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7947661412954918079'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/10/ied-and-webappsecurity.html' title='IED and WebAppSecurity'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-588527252161841638</id><published>2007-09-27T10:40:00.001-10:00</published><updated>2007-12-20T09:35:26.945-10:00</updated><title type='text'>Java Applet Security?</title><content type='html'>With so many Java applets vulnerabilities, it's tough not to poke at Java applet security. But what about the real world? Are we seeing any real attacks against enterprise applets? And how good is applet security when compared to ajax/javascript web sites that we see today?&lt;br /&gt;&lt;br /&gt;"I'm always surprised how far people will go to ding Sun/Java security, when there are so many other targets that are so much worse it's not even really the same thing." - Jeff Williams&lt;br /&gt;&lt;br /&gt;Well here's one for the applet side...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cio.com/article/141151/Sun_Changes_Java_Updates_Following_Criticism"&gt;http://www.cio.com/article/141151/Sun_Changes_Java_Updates_Following_Criticism&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-588527252161841638?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/588527252161841638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=588527252161841638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/588527252161841638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/588527252161841638'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/09/java-applet-security.html' title='Java Applet Security?'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-9146492678394200158</id><published>2007-09-04T10:53:00.001-10:00</published><updated>2007-09-27T10:40:01.715-10:00</updated><title type='text'>Web Development Time Breakdown</title><content type='html'>&lt;img src="http://bp0.blogger.com/_Rwklb1TzS_U/RvwUc343eUI/AAAAAAAAAAc/JgXY_bubpYE/s400/pic_092872001188920844.png" alt="" id="BLOGGER_PHOTO_ID_5114985763057400130" border="0" /&gt;&lt;br/&gt;&lt;br /&gt;What a brilliant piece of web-development wisdom! This one made me laugh out loud...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-9146492678394200158?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/9146492678394200158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=9146492678394200158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/9146492678394200158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/9146492678394200158'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/09/brilliant.html' title='Web Development Time Breakdown'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Rwklb1TzS_U/RvwUc343eUI/AAAAAAAAAAc/JgXY_bubpYE/s72-c/pic_092872001188920844.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-7937342183667735840</id><published>2007-08-18T14:19:00.001-10:00</published><updated>2007-12-08T13:56:32.552-10:00</updated><title type='text'>Web Application Security Scanners</title><content type='html'>Jeff Williams over at OWASP (Chairman) / Aspect Security (CEO)  posted a very insightful monologue about the State of Web Application Security Scanners to several of the OWASP eLists, and I thought it was so crucial to those of us who care about Web App Security that I placed a copy at &lt;a href="http://www.owasp.org/index.php/Web_Application_Scanning"&gt;http://www.owasp.org/index.php/Web_Application_Scanning&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The takeaway from this is that you just cannot buy a web app scanner from one of the big three (spi, cenzic, watchfire) and use that as the foundation to your application security process. Web app security scanners do not pick up a large class of errors including business logic, access control and deeper application security problems that are not easily exposed from the endpoints.  For that you need manual review by an expert, and architectural review by an expert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-7937342183667735840?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/7937342183667735840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=7937342183667735840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7937342183667735840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/7937342183667735840'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/08/web-application-security-scanners.html' title='Web Application Security Scanners'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7023583569207199066.post-8333731715870294411</id><published>2007-08-18T02:38:00.000-10:00</published><updated>2007-08-18T02:44:38.423-10:00</updated><title type='text'>Security Awareness</title><content type='html'>It's my belief that you cannot write a secure application without security awareness deeply rooted within the minds, souls and software development life-cycle practices of your software developers.&lt;br /&gt;&lt;br /&gt;If you are trying to go from a developer team that contains no awareness to total developer security awareness and practices, the cost is prohibitive. But if security awareness training for developers becomes a regular part of your software development life cycle, the cost to train goes down dramatically over time. Continuing education is cheaper than full blown re-training.&lt;br /&gt;&lt;br /&gt;- Jim&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7023583569207199066-8333731715870294411?l=manicode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://manicode.blogspot.com/feeds/8333731715870294411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7023583569207199066&amp;postID=8333731715870294411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8333731715870294411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7023583569207199066/posts/default/8333731715870294411'/><link rel='alternate' type='text/html' href='http://manicode.blogspot.com/2007/08/security-awareness.html' title='Security Awareness'/><author><name>Jim Manico</name><uri>http://www.blogger.com/profile/12382834501997208557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.manico.net/jimtux2.jpg'/></author><thr:total>0</thr:total></entry></feed>
