<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>&gt;&gt; </span>11. ESAPI in
general seems to not be aligned to the Industry Java direction... &nbsp; JSR
303 Validation annotations went final Nov 2009. &nbsp;It would make sense to
align to that. &nbsp;Also, I would expect security concerns to align well with
AOP or Spring... perhaps it is outside the scope of this toolkit. &nbsp;I could
understand that. &nbsp;It just seems there is still significant work for the
developer after choosing ESAPI. &nbsp;To me it reminds me of trying to create a
Swing application... Sun provided like 20% of what was needed. (that might be
an exaggeration :)<span style='color:#1F497D'><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:#1F497D'>&gt;
</span>To clarify, I think that it is important that ESAPI be simple to
interface with popular industry standard security libraries (JaaS, Spring,
etc.) However, it is important to note that to get the best integration, it is
important to have involvement from the community of those libbraries, if not
have them provide the integration code themselves. <br>
<br>
<span style='color:#1F497D'>&gt; </span>My take on this is that some of us who
are vested in the project and working on it daily should be reaching out to the
communities of the industry standard libraries and trying to get them involved.
I would love nothing more than to be on the Spring download page downloading
the newest latest greatest Spring and see that there is an optional download
that is a Spring/ESAPI integration jar.<span style='color:#1F497D'><o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>This is exactly the intent.
Ideally, the frameworks will use the security controls in ESAPI to make it *<b>even
easier</b>* for developers. There are a number of things that they could do
automatically (like CSRF protection for example) using the ESAPI controls.&nbsp; But
we don&#8217;t want to build a new framework &#8211; there are plenty already. We&#8217;ll just focus
on making the basic security building blocks. &nbsp;Anyway, putting together a
Spring/ESAPI integration jar seems like the right approach to me.<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'>--Jeff<o:p></o:p></span></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div>

<p class=MsoNormal>On Tue, Dec 8, 2009 at 4:01 PM, Ken Sipe &lt;<a
href="mailto:kensipe@gmail.com">kensipe@gmail.com</a>&gt; wrote:<o:p></o:p></p>

<p class=MsoNormal><br>
First I wish this wasn't an email... it is just too easy to misunderstand
intent. &nbsp;I want it known that I love the purpose of ESAPI and my
intentions are good. I'm not here just to complain. &nbsp;I am going to offer
up my time to work on this project. &nbsp;I could see how some of my comments
below could be taken as being harsh... that really isn't my intention. &nbsp;On
my flight back from The Rich Web Experience, where I talked at length about
ESAPI, I finally got a chance to do a significant code review of the Java code
base. &nbsp;Below is my notes and some of the feedback I got from attendees.
&nbsp;It is my intention to evangelize OWASP and ESAPI more next year...<br>
<br>
My biggest reason to share this information is to:<br>
1. Provide feedback.<br>
2. Get feedback on... hey we knew that... or ken your an idiot or.. yeah, that
is on our roadmap.<br>
<br>
It should be noted that my biggest hangup was on the unit tests. &nbsp;One of
the best reviews an organization can do is test reviews. &nbsp; Additionally,
one of the best ways that a new comer or user of the system can understand the
intent of a system is by reviewing the tests (I refer to unit tests as
&quot;Executable intent&quot;)<br>
<br>
OK... the review... remember... I'm on your side.<br>
<br>
1. It is generally viewed that the filters are not useable out of the box...
they represent a coding sample of what someone should do... in particular I'm
looking at you ESAPIFilter. &nbsp;People like the idea that they can create
their own, but want something useable out of the box as well (OOTB).<br>
2. WEB-INF/index.jsp as a hard coded value in ESAPIFilter doesn't make sense.<br>
3. In general there are tons of System.out.printlns... Chris captured this
already and has posted an issue.<br>
4. The tests in general look like they run on one guys machine... with
references to user.home, etc.<br>
5. There are a number of main(...) methods throughout the code.<br>
6. comments regarding SimlpleDateFormat issues... these should be over come if
possible<br>
7. There is a lot of commented out code through out.<br>
8. There is a significant number of empty tests... or tests that have commented
out code.<br>
9. It appears that many of the tests are designed for human observation... and
not machine validation. &nbsp;The output is for humans.<br>
10. All defaults are windows... probably not where this code will run in
production. &nbsp;It would be great to provide platform independent options
where possible and multiple properties files for several OS.<br>
11. ESAPI in general seems to not be aligned to the Industry Java direction...
&nbsp; JSR 303 Validation annotations went final Nov 2009. &nbsp;It would make
sense to align to that. &nbsp;Also, I would expect security concerns to align
well with AOP or Spring... perhaps it is outside the scope of this toolkit.
&nbsp;I could understand that. &nbsp;It just seems there is still significant
work for the developer after choosing ESAPI. &nbsp;To me it reminds me of
trying to create a Swing application... Sun provided like 20% of what was
needed. (that might be an exaggeration :)<br>
12. It would have made more sense to use groovy or jython as extension scripts
vs. bean shell. (just based on momentum)<br>
13. There is a significant amount of knowledge that a developer needs to
understand about the internal details in order to use the toolkit... examples:<br>
&nbsp; &nbsp; &nbsp; &nbsp;a) ThreadLocal and the order of method execution<br>
&nbsp; &nbsp; &nbsp; &nbsp;b) Anonymous user and all of its runtime
exceptions... a little strange.<br>
14. testEncodeForJavascript has a lot of commented out code... does it not
work? &nbsp;what changed?<br>
15. testNonAttacktAfterVirtualPatch seems to be misspelled<br>
16. I couldn't find any kind words for SecurityConfigurationTest... what
exactly is it testing?<br>
17. SafeFileTest and EncryptedPropertiesTest both use &quot;user.home&quot;<br>
18. It is unclear if some of the code really should be mark as deprecated...
&nbsp;there are clues in the comments but no annotations or other documentation
of understanding...<br>
It would be great to see these tests actually assert an expected value... It
certainly will be tough for a random number... but that situation is probably
less than 10% of the test cases.<br>
<br>
I should add I'm a big fan of WAF...<br>
<br>
Keep the faith!<br>
<br>
Ken Sipe | <a href="mailto:kensipe@gmail.com">kensipe@gmail.com</a> | blog: <a
href="http://kensipe.blogspot.com" target="_blank">http://kensipe.blogspot.com</a><br>
<br>
_______________________________________________<br>
OWASP-ESAPI mailing list<br>
<a href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/owasp-esapi" target="_blank">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a><o:p></o:p></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>