<div>An FYI from personal experience, be extra careful with the dependencies, particularly if you develop on an appserver that optimized for debug and production.</div>
<div> </div>
<div>You may need these libraries even if you are not using the area of the ESAPI RI that uses them.  The -Xverify:none JVM argument changes how the classloader pre-caches some classes, particularly Exceptions.  Despite not needing to use safe file upload capabilities, without that JVM arg is was looking for Exceptions found in the commons-uploads jar</div>

<div> </div>
<div><br> </div>
<div class="gmail_quote">On Tue, Jan 12, 2010 at 6:54 AM, Jim Manico <span dir="ltr">&lt;<a href="mailto:jim.manico@owasp.org">jim.manico@owasp.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div text="#000000" bgcolor="#ffffff">You know Dinis, when I first read your email I was bit offended. Same with much of John Stevens&#39; email. <br>
<div class="im"><br>But you know? You are trying to help us. These kinds of pragmatic questions need to be answered.<br><br>So here goes.<br><br></div>
<div class="im">
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div>Following the recent thread on Java 6 security and ESAPI, I just would like to ask the following clarifications: </div>
<div><br></div>
<div>1) For an existing web application currently using a MVC framework (like Spring or Struts) are we today (9th Jan 2009) officially recommending that this web application development team adds OWASP&#39;s ESAPI.jar to the list of &#39;external&#39; APIs (i.e. libs) they use, support and maintain?</div>
</span></blockquote><br></div>
<div class="im">I can personally attest for ESAPI 2.0 rc4 integration into Struts 1.3.x, where I&#39;ve used ESAPI for several years, from the early days. I&#39;m not deeply familiar with Spring. I would not say this is a trivial exercise, but it certainly is possible. <br>
<br></div>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><br></div>
<div class="im">
<div>2) When adopting the OWASP ESAPI&#39;s J2EE implementation, is ESAPI.jar ALL they need to add? or are there other dependencies (i.e. jars) that also need<font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"> to be added, supported and maintained? (for example on the &#39;</span></font><span style="LINE-HEIGHT: 19px"><b><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">Dependencies</span></font><span style="FONT-WEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">&#39; section of the</span></font></span><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"> </span></font><a style="COLOR: rgb(42,93,176)" href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Java_EE" target="_blank"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">ESAPI Java EE</span></font></a><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"> page (i.e. Tab) it seems to imply that there are other *.jars needed)</span></font></span></b></span></div>
</div></span></blockquote><br>
<div class="im">ESAPI.jar has significant dependencies - something that is a problem, in general, in the Java world. I&#39;m optimistic about the new Java 7 component framework - but that is a long way off.  In the meantime:<br>
<br></div>(from <a href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Java_EE" target="_blank">http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Java_EE</a>) 
<div class="im"><br><br><i>There are no dependencies on the ESAPI <b>interfaces</b> other than standard Java EE. However, the reference implementation does have dependencies that are detailed below. The reference implementation takes advantage of a few existing libraries. <u><b>This list may not be totally complete.</b></u> </i> </div>

<ul>
<li><i>DefaultAccessController needs… </i>
<ul>
<li><i>Commons-Configuration 1.5 </i></li></ul></li></ul>
<ul>
<li><i>DefaultValidator needs… </i>
<ul>
<div class="im">
<li><i>AntiSamy 1.2 (there may be a few transitive dependencies here) </i></li></div>
<li><i>NekoHTML 0.9.5 </i></li>
<li><i>Xerces 2.9.1 </i></li></ul></li></ul>
<ul>
<li><i>Log4J Logger needs… </i>
<ul>
<li><i>Log4j 1.2.12 </i></li></ul></li></ul>
<ul>
<li><i>DefaultHTTPUtilities needs… </i>
<ul>
<li><i>Commons-FileUpload 1.2 </i></li></ul></li></ul>
<ul>
<li><i>WAF needs </i>
<ul>
<div class="im">
<li><i>XOM 1.0 (there may be a few transitive dependencies here) </i></li></div>
<li><i>Commons-FileUpload 1.2 </i></li></ul></li></ul>
<div class="im"><br>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"><br></span></font></span></b></span></div>
<div><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">3) Where can I find detailed information about each of the 9 Security Controls that ESAPI.jar currently supports: 1) Authentication, 2) Access control, 3) Input validation, 4) Output encoding/escaping, 5) Cryptography, 6) Error handling and logging, 7) Communication security, 8) HTTP security and 9) Security configuration? (I took this list of controls from the <a href="http://www.owasp.org/images/8/81/Esapi-datasheet.pdf" target="_blank">Introduction to ESAPI pdf)</a></span></font></div>
</span></blockquote><br></div>
<div class="im">Detailed from a marketing perspective? :) The best technical information is our Javadoc pages at <a href="http://owasp-esapi-java.googlecode.com/svn/trunk_doc/2.0-rc4/index.html" target="_blank">http://owasp-esapi-java.googlecode.com/svn/trunk_doc/2.0-rc4/index.html</a> which are not complete, but are fairly decent. We have also been very good about answering questions, fast, on esapi-users and esapi-dev. But you are right - docs are evolving, but we need more. <br>
<span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"><br></span></font></span></div>
<div class="im">
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">4) When adopting EASPI.jar, are we recommending that the developers should adopt or retrofit their existing code on the areas affected by those 9 Security Controls? (i.e. code related to: Authentication, Access control, Input validation, Output encoding/escaping, Cryptography, Error handling and logging, Communication security, HTTP security and Security configuration)<span style="FONT-SIZE: 13px; LINE-HEIGHT: 19px; FONT-FAMILY: arial,sans-serif"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"> <br>
</span></font></span></b></span></span></font></span></b></span></div></span></blockquote></div>
<div class="im">It really depends on the situation. But I get your point - I&#39;ve seen the Validator, Encoder, Utils and Error Handling modules used in retrofitting situations successfully. I&#39;m not so sure about the others.<br>
</div>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"><br></span></font></span></b></span></div>
<div class="im">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">5) Should we recommend the adoption of ALL 9 Security Controls? or are there some controls that are not ready today (9 Jan 2009) for production environments and should not be recommended? (for example is the &#39;Authentication&#39; control as mature as the &#39;Error handling and logging&#39; control?)</span></font></span></b></span></div>
</div></span></blockquote>I personally grade the reference 2.0 implementation as follows:<br><br><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">
<div class="im">1) Authentication   C (Needs deeper enterprise integration)<br>2) Access control   B- (This is just a really tough issue, and usually requires deep application-specific context. Plus we have some good ideas on the table from Beef that I&#39;d like to consider)<br>
3) Input validation   A- (needs better messaging and internationalization (thanks Sklarew for making us think in the right direction about this)<br>4) Output encoding/escaping   A (Go Jeff, my only A. :) We do need a performance tuning pass (easy) and DOM XSS encoding functions)<br>
5) Cryptography  A- (Great work Kevin, this is a huge huge improvement from 1.4)<br></div>6) Error handling and logging  B+ (Nice work on designing this from Wichers)<br>7) Communication security ? <br>
<div class="im">8) HTTP security B- (Great utilities! I&#39;d like to see some of these decoupled a bit more)<br>9) Security configuration ?<br><br>Digging deeper....<br><br></div></span></font></span>I personally use almost all of ESAPI. I&#39;ve written my own Hibernate Authentication layer - but it&#39;s very specific to my data model. It&#39;s very difficult to decouple this from my app and would be difficult to donate it to the project effectively. Same with access control. My data model is VERY complex, and donating it without SQL scripts, hibernate configuration, and a whole lot of other code - is a great challenge. (Not to mention that my employer owns the code ;) The flat-file authenticator is just a proof of concept and should never be used in a production environment of any kind, IMO. The thread-local nature of the authenticator, while I use it and love it, needs to be reconsidered since other classes, like the loggers, depend on it. Error handling is fairly solid - and is only a thin layer on top of known logging methods + security specific messaging. The encoder was handed down from Gosling himself - given to Jeff - who gifted it to us. :) I want the encoder to be a hard-coded part of ESAPI. :) The validator and encoder can be dropped into any project fairly easy. Same with much of the HTTP Utils. The Encryptor from 1.4 should be avoided, which impacts other portions of the codebase. <a href="http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.0-readme-crypto-changes.html" target="_blank">http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.0-readme-crypto-changes.html</a>  . 2.0 is going to be a very big milestone; I&#39;m pretty stoked about what I&#39;m seeing from the team. 
<div class="im"><br><br>Most importantly, it&#39;s easy to use the ESAPI configuration layer to over-ride any of the reference implementation with your personal authenticator or access controller (so long as you implement the ESAPI interfaces), as I have for my projects. <br>
<br></div>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"><br></span></font></span></b></span></div>
<div class="im">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">6) Are there commercial (i.e. <span style="FONT-SIZE: 13px; LINE-HEIGHT: 19px; FONT-FAMILY: arial,sans-serif"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">paid) <span style="FONT-SIZE: 13px; LINE-HEIGHT: 19px; FONT-FAMILY: arial,sans-serif"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">support services available for the companies who want to add ESAPI.jar to they application?</span></font></span></b></span></span></font></span></b></span></span></font></span></b></span></div>
</div></span></blockquote><br>
<div class="im">I hesitate to mention this, and I&#39;m not trying to pimp - but I&#39;m respectfully answering all of your questions. Aspect offers these services. I&#39;ve been working with Jeff on some of those efforts. It&#39;s working out well for Aspects clients, I&#39;d dare say. If someone else wishes to speak up on this topic, please do. Open.<br>
</div>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><span style="LINE-HEIGHT: 19px"><b><span style="FONT-WEIGHT: normal; LINE-HEIGHT: normal"><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small"><br></span></font></span></b></span></div>
<div class="im">
<div><font face="arial, helvetica, sans-serif"><span style="FONT-SIZE: small">7) What is the version of ESAPI.jar that we should recommend? the version 1.4 (which lo</span></font>oks like a stable release) or the version 2.0 rc4 (which looks like it is a Release Candidate)</div>
</div></span></blockquote>ESAPI 1.4.1 is <b>very </b>far behind 2.0 rc4.  Java 4 is way past end of lifecycle - but it&#39;s still in very wide use, so we plan to back-port all of ESAPI 2.0 to 1.4. Or at least as much as we can. I&#39;m making some changes this week and plan on releasing 1.4.2 this week.<br>

<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><br></div>
<div class="im">
<div>8) Where can I find the documentation of where and how ESAPI should be used? More importantly, where can I find the information of how it CAN NOT or SHOULD NOT be used (i.e. the cases where even when the EASPI.jar are used, the application is still vulnerable)</div>
</div></span></blockquote>Yea, Docs. We need more docs. Boberski has done incredible work in this area.<br>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><br></div>
<div class="im">
<div>9) if there list of companies that have currently added ESAPI.jar to their applications and have deployed it? (i.e. real world usage of EASPI)</div></div></span></blockquote>Under &quot;users and adopters&quot; <a href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Contributors.2FUsers" target="_blank">http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Contributors.2FUsers</a> 
<div class="im"><br>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><br></div>
<div>10) Has the recommended ESAPI.jar (1.4 or 2.0 rc4) been through a security review? and if so where can I read its report?</div></span></blockquote></div>Yes and see #8 sentence 2.<br>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><br></div>
<div class="im">
<div>11) <i><b><span style="FONT-WEIGHT: normal; FONT-STYLE: normal">when Jim says <i>&quot;... you can build a new secure app without an ESAPI. But libs like OWASP ESAPI will get you there faster and cheaper....&quot;, </i></span> </b><span style="FONT-STYLE: normal">do we have peer-reviewed data that suports this claim? <br>
</span></i></div></div></span></blockquote>
<div class="im">Nope. I&#39;m shooting from the hip and I consider this as common sense. But I agree, we REALLY need more assurance evidence that is published on the wiki - perhaps we should run o2 against the ESAPI codebase for starters. Or maybe someone can donate code review services and publish that report on our wiki. I hear you. Assurance, published assurance, is fundamental. <br>
</div>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><i><span style="FONT-STYLE: normal"><br></span></i></div>
<div class="im">
<div><i><span style="FONT-STYLE: normal">12) Is there a roadmap or how-to for companies that wish to adopt ESAPI.jar on an a) new application or b) existing real-world application&#39;?</span></i></div></div></span></blockquote>
See #8 sentence 2. 
<div class="im">
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><i><span style="FONT-STYLE: normal"><br></span></i></div>
<div><i><span style="FONT-STYLE: normal">13) What about the current implementations of ESAPI for the other languages. Are we also recommending their use?</span></i></div></span></blockquote></div>Most are beta or alpha - with sparkles of 1.0. But I&#39;d love to hear the other language leaders chime in here. I focus on the Java version of ESAPI. 
<div class="im"><br>
<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><i><span style="FONT-STYLE: normal"><br></span></i></div>
<div><i><span style="FONT-STYLE: normal">14) If a development team decides to use (for example) Spring and ESAPI together in their (new or existing) application, what are the recommended &#39;parts&#39; from each of those APIs (Spring and EASPI) that the developers should be using? (for example: a) use Encoding from ESAPI, b) use Authentication from Spring, c) use Authorization from ESAPI, d) use Error Handling from Spring, e) use Logging from ESAPI, etc...)</span></i></div>
</span></blockquote><br></div>I just don&#39;t know how to answer this question. I think for starters, the completeness of our encoder helps stop XSS cold in a way that is a bit better than the frameworks. And Jeff authorer a great cheat sheet to go alongside it. <a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet" target="_blank">http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet</a> <br>

<blockquote type="cite"><span style="FONT-SIZE: 13px; FONT-FAMILY: arial,sans-serif; BORDER-COLLAPSE: collapse">
<div><i><span style="FONT-STYLE: normal"><br></span></i></div>
<div><i><span style="FONT-STYLE: normal">Thanks</span></i></div>
<div><i><span style="FONT-STYLE: normal"><br></span></i></div>
<div><i><span style="FONT-STYLE: normal">Dinis Cruz</span></i></div></span></blockquote><i><br></i>
<div class="im">I&#39;m not going to shy away from these emails any longer. Is this all you got, Dinis? John Steven? Bring it on, I&#39;ll do my best to answer as honestly as I can.<br><br>But let me tell you, Dinis. I would not consider building any Java app without ESAPI. :) (please note the &quot;I&quot; statement - I&#39;ve been deep in the code for years, I&#39;m not saying its easy - it requires significant investment of time to use all of ESAPI as it stands today).<br>
<br>Another 18 hour day - I need sleep. :)<br><br>Regards,<br>- Jim<br></div></div><br>_______________________________________________<br>Esapi-dev mailing list<br><a href="mailto:Esapi-dev@lists.owasp.org">Esapi-dev@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/esapi-dev" target="_blank">https://lists.owasp.org/mailman/listinfo/esapi-dev</a><br><br></blockquote></div><br>