<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rksethi</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rksethi"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Rksethi"/>
		<updated>2026-04-21T15:35:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=2012_BASC_Speakers&amp;diff=136879</id>
		<title>2012 BASC Speakers</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=2012_BASC_Speakers&amp;diff=136879"/>
				<updated>2012-10-01T20:33:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{2012_BASC:Header_Template | Speakers/Panelists}}&lt;br /&gt;
&lt;br /&gt;
=== Michael Anderson ===&lt;br /&gt;
'''NetSPI'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Michael Anderson is a security consultant at NetSPI with experience in penetration testing, application security,&lt;br /&gt;
computer forensics, network architecture, and code reviews. He has presented at DEF CON 18 on cloud-based&lt;br /&gt;
threats, and is currently engaged in research on threats to mobile infrastructure.&lt;br /&gt;
&lt;br /&gt;
=== Ray Cote ===&lt;br /&gt;
'''Appropriate Solutions, Inc.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Josh Corman ===&lt;br /&gt;
'''Akamai Technologies'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Joshua Corman is the Director of Security Intelligence for Akamai Technologies and has more than a decade of experience with security and networking software. Most recently he served as Research Director for Enterprise Security at The 451 Group following his time as Principal Security Strategist for IBM Internet Security Systems. Mr. Corman's research cuts across sectors to the core security challenges plaguing the IT industry, and helps to drive evolutionary strategies toward emerging technologies and shifting economics. His research and education efforts won him the title of [http://www.networkworld.com/supp/2009/outlook/010509-tech-people-to-know.html Top Influencer of IT] by NetworkWold magazine in 2009.  Mr. Corman is a candid and highly-coveted speaker with engagements at leading industry events such as RSA, DEFCON, Interop, ISACA, and SANS. As a staunch advocate for CISOs, Corman also serves as a Fellow with the Ponemon Institute, on the Faculty for IANS, and co-founded [http://www.ruggedsoftware.org/ Rugged Software] - a value-based initiative to raise awareness and usher in an era of secure digital infrastructure.&lt;br /&gt;
&lt;br /&gt;
=== John Dickson ===&lt;br /&gt;
'''Denim Group'''&amp;lt;br/&amp;gt;&lt;br /&gt;
John Dickson, CISSP, has over 15 years in the information security field including hands-on experience with intrusion detection systems, network security, and software security in the commercial and government sectors. In his current position as a Principal at Denim Group, he helps chief security officers of Fortune 500 clients and federal organizations launch and expand successful software security initiatives. John regularly speaks on the topic of application security at industry venues such as the RSA Security Conference and the Computer Security Institute’s (CSI) conferences.&lt;br /&gt;
&lt;br /&gt;
=== Ehsan Foroughi ===&lt;br /&gt;
'''SD Elements'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Ehsan Foroughi is an application security expert with 8+ years of management and technical experience in security research. He has an extensive development and reverse engineering background. He led the Vulnerability Research Subscription Service for TELUS Security Labs (called Assurent before being acquired by TELUS). Under his management, the Vulnerability Research Service went through being a startup product to a service used by over 80% of the major security vendors. As an entrepreneur, he has also served as the founder and CTO of TELTUB, a successful telecommunication startup. Ehsan holds a M.Sc. from the University of Toronto in Computer Science, a B.Eng. from Sharify University of Technology, as well CISM and CISSP designations. SD Elements is a spin-off of Security Compass.&lt;br /&gt;
&lt;br /&gt;
=== Rohit Sethi ===&lt;br /&gt;
'''SD Elements'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Rohit Sethi is a specialist in building security controls into the software development life cycle (SDLC). He has helped improve software security at some of the world's most security sensitive organizations in financial services, software, ecommerce, healthcare, telecom and other industries. Rohit has built and taught SANS courses on Secure J2EE development. He has spoken and taught at FS-ISAC, RSA, OWASP, Secure Development Conference, Shmoocon, CSI National, Sec Tor, Infosecurity, CFI-CIRT, and many others. Mr. Sethi has written articles for InfoQ, Dr. Dobb's Journal, TechTarget, Security Focus and the Web Application Security Consortium (WASC), has appeared on Fox News Live, and has been quoted as an expert in application security for ITWorldCanada and Computer World. He also created the OWASP Design Patterns Security Analysis project. SD Elements is a spin-off of Security Compass.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== John Steven, Chandu Ketkar, and Scott Matsumoto ===&lt;br /&gt;
'''Cigital'''&amp;lt;br/&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Roy Wattanasin ===&lt;br /&gt;
Roy Wattanasin is a information security professional working in the healthcare industry. He spends&lt;br /&gt;
most of his time on leading and developing an organization's information security program and working&lt;br /&gt;
on PCI-DSS compliance, privacy, regulatory efforts, education efforts and with other projects. He also&lt;br /&gt;
teaches information security at Brandeis University.&lt;br /&gt;
&lt;br /&gt;
=== Jim Weiler ===&lt;br /&gt;
&lt;br /&gt;
=== Matt Wood ===&lt;br /&gt;
'''Sunera'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Matt has been active within the security community for the past 10&lt;br /&gt;
years as a developer, researcher, and consultant. As a penetration&lt;br /&gt;
tester with Sunera, Matt has lead social engineering, mobile&lt;br /&gt;
application, internal/external network and web application penetration&lt;br /&gt;
assessments with the specific goal of vulnerability identification and&lt;br /&gt;
active exploitation of identified vulnerabilities. Prior to Sunera,&lt;br /&gt;
Matt was a senior researcher within HP's Web Security Research Group&lt;br /&gt;
focusing on the automated detection of vulnerabilities within web&lt;br /&gt;
technologies. During his tenure with HP, he also led the development&lt;br /&gt;
of several free tools such as HP's Scrawlr (SQLI) and SWFScan (Flash&lt;br /&gt;
Static-Analysis). Prior to HP/SPI Dynamics, Inc., Matt performed&lt;br /&gt;
research on SQL injection and automated debugging within the&lt;br /&gt;
Information Security program at the Georgia Tech. He has spoken at a&lt;br /&gt;
variety of security conferences and events such as Black Hat, RSA,&lt;br /&gt;
Source and OWASP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{2012_BASC:Footer_Template | Speakers}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_PHP_Version&amp;diff=118667</id>
		<title>GPC Project Details/OWASP Enterprise Security API - PHP Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_PHP_Version&amp;diff=118667"/>
				<updated>2011-10-07T01:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Andrew van der Stock 10/06/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for PHP&lt;br /&gt;
| project_description = This is the PHP language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Andrew van der Stock&lt;br /&gt;
| leader_email = vanderaj@owasp.org&lt;br /&gt;
| leader_username = &lt;br /&gt;
| past_leaders_special_contributions = Mike Boberski&lt;br /&gt;
| maintainer_name = &lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username = &lt;br /&gt;
| contributor_name1 = Jah Boite '''()'''&lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = Linden Darling&lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = Bipin Upadhyay&lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = Arnaud Labenne&lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = Martin Reiche&lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = esapi-php&lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-php&lt;br /&gt;
| links_name1 = ESAPI for PHP Google Code repository&lt;br /&gt;
| links_url2 = http://owasp-esapi-php.googlecode.com/files/esapi4php-contributing.pdf&lt;br /&gt;
| links_name2 = ESAPI for PHP Developer Onboarding Instructions&lt;br /&gt;
| links_url3 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name3 = General ESAPI information&lt;br /&gt;
| links_url4 = &lt;br /&gt;
| links_name4 = &lt;br /&gt;
| links_url5 = &lt;br /&gt;
| links_name5 = &lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map =&lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 4/10/2009&lt;br /&gt;
| GPC_Notes = Empty template (PHP Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_-_PHP_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Python_Version&amp;diff=118663</id>
		<title>GPC Project Details/OWASP Enterprise Security API - Python Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Python_Version&amp;diff=118663"/>
				<updated>2011-10-06T23:56:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Craig Youkins 10/6/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for Python&lt;br /&gt;
| project_description = This is the Python language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Craig Younkins&lt;br /&gt;
| leader_email = craig.younkins@owasp.org&lt;br /&gt;
| leader_username = &lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name =&lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username = &lt;br /&gt;
| contributor_name1 = &lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = &lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-python&lt;br /&gt;
| links_name1 = ESAPI for Python Google Code repository&lt;br /&gt;
| links_url2 = http://www.owasp.org/index.php/ESAPI_Python_Readme&lt;br /&gt;
| links_name2 = ESAPI Python readme and release notes&lt;br /&gt;
| links_url3 = http://code.google.com/p/owasp-esapi-python/issues/&lt;br /&gt;
| links_name3 = ESAPI for Python issues may be reported at the Google Code ESAPI issue tracker&lt;br /&gt;
| links_url4 = http://owasp-esapi-python.googlecode.com/hg/doc/index.html&lt;br /&gt;
| links_name4 = ESAPI for Python interface documentation&lt;br /&gt;
| links_url5 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name5 = General ESAPI information&lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = &lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 4/10/2009&lt;br /&gt;
| GPC_Notes = Empty template (Python Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_-_Python_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118483</id>
		<title>Projects/OWASP ESAPI C++ Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118483"/>
				<updated>2011-10-03T20:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Kevin Wall 10/3/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI C++ Project&lt;br /&gt;
| project_home_page = :Category:OWASP Enterprise Security API&lt;br /&gt;
| project_description =This is the C++ language version of the OWASP ESAPI.&lt;br /&gt;
*ESAPI for C++ is sponsored by the United States Government&lt;br /&gt;
*An API for helping programmers develop more secure business applications in C++.&lt;br /&gt;
*Provides easy to use functions for proper auditing, simple wrappers for cryptographic functions, and more.&lt;br /&gt;
*The current release of this project is '''not suitable''' for production use&lt;br /&gt;
| project_license =&lt;br /&gt;
| leader_name1 =David Anderson&lt;br /&gt;
| leader_email1 =david.anderson@aspectsecurity.com&lt;br /&gt;
| leader_username[1-10] = &lt;br /&gt;
| contributor_name1 = Dan Amodio&lt;br /&gt;
| contributor_email1 = dan.amodio@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = Dan_Amodio&lt;br /&gt;
| contributor_name2 = Kevin Wall&lt;br /&gt;
| contributor_email2 = kevin.w.wall@gmail.com&lt;br /&gt;
| contributor_username2 = Kevin_W._Wall&lt;br /&gt;
| contributor_name3 = Jeff Walton&lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = Jeffrey_Walton&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-esapi-c++&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| links_url1 = ESAPI C++ Google Code Project&lt;br /&gt;
| links_name1 = http://code.google.com/p/owasp-esapi-cplusplus/&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI C++ Project&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category: Project About]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_Objective_-_C_Project&amp;diff=118464</id>
		<title>Projects/OWASP ESAPI Objective - C Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_Objective_-_C_Project&amp;diff=118464"/>
				<updated>2011-10-03T13:28:44Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Deepak Subramanian 9/30/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI Objective - C Project&lt;br /&gt;
| project_home_page = Category:OWASP Enterprise Security API&lt;br /&gt;
&lt;br /&gt;
| project_description =&lt;br /&gt;
The OWASP ESAPI Objective-C is the Objective-C (Cocoa) implementation of ESAPI. &lt;br /&gt;
*The current release of this project '''is not''' suitable for production use&lt;br /&gt;
&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD License]&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Deepak Subramanian&lt;br /&gt;
| leader_email1 = deepak.subramanian@owasp.org&lt;br /&gt;
| leader_username1 = Deepak Subramanian&lt;br /&gt;
&lt;br /&gt;
| contributor_name[1-10] = &lt;br /&gt;
| contributor_email[1-10] = &lt;br /&gt;
| contributor_username[1-10] = &lt;br /&gt;
&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
&lt;br /&gt;
| presentation_link =&lt;br /&gt;
&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/esapi-user&lt;br /&gt;
&lt;br /&gt;
| project_road_map = http://www.owasp.org/index.php/Projects/OWASP_ESAPI_Objective_-_C_Project/Roadmap&lt;br /&gt;
&lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-objective-c/&lt;br /&gt;
| links_name1 = ESAPI Objective-C google Code&lt;br /&gt;
&lt;br /&gt;
| release_1 = ESAPI Objective - C/Release v0.0.1&lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI Objective - C Project&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C_Project&amp;diff=118463</id>
		<title>Projects/OWASP ESAPI C Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C_Project&amp;diff=118463"/>
				<updated>2011-10-03T13:27:54Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Undo revision 118460 by Rksethi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI C Project&lt;br /&gt;
| project_home_page = :Category:OWASP Enterprise Security API&lt;br /&gt;
| project_description = This is the C language version of the OWASP ESAPI.&lt;br /&gt;
*ESAPI for C is sponsored by the United States Government&lt;br /&gt;
*An API for helping programmers develop more secure business applications in C.&lt;br /&gt;
*Provides easy to use functions for proper auditing, simple wrappers for cryptographic functions, and more.&lt;br /&gt;
| project_license =&lt;br /&gt;
| leader_name1 =David Anderson&lt;br /&gt;
| leader_email1 = david.anderson@aspectsecurity.com&lt;br /&gt;
| leader_username1 = &lt;br /&gt;
| contributor_name1 = Dan Amodio&lt;br /&gt;
| contributor_email1 = dan.amodio@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = Dan_Amodio&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-esapi-c&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-c/&lt;br /&gt;
| links_name1 = ESAPI-C Google Code Project&lt;br /&gt;
| links_url2 = http://owasp-esapi-c.googlecode.com/svn/trunk/doc/html/index.html&lt;br /&gt;
| links_name2 = ESAPI-C Documentation&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI C Project&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category: Project About]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118462</id>
		<title>Projects/OWASP ESAPI C++ Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118462"/>
				<updated>2011-10-03T13:26:51Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Undo revision 118461 by Rksethi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI C++ Project&lt;br /&gt;
| project_home_page = :Category:OWASP Enterprise Security API&lt;br /&gt;
| project_description =This is the C++ language version of the OWASP ESAPI.&lt;br /&gt;
*ESAPI for C++ is sponsored by the United States Government&lt;br /&gt;
*An API for helping programmers develop more secure business applications in C++.&lt;br /&gt;
*Provides easy to use functions for proper auditing, simple wrappers for cryptographic functions, and more.&lt;br /&gt;
| project_license =&lt;br /&gt;
| leader_name1 =David Anderson&lt;br /&gt;
| leader_email1 =david.anderson@aspectsecurity.com&lt;br /&gt;
| leader_username[1-10] = &lt;br /&gt;
| contributor_name1 = Dan Amodio&lt;br /&gt;
| contributor_email1 = dan.amodio@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = Dan_Amodio&lt;br /&gt;
| contributor_name2 = Kevin Wall&lt;br /&gt;
| contributor_email2 = kevin.w.wall@gmail.com&lt;br /&gt;
| contributor_username2 = Kevin_W._Wall&lt;br /&gt;
| contributor_name3 = Jeff Walton&lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = Jeffrey_Walton&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-esapi-c++&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| links_url1 = ESAPI C++ Google Code Project&lt;br /&gt;
| links_name1 = http://code.google.com/p/owasp-esapi-cplusplus/&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI C++ Project&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category: Project About]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118461</id>
		<title>Projects/OWASP ESAPI C++ Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C%2B%2B_Project&amp;diff=118461"/>
				<updated>2011-10-03T13:26:22Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Deepak Subramanian 9/30/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI C++ Project&lt;br /&gt;
| project_home_page = :Category:OWASP Enterprise Security API&lt;br /&gt;
| project_description =This is the C++ language version of the OWASP ESAPI.&lt;br /&gt;
*ESAPI for C++ is sponsored by the United States Government&lt;br /&gt;
*An API for helping programmers develop more secure business applications in C++.&lt;br /&gt;
*Provides easy to use functions for proper auditing, simple wrappers for cryptographic functions, and more.&lt;br /&gt;
*The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license =&lt;br /&gt;
| leader_name1 =David Anderson&lt;br /&gt;
| leader_email1 =david.anderson@aspectsecurity.com&lt;br /&gt;
| leader_username[1-10] = &lt;br /&gt;
| contributor_name1 = Dan Amodio&lt;br /&gt;
| contributor_email1 = dan.amodio@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = Dan_Amodio&lt;br /&gt;
| contributor_name2 = Kevin Wall&lt;br /&gt;
| contributor_email2 = kevin.w.wall@gmail.com&lt;br /&gt;
| contributor_username2 = Kevin_W._Wall&lt;br /&gt;
| contributor_name3 = Jeff Walton&lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = Jeffrey_Walton&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-esapi-c++&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| links_url1 = ESAPI C++ Google Code Project&lt;br /&gt;
| links_name1 = http://code.google.com/p/owasp-esapi-cplusplus/&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI C++ Project&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category: Project About]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C_Project&amp;diff=118460</id>
		<title>Projects/OWASP ESAPI C Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_C_Project&amp;diff=118460"/>
				<updated>2011-10-03T13:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Deepak Subramanian 9/30/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI C Project&lt;br /&gt;
| project_home_page = :Category:OWASP Enterprise Security API&lt;br /&gt;
| project_description = This is the C language version of the OWASP ESAPI.&lt;br /&gt;
*ESAPI for C is sponsored by the United States Government&lt;br /&gt;
*An API for helping programmers develop more secure business applications in C.&lt;br /&gt;
*Provides easy to use functions for proper auditing, simple wrappers for cryptographic functions, and more.&lt;br /&gt;
*The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license =&lt;br /&gt;
| leader_name1 =David Anderson&lt;br /&gt;
| leader_email1 = david.anderson@aspectsecurity.com&lt;br /&gt;
| leader_username1 = &lt;br /&gt;
| contributor_name1 = Dan Amodio&lt;br /&gt;
| contributor_email1 = dan.amodio@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = Dan_Amodio&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-esapi-c&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-c/&lt;br /&gt;
| links_name1 = ESAPI-C Google Code Project&lt;br /&gt;
| links_url2 = http://owasp-esapi-c.googlecode.com/svn/trunk/doc/html/index.html&lt;br /&gt;
| links_name2 = ESAPI-C Documentation&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI C Project&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category: Project About]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_.NET_Version&amp;diff=118458</id>
		<title>GPC Project Details/OWASP Enterprise Security API .NET Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_.NET_Version&amp;diff=118458"/>
				<updated>2011-10-03T13:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Michael Weber 9/30/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for .NET&lt;br /&gt;
| project_description = This is the .NET language version of OWASP ESAPI. &lt;br /&gt;
*  The current release of this project '''is not''' suitable for production use&lt;br /&gt;
* [http://ankhsvn.open.collab.net/ AnkhSVN] is a free SVN tool that integrates with Visual Studio. Point your SVN tool at http://owasp-esapi-dotnet.googlecode.com/svn/trunk. Anonymous checkout is supported. You can also [http://code.google.com/p/owasp-esapi-dotnet/source/browse browse the source].&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Alex Smolen &lt;br /&gt;
| leader_email = me@alexsmolen.com&lt;br /&gt;
| leader_username = &lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name = Michael Weber&lt;br /&gt;
| maintainer_email = michael.weber35@gmail.com&lt;br /&gt;
| maintainer_username = &lt;br /&gt;
| contributor_name1 = Paul Apostolescu&lt;br /&gt;
| contributor_email1 = apbogdan@gmail.com&lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = esapi-dev-dotnet&lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-dotnet/&lt;br /&gt;
| links_name1 = ESAPI for .NET Google Code repository&lt;br /&gt;
| links_url2 = http://owasp-esapi-dotnet.googlecode.com/files/Esapi.zip&lt;br /&gt;
| links_name2 = Download the latest .NET ESAPI library binary from Google Code here. &lt;br /&gt;
| links_url3 = http://owasp-esapi-dotnet.googlecode.com/files/Esapi_Documentation.zip&lt;br /&gt;
| links_name3 = Download the latest .NET ESAPI documentation from Google Code here. It is a zipped .chm (help) file. &lt;br /&gt;
| links_url4 = http://alexsmolen.com/dotnetesapidoc/index.html&lt;br /&gt;
| links_name4 = You can also browse the .NET ESAPI documentation here&lt;br /&gt;
| links_url5 = http://www.owasp.org/index.php/ESAPI_DotNET_Readme&lt;br /&gt;
| links_name5 = ESAPI .NET readme and release notes&lt;br /&gt;
| links_url6 = http://keepitlocked.net/archive/2009/07/29/owasp-net-esapi-0-2-released.aspx&lt;br /&gt;
| links_name6 = ESAPI for .NET design notes (Blog) &lt;br /&gt;
| links_url7 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name7 = General ESAPI information&lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = &lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 4/10/2009&lt;br /&gt;
| GPC_Notes = Empty template (.NET_Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_.NET_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Classic_ASP_Version&amp;diff=118455</id>
		<title>GPC Project Details/OWASP Enterprise Security API - Classic ASP Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Classic_ASP_Version&amp;diff=118455"/>
				<updated>2011-10-03T13:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Juan C Calderon 9/30/2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for Classic ASP&lt;br /&gt;
| project_description = This is the Microsoft Classic ASP 3.x language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Juan Carlos Calderon&lt;br /&gt;
| leader_email = johnccr@yahoo.com&lt;br /&gt;
| leader_username = Jcmax &lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name = Juan Carlos Calderon&lt;br /&gt;
| maintainer_email = johnccr@yahoo.com&lt;br /&gt;
| maintainer_username = Jcmax&lt;br /&gt;
| contributor_name1 = &lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = OWASP-Classic-ASP-Security-Project&lt;br /&gt;
| links_url1 = http://www.owasp.org/index.php/Classic_ASP_Security_Project&lt;br /&gt;
| links_name1 = OWASP Classic ASP Security Project Page&lt;br /&gt;
| links_url2 = http://code.google.com/p/owasp-esapi-classicasp/&lt;br /&gt;
| links_name2 = ESAPI for Classic ASP Google Code Repository&lt;br /&gt;
| links_url3 = http://www.owasp.org/index.php/ESAPI_ClassicASP_Readme&lt;br /&gt;
| links_name3 = ESAPI for Classic ASP readme and release notes&lt;br /&gt;
| links_url4 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name4 = General ESAPI information&lt;br /&gt;
| links_url5 = &lt;br /&gt;
| links_name5 = &lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = ESAPI for Classic ASP is currently &amp;quot;mounted&amp;quot; on ESAPI for .NET using interop, however the prevalence of random errors in the technology had make it non usable in real world. Starting on December 2010, the API will be re-written completely to ActiveX objects to avoid any issue related to interop and to other dependencies (.NET Framework) &lt;br /&gt;
| project_health_status = On Hold Until December 2010&lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = March 19, 2009&lt;br /&gt;
| current_release_download_link = http://www.owasp.org/index.php/File:OWASP_Classic_ASP_ESAPI.zip&lt;br /&gt;
| current_release_rating = Beta&lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = March 19, 2009&lt;br /&gt;
| last_reviewed_release_download_link = http://www.owasp.org/index.php/File:OWASP_Classic_ASP_ESAPI.zip&lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 4/10/2009&lt;br /&gt;
| GPC_Notes = template updated October 29, 2009 (Classic ASP Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_-_Classic_ASP_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_for_ColdFusion_-_CFML_Project&amp;diff=118363</id>
		<title>Projects/OWASP ESAPI for ColdFusion - CFML Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_ESAPI_for_ColdFusion_-_CFML_Project&amp;diff=118363"/>
				<updated>2011-09-30T19:27:17Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Damon Miller on 9/30&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for ColdFusion/CFML Project&lt;br /&gt;
| project_home_page = Category:OWASP Enterprise Security API&lt;br /&gt;
&lt;br /&gt;
| project_description = This is the ColdFusion/CFML language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project is '''not suitable''' for production use&lt;br /&gt;
&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD License]&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Damon Miller&lt;br /&gt;
| leader_email1 = damonmiller513@gmail.com&lt;br /&gt;
| leader_username1 = &lt;br /&gt;
&lt;br /&gt;
| contributor_name1 = Bill Shelton&lt;br /&gt;
| contributor_email1 = billshelton@comcast.net&lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
&lt;br /&gt;
| contributor_name2 = Jason Dean&lt;br /&gt;
| contributor_email2 = jason@12robots.com&lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
&lt;br /&gt;
| contributor_name[3-10] = &lt;br /&gt;
| contributor_email[3-10] = &lt;br /&gt;
| contributor_username[3-10] = &lt;br /&gt;
&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
&lt;br /&gt;
| presentation_link =&lt;br /&gt;
&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/esapi-user&lt;br /&gt;
&lt;br /&gt;
| project_road_map = http://code.google.com/p/owasp-esapi-coldfusion/wiki/RoadMap&lt;br /&gt;
&lt;br /&gt;
| links_url1 = https://github.com/damonmiller/cfesapi/&lt;br /&gt;
| links_name1 = GitHub repository&lt;br /&gt;
&lt;br /&gt;
| links_url2 = https://github.com/damonmiller/cfesapi/blob/master/README&lt;br /&gt;
| links_name2 =Readme and release notes&lt;br /&gt;
&lt;br /&gt;
| links_url3 = https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name3 =ESAPI Downloads&lt;br /&gt;
&lt;br /&gt;
| links_url4 = http://groups.google.com/group/cfesapi&lt;br /&gt;
| links_name4 =CFESAPI Mailing List&lt;br /&gt;
&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP ESAPI for ColdFusion - CFML Project&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_JavaScript_Version&amp;diff=118362</id>
		<title>GPC Project Details/OWASP Enterprise Security API JavaScript Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_JavaScript_Version&amp;diff=118362"/>
				<updated>2011-09-30T19:00:14Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is not suitable for production use as per email with Chris Schmidt on 9/30&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for JavaScript &lt;br /&gt;
| project_description = This is the JavaScript language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project '''is not''' suitable for production use&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Chris Schmidt&lt;br /&gt;
| leader_email =&lt;br /&gt;
| leader_username = Chris_Schmidt&lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name =&lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username = &lt;br /&gt;
| contributor_name1 = &lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = &lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-js&lt;br /&gt;
| links_name1 = ESAPI for JavaScript Google Code repository&lt;br /&gt;
| links_url2 = http://www.owasp.org/index.php/ESAPI_JavaScript_Readme&lt;br /&gt;
| links_name2 = ESAPI JavaScript readme and release notes&lt;br /&gt;
| links_url3 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name3 = General ESAPI information&lt;br /&gt;
| links_url4 = &lt;br /&gt;
| links_name4 = &lt;br /&gt;
| links_url5 = &lt;br /&gt;
| links_name5 = &lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = &lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 10/03/2010&lt;br /&gt;
| GPC_Notes = Empty template (JavaScript Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_JavaScript_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Force.com_Version&amp;diff=118361</id>
		<title>GPC Project Details/OWASP Enterprise Security API - Force.com Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_-_Force.com_Version&amp;diff=118361"/>
				<updated>2011-09-30T18:58:07Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is suitable for production use, as per email from Brian Soby on 9/30&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for Force.com &lt;br /&gt;
| project_description = This is the Force.com language version of OWASP ESAPI.&lt;br /&gt;
* The current release of this project '''is''' suitable for production use&lt;br /&gt;
| project_license = [http://www.opensource.org/licenses/bsd-license.php New BSD license]&lt;br /&gt;
| leader_name = Yoel Gluck (securecloud .at. salesforce.com)&lt;br /&gt;
| leader_email = &lt;br /&gt;
| leader_username = Yoelgluck&lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name =&lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username = &lt;br /&gt;
| contributor_name1 = &lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = &lt;br /&gt;
| links_url1 = http://code.google.com/p/force-dot-com-esapi/&lt;br /&gt;
| links_name1 = ESAPI for Force.com Google Code repository&lt;br /&gt;
| links_url2 =&lt;br /&gt;
| links_name2 =&lt;br /&gt;
| links_url3 =&lt;br /&gt;
| links_name3 =&lt;br /&gt;
| links_url4 = &lt;br /&gt;
| links_name4 = &lt;br /&gt;
| links_url5 = &lt;br /&gt;
| links_name5 = &lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = &lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 10/22/2010&lt;br /&gt;
| GPC_Notes = Empty template (Force.com Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_Force.com_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_Java_EE_Version&amp;diff=118274</id>
		<title>GPC Project Details/OWASP Enterprise Security API Java EE Version</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API_Java_EE_Version&amp;diff=118274"/>
				<updated>2011-09-30T00:50:30Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Added note that the current release of this project is suitable for production use&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP Project Identification Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP ESAPI for Java EE&lt;br /&gt;
| project_description = This is the Java EE language version of OWASP ESAPI. The ESAPI for Java EE is the baseline ESAPI design.&lt;br /&gt;
* The current release of this project '''is''' suitable for production use&lt;br /&gt;
* The ESAPI 2.0 branch supports Java 1.5 and above. You may view the Javadocs here http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/index.html &lt;br /&gt;
* The ESAPI 1.4 branch supports Java 1.4 and above. Complete information on latest 1.4 branch dependencies can be found here http://owasp-esapi-java.googlecode.com/svn/trunk_doc/1.4.4/site/dependencies.html&lt;br /&gt;
* The OWASP AppSensor-ESAPI integration guide is out! [[AppSensor_GettingStarted]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- We are not keeping this up to date....&lt;br /&gt;
'''''Latest News:'''''&lt;br /&gt;
&amp;lt;twitter&amp;gt;90496975&amp;lt;/twitter&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| project_license = [http://en.wikipedia.org/wiki/BSD_license BSD license]&lt;br /&gt;
| leader_name = Jeff Williams&lt;br /&gt;
| leader_email = jeff.williams@owasp.org&lt;br /&gt;
| leader_username = Jeff_Williams&lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name = Jim Manico&lt;br /&gt;
| maintainer_email = jim.manico@owasp.org&lt;br /&gt;
| maintainer_username = Jmanico&lt;br /&gt;
| contributor_name1 = Chris Schmidt&lt;br /&gt;
| contributor_email1 = chrisisbeef@gmail.com&lt;br /&gt;
| contributor_username1 = Chris_Schmidt&lt;br /&gt;
| contributor_name2 = Kevin W. Wall&lt;br /&gt;
| contributor_email2 = kevin.w.wall@gmail.com&lt;br /&gt;
| contributor_username2 = Kevin_W._Wall&lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 =&lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link = &lt;br /&gt;
| mailing_list_name = esapi-dev&lt;br /&gt;
| links_url1 = http://code.google.com/p/owasp-esapi-java/downloads/list&lt;br /&gt;
| links_name1 = All ESAPI Downloads&lt;br /&gt;
| links_url2 = http://owasp-esapi-java.googlecode.com/files/ESAPI-1.4.4.zip&lt;br /&gt;
| links_name2 = ESAPI 1.4.4 - complete zip (Java 1.4+) &lt;br /&gt;
| links_url3 = http://code.google.com/p/owasp-esapi-java&lt;br /&gt;
| links_name3 = Google code repository for ESAPI JAVA&lt;br /&gt;
| links_url4 = http://code.google.com/p/owasp-esapi-java/issues/list&lt;br /&gt;
| links_name4 = Report a bug! (requires Google account)&lt;br /&gt;
| links_url5 = http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/index.html&lt;br /&gt;
| links_name5 = ESAPI 2.0 rc11 Javadocs&lt;br /&gt;
| links_url6 = http://owasp-esapi-java.googlecode.com/svn/trunk_doc/1.4.4/index.html&lt;br /&gt;
| links_name6 = ESAPI 1.4.4 Javadocs&lt;br /&gt;
| links_url7 = http://www.owasp.org/index.php/ESAPI-Building&lt;br /&gt;
| links_name7 = How to build ESAPI 2.0 with Maven&lt;br /&gt;
| links_url8 = http://www.owasp.org/index.php/ESAPI-BuildingWithEclipse&lt;br /&gt;
| links_name8 = How to build ESAPI 2.0 with Maven via Eclipse&lt;br /&gt;
| project_road_map = &lt;br /&gt;
| project_health_status = &lt;br /&gt;
| current_release_name = &lt;br /&gt;
| current_release_date = &lt;br /&gt;
| current_release_download_link = &lt;br /&gt;
| current_release_rating = &lt;br /&gt;
| current_release_leader_name = &lt;br /&gt;
| current_release_leader_email = &lt;br /&gt;
| current_release_leader_username =&lt;br /&gt;
| current_release_details =  &lt;br /&gt;
| last_reviewed_release_name = &lt;br /&gt;
| last_reviewed_release_date = &lt;br /&gt;
| last_reviewed_release_download_link = &lt;br /&gt;
| last_reviewed_release_rating = &lt;br /&gt;
| last_reviewed_release_leader_name = &lt;br /&gt;
| last_reviewed_release_leader_email = &lt;br /&gt;
| last_reviewed_release_leader_username = &lt;br /&gt;
| old_release_name1 = &lt;br /&gt;
| old_release_date1 = &lt;br /&gt;
| old_release_download_link1 = &lt;br /&gt;
| old_release_name2 = &lt;br /&gt;
| old_release_date2 = &lt;br /&gt;
| old_release_download_link2 = &lt;br /&gt;
| old_release_name3 = &lt;br /&gt;
| old_release_date3 = &lt;br /&gt;
| old_release_download_link3 = &lt;br /&gt;
| old_release_name4 = &lt;br /&gt;
| old_release_date4 = &lt;br /&gt;
| old_release_download_link4 = &lt;br /&gt;
| old_release_name5 = &lt;br /&gt;
| old_release_date5 = &lt;br /&gt;
| old_release_download_link5 = &lt;br /&gt;
| last_GPC_update = 4/10/2009&lt;br /&gt;
| GPC_Notes = Empty template (Java EE Version)&lt;br /&gt;
| project_home_page = :Category:OWASP_Enterprise_Security_API&lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_Enterprise_Security_API_Java_EE_Version&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Secure_Web_Application_Framework_Manifesto/Releases/Current/Manifesto&amp;diff=94375</id>
		<title>Projects/OWASP Secure Web Application Framework Manifesto/Releases/Current/Manifesto</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Secure_Web_Application_Framework_Manifesto/Releases/Current/Manifesto&amp;diff=94375"/>
				<updated>2010-11-29T23:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Secure Web Application Framework Manifesto''&lt;br /&gt;
&lt;br /&gt;
Authors: Tom Aratyn, Sahba Kazerooni, Patrick Szeto, &amp;amp; Rohit Sethi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mission Statement =&lt;br /&gt;
The Secure Web Application Framework Manifesto is a document detailing a specific set of security requirements for developers of web application frameworks to adhere to. The manifesto centers around the following beliefs:&lt;br /&gt;
&lt;br /&gt;
* Frameworks that are ‘secure by default’ will yield a dramatic reduction in the number of common web application security vulnerabilities.&lt;br /&gt;
* Application security experts should provide, on a regularly basis, updated guidance to framework developers on how to incorporate mechanisms to avoid newly discovered vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Developers are increasingly relying on scaffolding-based systems like Rails and Django to build applications. The number of web application frameworks, scaffolding or otherwise, is constantly growing and it's becoming increasingly clear that securing these frameworks will be a major boon for the future of secure web applications.&lt;br /&gt;
&lt;br /&gt;
In the words of Jeff Williams, we have plenty of &amp;quot;painkillers&amp;quot; for web application framework developers to follow such as lists of vulnerabilities to avoid. The Security Analysis of Core J2EE Patterns was our first attempt at providing &amp;quot;vitamins&amp;quot; or positive advice to framework developers on what they should do to incorporate security into their design. Recognizing that many developers are gravitating to leveraging web application frameworks, we decided it was time to provide a list of positive features that these frameworks should include.&lt;br /&gt;
&lt;br /&gt;
This &amp;quot;Secure Web Application Framework Manifesto&amp;quot; must, of course, be a living document. At any given point, it should provide a minimum baseline of what a web application framework should include to appeal to security-conscious developers. We contend that if such a web application framework is broadly adopted, it will have far reaching effects into web application security.&lt;br /&gt;
&lt;br /&gt;
Adhering to the manifesto is only a starting point. Developers still can, and surely will, introduce vulnerabilities not covered by the manifesto; especially those pertaining to their core domain such as fine-grained authorization. Secure-by-default frameworks are compliments but not substitutes for developer security awareness. &lt;br /&gt;
&lt;br /&gt;
The Manifesto is not an exhaustive specification. It is designed to provide a minimum standard for frameworks to adhere to in order to facilitate development of secure web applications. Some of these features will come with tradeoffs in performance or usability. Security features should be turned on by default with the option to turn them off explicitly. In some cases, the usability or performance trade-offs may be so great that framework developers will turn the features off by default. Such decisions should be the exception and not the norm.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
We owe a debt of gratitude to Arshan Dabirsiaghi and the entire OWASP [http://www.owasp.org/index.php/Category:Intrinsic_Security_Working_Group Intrinsic Security Working Group]. The ISWG aims to measure the security of various frameworks – the inverse of the Secure Web Application Framework Manifesto, which aims to provide the measuring stick itself. Although we initially started this manifesto independent of their work, cross referencing their requirements helped us identify gaps in the Manifesto.&lt;br /&gt;
&lt;br /&gt;
Similarly, James Landis was kind enough to provide us with a similar body of work he put together in defining requirements for a secure web application framework. His ideas also helped shape the manifesto.&lt;br /&gt;
&lt;br /&gt;
We also would like to thank the following individuals for their insight and support in creating the manifesto:&lt;br /&gt;
&lt;br /&gt;
* Jim Manico&lt;br /&gt;
* Dinis Cruz&lt;br /&gt;
* James McGovern&lt;br /&gt;
* Paco Hope&lt;br /&gt;
* Paul Johnston&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
== Injection Prevention ==&lt;br /&gt;
Confounding data with executable code is the cause of the most pervasive application security problems: Cross Site Scripting (XSS), SQL injection, buffer overflow and several others. The fundamental problem arises when developers can mix user-supplied or user-influenced data, such as HTTP parameters, with static or system-generated code. The resultant data is then executed or otherwise interpreted by a process which can no longer differentiate the code from the data. An obvious example of this principle at work is [http://www.owasp.org/index.php/SQL_Injection SQL injection]. Pseudo code:&lt;br /&gt;
&lt;br /&gt;
 bad_query = &amp;quot;select * from accounts where accountid = '&amp;quot; + user_supplied_value + &amp;quot;'&amp;quot;;&lt;br /&gt;
 DatabaseTool.executeQuery(bad_query);&lt;br /&gt;
&lt;br /&gt;
In this example, the database tool has no way to differentiate which parts of the query variable came from the string literal and which parts came from the user supplied value. Most modern programming languages and development frameworks offer a way around this by offering parameterized queries or prepared statements.&lt;br /&gt;
&lt;br /&gt;
Pseudo code:&lt;br /&gt;
&lt;br /&gt;
 PreparedStatement good_query = &amp;quot;select * from accounts where accountid = ?&amp;quot;;&lt;br /&gt;
 good_query.setParameter(1, user_supplied_value)&lt;br /&gt;
 DatabaseTool.executeParameterizedQuery(good_query);&lt;br /&gt;
&lt;br /&gt;
DatabaseTool has a few ways to protect against the vulnerability in the second example. For example, the tool could pre-compile the string literal and pass the parameters to the database separately. The database is then responsible for not misinterpreting any portion of the user supplied data as SQL code. Such an approach renders SQL injection impossible. &lt;br /&gt;
&lt;br /&gt;
Another approach is to encode unsafe data in a context relevant format. For example: to mitigate against Cross Site Scripting, a secure web application framework could automatically HTML, HTML attribute, cascading style sheet, or JavaScript encode nearly all non alpha-numeric characters depending on the context. The encoding functions in the [http://code.google.com/p/owasp-esapi-java/ OWASP ESAPI project for Java] serve as an excellent reference for this approach. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Tools that Output Data Which is Safe from Interpretation by Browsers ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide tools that take potentially dangerous data, such as user-supplied input, and outputs the data to Hyper Text Markup Language (HTML), Cascading Style Sheet (CSS), or client-side script. The data should be outputted in such a way that all supported web browsers will not interpret the result as including meta-characters for code. In particular, the output should not contain valid HTML markup, CSS code, or client-side script code such as JavaScript. Tag libraries must, by default, employ these tools when outputting user-supplied data.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XSS Cross Site Scripting (XSS)]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The most common implementation of this feature is to escape potentially dangerous characters such that they will not be interpreted by the browser as HTML markup, CSS code, or JavaScript. Most implementations use HTML entities, CSS escaping, and JavaScript escaping respectively. &lt;br /&gt;
&lt;br /&gt;
Knowing which form of escaping to use means understanding where the data will be output. The Open Web Application Security Project (OWASP) Enterprise Security Application Programming Interface (ESAPI) for Java project provides multiple [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/2.0-rc5/org/owasp/esapi/Encoder.html encoding functions] and requires the developer to select the correct function depending on context.&lt;br /&gt;
&lt;br /&gt;
If a framework is context aware (i.e. understands whether data will be output to HTML, CSS, or JavaScript) then it can automatically select the correct encoding format. Although not always possible, such functionality is ideally suited for template-based server pages such as ASP, JSP, or PHP. See [http://googleonlinesecurity.blogspot.com/2009/03/reducing-xss-by-way-of-automatic.html Google’s template system]. &lt;br /&gt;
&lt;br /&gt;
An important consideration is which characters to encode versus which characters to leave unencoded. Excessive encoding may mean extra performance and transmission costs, whereas under encoding may mean missing dangerous characters and leaving applications susceptible to attack. Where possible, decide upon a whitelist of valid characters, such as characters within the Unicode Alpha or Numeric classes, and encode all other characters.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these tools to output data to HTML, JavaScript, or CSS. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;The only exception should be for functions that must, by design, output valid HTML markup, JavaScript, CSS – for example, a tag that generates “&amp;lt;b&amp;gt;” and “&amp;lt;/b&amp;gt;” markers to denote bold text.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Parameterized Query Functionality for SQL Statements ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide tools that allow developers to create static SQL String literals with the ability to bind parameters at runtime. This functionality is commonly referred to as Parameterized Queries or Prepared Statements. Databases must not interpret bound parameters as valid SQL escape sequences, such as an apostrophe to delimit a string. Note that that term “parameterized ''query''” does not just refer to Select statements, it also refers to other common SQL statements, such as Insert, Update, and Delete&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/SQL_Injection SQL injection] &lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Two common implementations include:&lt;br /&gt;
* Pre-compiling the string literal and transmitting the parameters to the database separately. The database is then responsible for maintaining a distinction between the SQL statement and the parameters&lt;br /&gt;
&lt;br /&gt;
* Contextual escaping, similar to the defense described in “3.1.1Data Which is Safe from Interpretation by Browsers”. Note that any such escaping should account for different possible encoding formats of the underlying database&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration '''always '''use parameterized queries; '''never '''use dynamic statements consisting of dynamically concatenated string literals and parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Tools that Output Data Which is Safe from Interpretation by XML Processors ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide tools that take potentially dangerous data, such as user-supplied input, and outputs the data to XML. The data should be outputted in such a way that an XML validator, parser, or other processor will not interpret the result as including meta-characters for XML code. In particular, the output should not contain XML element, XML attribute, XML comment, CData, Document Type Definition (DTD), XML Stylesheet, preprocessing, or any other XML tags. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Testing_for_XML_Injection_%28OWASP-DV-008%29 XML injection]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The most common implementation of this feature is to escape potentially dangerous characters using [http://www.xml.com/pub/a/2001/01/31/qanda.html XML entities] and / or [http://www.w3.org/TR/2004/REC-xml-20040204/ numeric character reference]. Unlike “3.1.1Data Which is Safe from Interpretation by Browsers”, this requirement applies to a single output type, and does not encompass the same complexities associated with Cross Site Scripting mitigation. See the Open Web Application Security Project (OWASP) Enterprise Security Application Programming Interface (ESAPI) for Java project provides an example of [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/2.0-rc5/org/owasp/esapi/Encoder.html XML encoding].&lt;br /&gt;
&lt;br /&gt;
An important consideration is which characters to encode versus which characters to leave unencoded. Excessive encoding may mean extra performance and transmission costs, whereas under encoding may mean missing dangerous characters and leaving applications susceptible to attack. Where possible, decide upon a whitelist of valid characters, such as characters within the Unicode Alpha or Numeric classes, and encode all other characters.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these tools to output data to XML. &lt;br /&gt;
&lt;br /&gt;
Pseudo code:&lt;br /&gt;
&lt;br /&gt;
 xmlText = &amp;lt;nowiki&amp;gt;“&amp;lt;element&amp;gt;” + SafeXMLFunction(userParameter) + “&amp;lt;/element&amp;gt;”&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only exception should be for functions that must, by design, output valid XML tags – for example, a function that generates standard Simple Object Access Protocol (SOAP) element tags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Parameterized Query Functionality for XPath Statements ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide tools that allow developers to create static XPath String literals with the ability to bind parameters at runtime, similar to Parameterized Queries for SQL. XPath engines must not interpret bound parameters as valid XML escape sequences, such as an apostrophe to delimit a string. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XPATH_Injection XPath injection]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
As with SQL Parameterized Queries, two possible implementations include:&lt;br /&gt;
&lt;br /&gt;
•Pre-compiling the string literal and transmitting the parameters to the XPath engine separately. The XPath engine is then responsible for maintaining a distinction between the XPath statement and the parameters (see [http://blogs.msdn.com/shjin/archive/2005/07/25/443077.aspx this article]&amp;lt;nowiki&amp;gt; from the Microsoft Developer Network [MSDN])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
•Contextual escaping, similar to the defense described in “3.1.1Provide Tools that Output Data Which is Safe from Interpretation by Browsers”. Note that any such escaping should account for different possible encoding formats of the underlying database&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these tools to perform XPath queries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Parameterized Query Functionality for LDAP Statements ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide tools that allow developers to create static Lightweight Directory Access Protocol (LDAP) String literals with the ability to bind parameters at runtime, similar to Parameterized Queries for SQL. LDAP directories must not interpret bound parameters as valid LDAP escape sequences, such as an asterisk to denote a wildcard character . &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/LDAP_injection LDAP injection]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
As with SQL Parameterized Queries, two possible implementations include:&lt;br /&gt;
&lt;br /&gt;
•Pre-compiling the string literal and transmitting the parameters to the LDAP directory separately. The LDAP engine is then responsible for maintaining a distinction between the LDAP Path statement and the parameters&lt;br /&gt;
&lt;br /&gt;
•Contextual escaping, similar to the defense described in “3.1.1Provide Tools that Output Data Which is Safe from Interpretation by Browsers”. Note that any such escaping should account for different possible encoding formats of the underlying database&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these tools to perform LDAP queries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Disallow Newline Characters from Untrusted Data in HTTP Response Headers  ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
For all functions that can modify HTTP response headers, such as a redirect function or the “Set-Cookie” header, disallow newline characters in potentially un-trusted parameters. For example, disallow newline characters inside of a cookie value or URL for a redirect. &lt;br /&gt;
&lt;br /&gt;
Note that the term disallow is purposefully undefined; framework developers should use the best approach to match their needs, such as:&lt;br /&gt;
&lt;br /&gt;
* Strip newline characters out&lt;br /&gt;
** Note that whenever stripping a potentially malicious character, ensure the resuling string is also free from dangerous characters. For example “%%0A0A” would still result in a URL encoded newline character if the “%0A” was stripped out once.&lt;br /&gt;
* Cause an error condition&lt;br /&gt;
* Replace newline characters with a safe equivalent, such as the literal string “\n” or ”\r”&lt;br /&gt;
&lt;br /&gt;
Common functions that can modify HTTP response headers include:&lt;br /&gt;
&lt;br /&gt;
* Setting HTTP status code&lt;br /&gt;
* Setting URL for a redirect&lt;br /&gt;
* Setting cookie name, value, path, secure flag, HttpOnly flag, or expiry&lt;br /&gt;
&lt;br /&gt;
Framework developers may wish to provide an option to turn this functionality off for compatibility, performance, or other reasons; however, it must be turned on by default for new applications. Store this configuration setting in a centralized, auditable security settings file.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/HTTP_Response_Splitting HTTP response splitting]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Use a regular expression to replace carriage returns and line feeds with safe equivalents; namely, the string literals “\n” and “\r”.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
State that affected methods may not work as intended if users intentionally supply newline characters into HTTP response splitting. Indicate that solution addresses Http Response Splitting and, if appropriate, describe how to turn the feature off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
=== Provide Option to Disallow Newline Characters in Text File Logging  ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide an option in logging functionality to automatically disallow writing newline characters in text file-based logs. Modifying all log statements may incur significant overhead, thus this requirement is an option rather than a default setting. Store this configuration setting in a centralized, auditable security settings file.&lt;br /&gt;
&lt;br /&gt;
For HTML-based logging use the tools described in “3.1.1Provide Tools that Output Data Which is Safe from Interpretation by Browsers”. For XML-based logging use the tools described in “3.1.3 Data Which is Safe from Interpretation by XML Processors”.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Log_injection Log injection]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Use a regular expression to replace carriage returns and line feeds with safe equivalents; namely, the string literals “\n” and “\r”.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Provide clear instructions on how to modify this setting, as well as the security implications of keeping the default value as turned off.&lt;br /&gt;
&lt;br /&gt;
== Input Validation ==&lt;br /&gt;
=== Provide Configurable Validation for All Forms of User-Supplied Input ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide a mechanism to validate the content of all user-supplied input without directly modifying other application code. For example, provide a configuration file that allows users to supply regular expressions to validate HTTP parameters for any page. &lt;br /&gt;
&lt;br /&gt;
The types of input to validate must include, at a minimum:&lt;br /&gt;
&lt;br /&gt;
* HTTP request parameter names&lt;br /&gt;
* HTTP request parameter values&lt;br /&gt;
* HTTP request header names&lt;br /&gt;
* HTTP request header values&lt;br /&gt;
* URLs&lt;br /&gt;
* Cookie names&lt;br /&gt;
* Cookie values&lt;br /&gt;
* SQL statement results&lt;br /&gt;
* Input from a proprietary format, such as Flash Action Message Format &lt;br /&gt;
* Remotely accessible Application Program Interfaces (APIs), such as Simple Object Access Protocol (SOAP) or Representational State Transfer (REST) endpoints&lt;br /&gt;
&lt;br /&gt;
Where possible, store the validation configurations setting in a centralized, standard location. Ideally, developers / administrators should be able to make changes to validation logic during application deployment rather than requiring a rebuild. &lt;br /&gt;
&lt;br /&gt;
Optionally, provide a tool that allows security auditors to easily determine which forms of input the application is currently validating through the validation engine. &lt;br /&gt;
&lt;br /&gt;
Optionally, provide sample regular expressions useful for whitelist validation of common data types such as phone numbers, zip codes, etc.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement is part of a defense in depth strategy. Although providing configurable validation does not, in itself, mitigate specific vulnerabilities it does help provide defense in depth. Input validation is particularly useful as additional defense for injection attacks, such as:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XSS Cross site scripting (XSS)]&lt;br /&gt;
* [http://www.owasp.org/index.php/SQL_Injection SQL injection] &lt;br /&gt;
* [http://www.owasp.org/index.php/Testing_for_XML_Injection_%28OWASP-DV-008%29 XML injection]&lt;br /&gt;
* [http://www.owasp.org/index.php/XPATH_Injection XPath injection]&lt;br /&gt;
* [http://www.owasp.org/index.php/LDAP_injection LDAP injection]&lt;br /&gt;
* [http://www.owasp.org/index.php/HTTP_Response_Splitting HTTP response splitting]&lt;br /&gt;
* [http://www.owasp.org/index.php/Log_injection Log injection]&lt;br /&gt;
&lt;br /&gt;
In addition, input validation can help against undiscovered input / injection attacks as well as attacks on downstream systems.&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Use a configuration file similar to the [http://struts.apache.org/1.2.4/userGuide/dev_validator.html Apache Struts Validator] plug-in. Note that the Validator plugin only provides input validation for form fields; a secure framework should provide a similar mechanism for ''all'' forms of user-supplied input.&lt;br /&gt;
&lt;br /&gt;
The architecture of the validation configuration should follow the default application architecture. For example, if the default application uses a single HTML page with many different command parameters to represent different transactions, then the validation framework should allow developers to specify different validation for different commands – distinguishing the “command=” parameter from other parameters.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Demonstrate examples of the validation logic as part of normal application development. Include validation examples in user manuals, tutorials, demonstration/sample code, and all other documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use Whitelist Validation for File Paths and Names in File Handling Functionality ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
For each supported operating system, only allow legal characters in the file paths and file names in the file handling functionality such as open and save. Disallow, for example, null characters. This functionality is particularly important since file handling often relies on lower-level operating system commands. Strings in operating system functions may be null-terminated even if framework strings are not null-terminated.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference Insecure direct object reference]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how this feature works, what impact it may have on file handling, and how to turn it off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Specify an Encoding Format for Every HTTP Response Page ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Assign a consistent encoding format such as UTF-8 to all HTTP response pages unless there is a specific reason to use a different format. Allow developers to define the default encoding format.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XSS Cross site scripting (XSS)]&lt;br /&gt;
** [http://www.juniper.net/security/auto/vulnerabilities/vuln34917.html Obscure cross-site scripting vectors]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Django provides a [http://code.djangoproject.com/wiki/StringEncoding configuration option] for default character set.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how this feature works, what impact it may have on internationalization, and how to turn it off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do Not Accept Characters with Illegal Byte Sequences or Overly Long Forms for a Given Encoding ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Overly long and malformed characters in variable length encoding formats such as UTF-8 can be used to bypass filters and may sometimes be translated to the proper format after sanitization by a different component or application. Only accept legal character sequences.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://capec.mitre.org/data/definitions/80.html Filter bypass]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The W3C provides a [http://www.w3.org/International/questions/qa-forms-utf-8.en.php regular expression] to validate UTF-8 characters.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In reference documentation describe that this feature exists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Function to Detect HTTP Parameter Tampering ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
In some cases end users should not be able to modify certain parameters, such as some hidden form fields. Provide a server-side mechanism that detects tampering of “read-only” parameters without the overhead of storing these parameters on the server.&lt;br /&gt;
&lt;br /&gt;
The framework will not necessarily know about ''all ''read-only parameters; however, the framework should be able to automatically identify ''some ''read-only parameters (e.g. hidden form fields with static values), and allow individual developers to identify other read-only parameters. If applied transparently, this feature may break functionality, so provide options to turn the feature on for specific forms or across the application.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Web_Parameter_Tampering Parameter Manipulation]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The .Net framework provides a defense in the form of an [http://en.wikipedia.org/wiki/HMAC HMAC] for [http://msdn.microsoft.com/en-us/library/bb386448.aspx ViewState]. The HMAC solution:&lt;br /&gt;
&lt;br /&gt;
* Takes a hash of read-only fields in a form prior to sending them to the client&lt;br /&gt;
* Encrypts that hash with a secret key stored on the server&lt;br /&gt;
* Adds the hashed and encrypted value as an additional hidden field in the form&lt;br /&gt;
* Upon form submission, rehashes and re-encrypts the read only client-supplied parameters and compares the hash with the client-supplied HMAC parameter. Any difference indicates that one or more of the read only parameters were tampered with&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Provide detailed documentation on how to enable this feature and how it works. Include (if applicable) how the framework creates and stores cryptographic keys, how developers can change cryptographic algorithms, and how to configure the feature to work in load balanced environments. Always enable the feature for read-only form fields in samples and tutorials.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automatically Generate Content Security Policy (CSP) Headers ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Mozilla proposed [http://people.mozilla.org/~bsterne/content-security-policy/ CSP] to help protect against Cross Site Scripting. Although CSP, at the time of this writing, is not fully implemented in most browsers, a secure web application framework should proactively provide this control for when CSP becomes standard.&lt;br /&gt;
&lt;br /&gt;
CSP allows developers to specify which domains a web application allows to host its scripts. A browser that complies with CSP will, when instructed to, only run scripts from the whitelisted domains and avoid executing inline or event handling HTML attribute scripts. CSP also helps protect against [http://ha.ckers.org/blog/20080915/clickjacking/ Clickjacking] by specifying “which sites may embed contents from my site”. Finally, CSP provides for an optional report-url to which all policy violations will be reported, allowing detection of attacks and proactive response to protect non-CSP enabled browsers.&lt;br /&gt;
&lt;br /&gt;
Automatically generate CSP headers that restrict script access to the application’s domain and prevent inline / event handling HTML attribute scripts unless necessary. Provide tools to easily extend the list of white-listed domains when required. By default, disallow all other sites from being embedded within the application’s contents unless necessary.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XSS Cross Site Scripting (XSS)]&lt;br /&gt;
* [http://www.owasp.org/index.php/Clickjacking Clickjacking]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how this feature works, what impact it may have on embedded scripts, and how to turn it off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automatically Generate Origin Headers ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Mozilla proposed the [http://people.mozilla.org/~bsterne/content-security-policy/origin-header-proposal.html Origin Header] to protect against Cross Site Request Forgery (CSRF). Supporting clients send information about the originating domain of each request to the server. &lt;br /&gt;
&lt;br /&gt;
Where possible, verify that the origin of a request is from the expected domain. In particular, verify that application form fields originate from the application’s domain. Generate errors for requests with invalid origins.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/CSRF Cross Site Request Forgery]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how this feature works, what impact it may have on application integration, and how to turn it off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Specify a Default Maximum Payload Size for All Inbound Interfaces ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Check the size of payloads from all inbound interfaces prior to processing. If the payload size exceeds a default maximum generate an error. Allow developers to change the default size and turn off the feature. &lt;br /&gt;
&lt;br /&gt;
At a minimum, provide payload size checks for:&lt;br /&gt;
&lt;br /&gt;
* HTTP Requests&lt;br /&gt;
** Optionally, provide different configuration for file upload functions to allow for larger payloads&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;XML requests (e.g. Simple Object Access Protocol [SOAP])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Any other programmatic interface (e.g. Remote Method Invocation over Internet Inter-Orb Protocol [RMI IIOP])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Application_Denial_of_Service Denial of Service]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Web servers often provide a maximum configurable HTTP request body size. See the Apache web server [http://httpd.apache.org/docs/2.0/mod/core.html LimitRequestBody directive].&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how this feature works, what impact it may have on large payloads, and how to turn it off along with an appropriate warning of the resultant risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Authentication and Authorization ==&lt;br /&gt;
=== Enforce Default Deny Policy for Framework Managed Authorization ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Some frameworks elect to provide managed authorization services, such as determining whether a user has sufficient privileges to view a specific page. Ensure that managed authorization services always deny access by default unless explicitly instructed otherwise.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.aspectsecurity.com/documents/Bypassing_VBAAC_with_HTTP_Verb_Tampering.pdf HTTP Verb Tampering]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The [http://static.springsource.org/spring-security/site/docs/3.0.x/reference/authz-arch.html Spring Security authorization] module employs default deny using the [http://static.springsource.org/spring-security/site/docs/3.0.x/reference/authz-arch.html RoleVoter] for role-based access control.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document the default deny behavior when describing the authorization functionality. Provide instructions on how developers can grant access to more users when necessary. If the framework provides a default-accept option, strongly discourage developers from using it and explain the associated risks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Indirect Object Reference Functionality ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide functionality that creates and translates indirect references for a specific file, a set of files, or all files in a particular directory or directories.&lt;br /&gt;
&lt;br /&gt;
Applications often allow users to access sensitive resources such as user-specific files from the application server. Direct object references use the actual file name (e.g. “file=statement1.pdf”) whereas indirect object references provide an independent identifier that the application later translates into an actual filename (e.g. “file=a”, where ‘a’ later translates to statement1.pdf).The problem with the former method is that attackers can sometimes access files that they shouldn’t (e.g. “file=../config.xml”). An indirect object reference renders such an attack impossible because the application only provides access to a specified set of files (e.g. all files in a particular directory, or a predefind list of individual files). Unfortunately, the complexity of creating an indirect object reference for each file that is to be accessed by the end user means that many developers end up favoring direct object references. Providing functionality to automate this task incentivizes developers to rely on indirect object references.&lt;br /&gt;
&lt;br /&gt;
Note that this control applies specifically to resources that require access control. Publicly-accessible static content such as JavaScript or Cascading Style Sheet files that are normally stored on web servers do not necessarily need this protection. On web servers, use operating system or server controls to prevent forcible [http://www.owasp.org/index.php/Path_Traversal Path Traversal] attacks.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-Insecure_Direct_Object_Reference Insecure Direct Object Reference]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
See the [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/org/owasp/esapi/reference/IntegerAccessReferenceMap.html ESAPI Java AccessReferenceMap] and [http://support.microsoft.com/kb/910442 .Net’s Web Resource mechanism] for examples of this functionality.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these tools for accessing server-side files except for publicly-accessible static content (e.g. common JavaScript libraries). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide a Function That Hashes and Salts Input with Random Bytes ===&lt;br /&gt;
Provide all the functionality necessary for a developer to implement secure authentication. In particular, authentication should use a secure hashing algorithm salted with a fixed length random byte sequence (see). Both the hashing algorithm and salt length should be configurable in case a particular hashing function is defeated in the future. Secure web application frameworks should default to stronger, slower hashing algorithms (e.g. SHA-2) instead of fast algorithms (e.g. MD5 and SHA-1) to mitigate the risk of off-line brute forcing.&lt;br /&gt;
&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide the following two functions:&lt;br /&gt;
&lt;br /&gt;
# A function that hashes user input using a configurable, strong hashing algorithm (e.g. SHA-2) and adds a configurable-length random salt value&lt;br /&gt;
# A function that checks equality of a plaintext value with a hashed, salted value derived from function 1)&lt;br /&gt;
&lt;br /&gt;
Developers can use these two functions respectively to facilitate securely storing a new password (e.g. new user registration or password reset) and to authenticate a user against a securely stored password.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Rainbow_tables Rainbow tables]&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-A8 Insecure cryptographic storage]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
[http://www.jasypt.org/encrypting-passwords.html Jasypt] exposes passwordEncryptor.encryptPassword() for function 1) and passwordEncryptor.checkPassword for function 2). See [http://www.jasypt.org/howtoencryptuserpasswords.html this explanation] for details on how Jasypt stores the salt value and uses it for password comparisons.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use these functions for new user registration, password change, and password-based authentication.&lt;br /&gt;
&lt;br /&gt;
== Session Management ==&lt;br /&gt;
=== Use Cryptographically Secure Random Numbers for Session IDs ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Create session IDs from Cryptogaphically Strong Random Number Generators such as Java’s [http://java.sun.com/j2se/1.4.2/docs/api/java/security/SecureRandom.html SecureRandom] rather than a pseudo random number generator like the [http://www.aquaphoenix.com/ref/gnu_c_library/libc_255.html rand()] function in C.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Insufficient_entropy_in_pseudo-random_number_generator Insufficient entropy in pseudo random number generators]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Tomcat uses [http://tomcat.apache.org/tomcat-6.0-doc/config/manager.html SecureRandom numbers] for Session IDs by default.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Describe how the framework generates session IDs in documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Automatic Anti-CSRF Tokens ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Many web application frameworks create or render links and pages derived from form submission pages. Provide an option to transparently add and validate [http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet anti-CSRF tokens] to form submissions where possible. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/CSRF Cross Site Request Forgery]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
[http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ Django] provides this functionality optionally.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Where possible, turn this feature on in all user manuals, tutorials, demonstration/sample code, and all other documentation. Explain how the feature works and the risk associated with not using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automatically Reset Session IDs After Authentication ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Change the Session ID of a user after successful authentication. Note that this feature requires knowledge of when authentication occurs. Such knowledge is trivial in framework-managed authentication but more difficult if developers elect to use custom or third party authentication. Provide a hook for the developer to tell the framework when authentication occurs in cases where the framework can’t make that determination automatically (e.g. user.hasAuthenticated() ). &lt;br /&gt;
&lt;br /&gt;
If developers can associate server-side state with a session then retain that state when the session ID changes.&lt;br /&gt;
&lt;br /&gt;
In some cases, particularly when working with legacy components, changing session IDs after authentication may break functionality. Provide an option to disable this functionality.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Session_Fixation Session fixation] &lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Spring Security has built-in [http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html session fixation defense].&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always keep this functionality enabled on in all user manuals, tutorials, demonstration/sample code, and all other documentation. Explain how the feature works and the risk associated with not using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apply HttpOnly Flag to Session ID Cookie by Default ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Append the “[http://www.owasp.org/index.php/Testing_for_cookies_attributes_%28OWASP-SM-002%29 HttpOnly]” flag to session cookies by default, with an option to turn that feature off. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/XSS Cross Site Scripting (XSS)]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The .Net framework provide the ability to add the [http://msdn.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx HttpOnly] flag to cookie flags, although the feature isn’t enabled by default.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always keep this functionality enabled on in all user manuals, tutorials, demonstration/sample code, and all other documentation. Explain how the feature works and the risk associated with not using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Configuration Option to Apply Secure Flag to Session ID Cookie ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Most development frameworks make the default assumption that the application works over plaintext HTTP. In cases where the framework can be sure that the application uses SSL for the entire session (e.g. if the application container has SSL enabled), append the “[http://www.owasp.org/index.php/Testing_for_cookies_attributes_%28OWASP-SM-002%29 secure]” flag to session cookies by default, with an option to turn that feature off. &lt;br /&gt;
&lt;br /&gt;
For cases where the framework cannot be sure that the application uses SSL for the entire session (e.g. a separate hardware device provides SSL and proxies plaintext HTTP to the application server), provide a simple configuration option for developers to add the “[http://www.owasp.org/index.php/Testing_for_cookies_attributes_%28OWASP-SM-002%29 secure]” flag to session cookies.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Session_hijacking_attack Session hijacking]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
The .Net framework provide the ability to add the [http://msdn.microsoft.com/en-us/library/system.web.httpcookie.secure%28v=VS.100%29.aspx secure] flag to cookies, although the feature isn’t enabled by default.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always keep this functionality enabled on in all user manuals, tutorials, demonstration/sample code, and all other documentation. Explain how the feature works and the risk associated with not using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Configurable Inactive and Absolute Session Timeouts ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide an option to define both inactive (i.e. after a period of inactivity) and hard/absolute session timeout (i.e. period of time, regardless of amount of activity). Provide default values for both values. Provide an option to turn either or both timeouts.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Session_hijacking_attack Session hijacking]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Java Servlet containers provide [http://tomcat.apache.org/tomcat-5.5-doc/appdev/web.xml.txt configurable inactive timeout] values.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Explain how both features work and the risk associated with not using them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide a Configuration Option to Tie Session IDs to an IP Address, Subnet, or a List of IP Ranges ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Some application developers opt to correlate a session ID to the client’s IP address. After session generation, the application verifies that each request comes from the expected IP address thereby mitigating the risk of session hijacking. Provide an option to seamlessly deliver this functionality.&lt;br /&gt;
&lt;br /&gt;
In practice, session IP correlation on large networks is difficult if not impossible due to a variety of networking features – in particular, proxy servers such as [http://webmaster.info.aol.com/proxyinfo.html AOL proxy]. Provide options to help address this by, for example, allowing developers to specify a subnet length and verifying that each request comes from the same subnet. For example, if a developer configures session subnet correlation with a 24 bit subnet, then the application should permit requests from ''10.1.1''.3 and ''10.1.1''.5 to access the same session but it should not allow requests from ''10.1.2''.3 to access the same session.&lt;br /&gt;
&lt;br /&gt;
To deal with known proxy servers, such as AOL proxy, the framework should also allow developer to specify one or more lists of IP ranges. If a clients IP falls into one of ranges then ensure that all future requests for that same session come from the same list. For example, if one request comes from the set of AOL proxy IPs then all future requests for that session should come the AOL proxy IPs.&lt;br /&gt;
&lt;br /&gt;
Turn this feature off by default. Each application may require considerable time to configure for this feature to work properly.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Session_hijacking_attack Session hijacking]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how the feature works and how to turn it on. Provide a tutorial or other guidance on how to setup this feature for an application such that it doesn’t break availability. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML Specific ==&lt;br /&gt;
=== Disable the Following Unsafe Features by Default ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Over the years, security researchers have discovered several vulnerabilities in XML libraries – particularly [http://projects.webappsec.org/XML-Attribute-Blowup parsers] and [http://msdn.microsoft.com/en-us/magazine/ee335713.aspx validators]. Disallow dangerous functionality be default, namely:&lt;br /&gt;
&lt;br /&gt;
* [http://www.securiteam.com/securitynews/6D0100A5PU.html External entity] resolution&lt;br /&gt;
* DTDs defined [http://www.javacommerce.com/displaypage.jsp?name=dtd.sql&amp;amp;id=18238 internally within XML] files&lt;br /&gt;
* [http://www.w3.org/TR/xml-stylesheet/ XML Stylesheet Language Transforms (XSLTs) processing instructions] within an XML document’s prolog&lt;br /&gt;
* [http://xml.apache.org/xalan-j/extensions.html XSLT extensions] that provide direct access to the operating system, such as Java [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html runtime objects] or .Net [http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx System.Diagnostics.Process]&lt;br /&gt;
** Ideally, take a default deny approach to XSLT extensions and only allow known safe extensions with the option to turn on other extensions&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.securiteam.com/securitynews/6D0100A5PU.html External entity attacks]&lt;br /&gt;
* [https://www.isecpartners.com/files/XMLDSIG_Command_Injection.pdf XSLT command injection]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/magazine/ee335713.aspx XML bombs]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always have the unsafe features turned off in sample code, unless explicitly necessary. Explain the potential risk of turning any of these features on.&lt;br /&gt;
&lt;br /&gt;
== Cryptography ==&lt;br /&gt;
=== Provide Tools for Transparent Database Encryption ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide configuration options to seamlessly encrypt columns within a database when the framework handles database interaction. Object Relational Mapping (ORM) libraries in particular should allow developers to configure column-level encryption.&lt;br /&gt;
&lt;br /&gt;
See “Encrypt Passwords and Keys Stored in Configuration Files” for more information on how to protect the encryption key.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Insecure_Storage Insecure cryptographic storage]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
[https://www.hibernate.org/415.html Hibernate in Java] provides seamless, configurable database encryption.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how the feature works and how to turn it on. Provide a tutorial or other guidance on how to use this feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Configurable Cryptographic Algorithms ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Hard-coding specific encryption algorithms and parameters such as key size may leave applications vulnerable to common attacks if a particular algorithm is ever compromised. Allow developers to configure the algorithm and parameters such as key strengths. &lt;br /&gt;
&lt;br /&gt;
Favor modes with secure random Initialization Vectors (IVs) rather than modes without IVs such [http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation as Electronic Code Book (ECB)].&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Insecure_Storage Insecure cryptographic storage]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
See Java’s [http://java.sun.com/j2se/1.5.0/docs/api/java/security/Provider.html security provider architecture].&lt;br /&gt;
&lt;br /&gt;
Developers in non-compiled languages such as PHP, Ruby, and Python often favor scripts written in that programming language rather than static configuration files. Frameworks written in such languages should decouple application code from specific encryption algorithms, either by introducing a static configuration file or calling a utility class (e.g. HashingUtility.hash() rather than SHA2.hash()).&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Clearly explain how to configure cryptographic algorithms. Provide strong default options (such as [http://csrc.nist.gov/groups/ST/toolkit/index.html NIST approved] algorithms and parameters).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Follow the TLS Protection Cheatsheet for TLS/SSL Implementations ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Attackers have discovered several attacks on TLS/SSL implementations and X509 certificates: [http://www.scanit.be/uploads/ssl%20security%20in%20be%20-%2003-2008.pdf downgrade attacks], [http://extendedsubset.com/?p=8 plaintext injection during renegotiation] [http://www.thoughtcrime.org/papers/null-prefix-attacks.pdf null prefix attacks], [http://www.thoughtcrime.org/papers/ocsp-attack.pdf circumventing Online Certificate Status Protocol (OCSP) controls], and several [http://www.blackhat.com/presentations/bh-usa-09/MARLINSPIKE/BHUSA09-Marlinspike-DefeatSSL-SLIDES.pdf others]. &lt;br /&gt;
&lt;br /&gt;
Reuse libraries that already account for these attacks rather than writing new libraries. Note that some of the attacks, such as [http://www.thoughtcrime.org/papers/null-prefix-attacks.pdf null prefix attacks], are actually attacks against the client; however, these attacks also apply to the server during [http://en.wikipedia.org/wiki/Mutual_authentication mutual authentication].&lt;br /&gt;
&lt;br /&gt;
Providing an exhaustive set of requirements for TLS/SSL is beyond the scope of this manifesto. Consult the [http://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet Transport Layer Protection Cheatsheet] for comprehensive guidance. SSL Labs maintains an [https://www.ssllabs.com/downloads/SSL_Server_Rating_Guide_2009.pdf SSL Server Rating] guide that provides guidelines around certificate type, key size, cipher strength, key exchange algorithm, and protocol. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-Insecure_Communications Insecure communications]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Clearly explain how to configure TLS. Provide specific guidance on how to deploy a server for optimum TLS/SSL security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration Security ==&lt;br /&gt;
=== Encrypt Passwords and Keys Stored in Configuration Files ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Web application frameworks often store plaintext system passwords and keys in configuration files. For example, several frameworks use plaintext configuration files for [http://www.dotnetjohn.com/articles.aspx?articleid=3 database connection strings], [https://www.hibernate.org/415.html database encryption keys], [http://forums.asp.net/p/1086890/1651644.aspx Lightweight Directory Access Protocol (LDAP) connection strings], [http://www.digicert.com/ssl-certificate-installation-tomcat.htm keystore passwords], and other values. Attackers who are able to exploit other vulnerabilities are sometimes able to view the contents of files. &lt;br /&gt;
&lt;br /&gt;
Provide native support for encrypted properties in configuration files. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Broken_Authentication_and_Session_Management Broken authentication (plaintext credential storage)]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Developers will always run into the problem of providing some sort of password or key to decrypt encrypted credentials. While no solution is perfect, frameworks can employ one of several password / key storage options:&lt;br /&gt;
&lt;br /&gt;
* Store a private key, unique for each machine, as a binary file that can only be accessed by the application server. While this control succeeds in preventing attackers from viewing plaintext passwords in configuration files, it does not prevent attackers from first accessing the binary key and then the configuration file using the same exploit. This should be the minimum security option. See [http://download.oracle.com/docs/cd/E12840_01/wls/docs103/admin_ref/utils.html Weblogic].&lt;br /&gt;
* Store the decryption key / password in a file, similar to the preceding option. Use operating system controls to ensure that file is only accessible by a separate launching process – not the application server. The launching process can then pass in the key / password as a command line argument when launching the application server. This way, a user who exploits the application server may not necessarily have access to the decryption key itself.&lt;br /&gt;
* Support passphrases from an environment variable and/or web-form. This solution takes more work and possibly manual intervention but greatly decreases the risk of an attacker being able to find plaintext passwords in configuration files. See [http://www.jasypt.org/encrypting-configuration.html Jasypt]&lt;br /&gt;
* Leverage a distributed service, such as the .Net Data Protection API (DPAPI) [http://msdn.microsoft.com/en-us/library/ms998280.aspx User Store] key storage. This restricts key access to a particular user, so other users on the same machine (including local administrators) cannot access that key.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always use the most secure possible credential storage in all user manuals, tutorials, demonstration/sample code, and all other documentation. Explain how the features work and the risk associated with not using them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Upload ==&lt;br /&gt;
=== File Upload Tools Should Supports Pluggable Anti Malware Scanning Solutions ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Framework-managed file upload tools should facilitate safe file uploads by providing configuration options to support for library-based third party anti-virus scanning solutions, such as [http://www.clamav.net/ Clam AV].&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-Malicious_File_Execution Malicious file execution]&lt;br /&gt;
* [http://www.owasp.org/index.php/Unrestricted_File_Upload Unrestricted file upload]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how to use the pluggable anti-malware feature. Provide Application Programming Interface (API) details on how third parties can hook into the framework.&lt;br /&gt;
&lt;br /&gt;
=== File Upload Tool Should Provide Options to Disallow Saving Outside of a Specified Directory ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Framework-managed file upload tools should disallow saving a file outside of a configurable specified directory and, optionally, any subdirectories (see the Unix [http://unixwiz.net/techtips/chroot-practices.html chroot] command).&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Unrestricted_File_Upload Unrestricted file upload]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
You may wish to allow developers to specify absolute paths or relative paths to the application’s root. Restrict file upload to a relative path by default (e.g. /app/uploads directory).&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use this feature with file upload. Document the risks associated with turning this feature off.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide a File Upload Tool that Supports Pluggable Content Validation  ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Framework-managed file upload tools should facilitate safe file uploads by providing configuration options to support for library-based third party solutions that validate the contents of a particular file type. For example, a PDF validator might ensure that a given file is indeed a PDF and does not contain any executable code or dangerous PDF extensions.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Top_10_2007-Malicious_File_Execution Malicious file execution]&lt;br /&gt;
* [http://www.owasp.org/index.php/Unrestricted_File_Upload Unrestricted file upload]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Document how to use the pluggable validation feature. Provide options to associate different validation libraries for different extensions. Provide Application Programming Interface (API) details on how third parties can hook into the framework.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
=== Provide Security Specific Logs and Log All Attack Points Specified in AppSensor ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide a security-specific log and turn it on by default. Automatically log potential attacks using all of the attack points documented in the [http://www.owasp.org/index.php/Category:OWASP_AppSensor_Project OWASP AppSensor Project]. &lt;br /&gt;
&lt;br /&gt;
Ensure consistent use of event IDs (e.g. SE5 for source change of IP during session). Developers should be able to log to the security-specific log as well.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/ApplicationLayerIntrustionDetection Insufficient application intrusion detection]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
See the [http://code.google.com/p/appsensor/source/browse/ AppSensor code].&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Explain what the security log is, how it works, how and what to add to it, and the format for log entries. Expose details of the log format so that log analysis / Security Event Manager (SEM) tools can detect potential attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automatically Generate X-Frame-Options Header ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Browsers such as Internet Explorer 8+ support the [http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx X-FRAME-OPTIONS] header. Automatically set the X-FRAME-OPTIONS value to DENY by default or SAMEORIGIN if the application requires nested frames from within the same application.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sectheory.com/clickjacking.htm Clickjacking]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
In all user manuals, tutorials, demonstration/sample code, and all other documentation, always use this feature. Document the risks associated with turning this feature off or providing an overly broad policy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Arithmetic Utilities that Protect Against Integer and Floating Point Overflow and Underflow ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Many programming languages such as Java are vulnerable to Integer and floating point [http://www.javacoffeebreak.com/books/extracts/javanotesv3/c9/s1.html overflow] and underflow. Provide libraries that encapsulate basic arithmetic operations (e..g addition, subtraction, multiplication, division) and throw errors / exceptions upon overflow or underflow conditions. &lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Integer_overflow Numeric overflow]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always use these encapsulation functions when performing normal arithmetic in all user manuals, tutorials, demonstration/sample code, and all other documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Provide Support for Pluggable Anti-Automation ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Provide a mechanism for application administrators to make use of third-party anti-automation techniques such as [http://recaptcha.net/captcha.html CAPTCHA] on certain pages. Which type of anti-automation mechanism and the implementation of that technique should be configurable. Provide an Application Programming Interface (API) to allow third party providers to plug-in anti automation into the framework. Using a pluggable architecture will promote loose coupling and allow developers to change anti-automation techniques with minor impact to the rest of the application. Developers should be able to change anti-automation techniques because attackers often find ways to [http://caca.zoy.org/wiki/PWNtcha break anti-automation].&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Brute_force_attack Brute force attacks]&lt;br /&gt;
* [http://www.owasp.org/index.php/Testing_for_user_enumeration_%28OWASP-AT-002%29 User enumeration]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always use anti-automation for user registration and forgot password in all user manuals, tutorials, demonstration/sample code, and all other documentation. Document how to change the automation provider. Provide Application Programming Interface (API) details on how third parties can hook into the framework.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Return Generic Error Pages by Default ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Generate error pages devoid of application details such as stack traces by default. In order to facilitate troubleshooting, add detailed error messages to an error log and optionally include a reference number to the log in the error page.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
This requirement mitigates the following weaknesses:&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Missing_Error_Handling Missing error handling]&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
Developers can implement [http://msdn.microsoft.com/en-us/library/aa479319.aspx generic error pages] in ASP.Net through configuration.&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Always keep this feature turned on in all user manuals, tutorials, demonstration/sample code, and all other documentation. &lt;br /&gt;
&lt;br /&gt;
=== Centralized Security Configuration Options ===&lt;br /&gt;
==== Requirement Description ====&lt;br /&gt;
Many of the requirements in this document require configuration options (e.g. “3.2.1Provide Configurable Validation for All Forms of User-Supplied Input”). Consolidate as many security-relevant configuration options into a single security configuration file. Consolidated security configuration helps facilitate auditing.&lt;br /&gt;
&lt;br /&gt;
==== Relevant Weaknesses ====&lt;br /&gt;
* N/.A&lt;br /&gt;
&lt;br /&gt;
==== Implementation Suggestions ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Documentation Suggestion ====&lt;br /&gt;
Describe all security configuration options in documentation.&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Secure_Web_Application_Framework_Manifesto/Releases/SWAF_Manifesto_v0.08/Notes&amp;diff=91219</id>
		<title>Projects/OWASP Secure Web Application Framework Manifesto/Releases/SWAF Manifesto v0.08/Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Secure_Web_Application_Framework_Manifesto/Releases/SWAF_Manifesto_v0.08/Notes&amp;diff=91219"/>
				<updated>2010-10-11T18:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This release represents cumulative iterations of the document prior to becoming an OWASP project. This includes a substantial amount of feedback from the community, including:&lt;br /&gt;
 * Jim Manico&lt;br /&gt;
 * Dinis Cruz&lt;br /&gt;
 * James McGovern&lt;br /&gt;
 * Paco Hope&lt;br /&gt;
 * Paul Johnston&lt;br /&gt;
&lt;br /&gt;
We also learned a substantial amount from similar efforts from:&lt;br /&gt;
 * Arshan Dabirsiaghi &lt;br /&gt;
 * James Landis&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Secure_Web_Application_Framework_Manifesto/Roadmap&amp;diff=91218</id>
		<title>OWASP Secure Web Application Framework Manifesto/Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Secure_Web_Application_Framework_Manifesto/Roadmap&amp;diff=91218"/>
				<updated>2010-10-11T17:53:25Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Short-Term Goals:&lt;br /&gt;
&lt;br /&gt;
 * Move to version 1.0 by Jan 2011 by collecting user feedback and updating the manifesto accordingly&lt;br /&gt;
 * Reach out to at least 3 web application frameworks and let the know about the road map and seek their feedback on the feasibility of implementing it by Jan 2011&lt;br /&gt;
 * Start development on integrating this into Django or a spin-off by Jan 2011&lt;br /&gt;
 * Build a visual &amp;quot;feature comparison chart&amp;quot; by June 2011 so that frameworks can advertise their self-assessment against the manifesto. This would be similar to the kind of comparison chart that product vendors use to contrast different versions of their products.&lt;br /&gt;
&lt;br /&gt;
Long-Term Goals:&lt;br /&gt;
&lt;br /&gt;
 * Create a new release of the manifesto every three years (analogous to the OWASP Top 10)&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=WebGoat_Installation&amp;diff=86665</id>
		<title>WebGoat Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=WebGoat_Installation&amp;diff=86665"/>
				<updated>2010-07-19T01:30:46Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Fixed link to Google code to point to readme file, which contains build instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;webgoat/&amp;gt;[[WebGoat User Guide Table of Contents]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
WebGoat is a platform independent environment.&lt;br /&gt;
It utilizes Apache Tomcat and the JAVA development environment.&lt;br /&gt;
Installers are provided for Microsoft Windows and UN*X environments, together with notes for installation on other platforms.&lt;br /&gt;
&lt;br /&gt;
==Installing Java and Tomcat ==&lt;br /&gt;
'''Note''': This may no longer be necessary for v5.&lt;br /&gt;
&lt;br /&gt;
===Installing Java===&lt;br /&gt;
# Install and deploy the approprite version from http://java.sun.com/downloads/ (1.4.1 or later)&lt;br /&gt;
&lt;br /&gt;
===Installing Tomcat===&lt;br /&gt;
# Install and deploy core Tomcat from http://tomcat.apache.org/download-55.cgi&lt;br /&gt;
&lt;br /&gt;
==Installing to Windows ==&lt;br /&gt;
# Unzip WebGoat-OWASP_Standard-5.2.zip to your working environment.&lt;br /&gt;
# To start Tomcat, browse to the WebGoat directory unzipped above and double click &amp;quot;webgoat.bat&amp;quot;&lt;br /&gt;
# Start your browser and browse to: &amp;lt;u&amp;gt;http://localhost/WebGoat/attack&amp;lt;/u&amp;gt; This link is case-sensitive. Make sure to use a large ‘W’ and ‘G’.&lt;br /&gt;
&lt;br /&gt;
==Installing to Linux ==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unzip WebGoat-OWASP_Standard-x.x.zip to your working directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Change &amp;quot;1.5&amp;quot; on lines 17, 19, and 23 of webgoat.sh to &amp;quot;1.6&amp;quot;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Since the latest version runs on a privileged port, you will need to start/stop WebGoat &amp;amp; Tomcat either:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol type=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;on port 80 as root:&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sh webgoat.sh start80&lt;br /&gt;
sudo sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;or on port 8080:&amp;lt;pre&amp;gt;&lt;br /&gt;
sh webgoat.sh start8080&lt;br /&gt;
sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing to OS X (Tiger 10.4+) ==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unzip WebGoat-OWASP_Standard-x.x.zip to your working directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Change &amp;quot;1.5&amp;quot; on line 10 of webgoat.sh to &amp;quot;1.6&amp;quot;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Since the latest version runs on a privileged port, you will need to start/stop WebGoat &amp;amp; Tomcat either:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol type=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;on port 80 as root:&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sh webgoat.sh start80&lt;br /&gt;
sudo sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;or on port 8080:&amp;lt;pre&amp;gt;&lt;br /&gt;
sh webgoat.sh start8080&lt;br /&gt;
sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing on FreeBSD ==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install Tomcat and Java from the ports collection:&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/www/tomcat55&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You will be required to manually [http://www.FreeBSDFoundation.org/cgi-bin/download?download=diablo-caffe-freebsd6-i386-1.5.0_07-b01.tar.bz2 download the Java JDK] to install it.  Instructions are given by the ports system about when and how to do this.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Unzip WebGoat-OWASP_Standard-x.x.zip to your working directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Change &amp;quot;1.5&amp;quot; on lines 17, 19, and 23 of webgoat.sh to &amp;quot;1.6&amp;quot;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Since the latest version runs on a privileged port, you will need to start/stop WebGoat &amp;amp; Tomcat either:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol type=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;on port 80 as root:&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sh webgoat.sh start80&lt;br /&gt;
sudo sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;or on port 8080:&amp;lt;pre&amp;gt;&lt;br /&gt;
sh webgoat.sh start8080&lt;br /&gt;
sh webgoat.sh stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running ==&lt;br /&gt;
# Start your browser and browse to: &amp;lt;u&amp;gt;http://localhost/WebGoat/attack&amp;lt;/u&amp;gt;. Notice the capital 'W' and 'G'&lt;br /&gt;
# Login in as: user = guest, password = guest&lt;br /&gt;
&lt;br /&gt;
==Building ==&lt;br /&gt;
Skip these instructions if you are only interested in running WebGoat.&lt;br /&gt;
&lt;br /&gt;
WebGoat is built using eclipse WTP 1.5.x.  Please read the instructions at [http://webgoat.googlecode.com/svn/trunk/webgoat/README.txt Goodle code] to build the WebGoat application.&lt;br /&gt;
&lt;br /&gt;
==Installing WAR file to existing Tomcat server==&lt;br /&gt;
Place the .war file in your Tomcat webapps directory (it will self extract).  You'll need to resolve several issues that are outlined in the [http://code.google.com/p/webgoat/wiki/FAQ Webgoat FAQ].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Return to the [[WebGoat User Guide Table of Contents]]&lt;br /&gt;
[[Category:OWASP WebGoat Project]]&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Guide_to_Authentication&amp;diff=74611</id>
		<title>Talk:Guide to Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Guide_to_Authentication&amp;diff=74611"/>
				<updated>2009-12-02T20:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Comment on Threshold Governer section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;When used in a single factor authentication method (for example, just a thumbprint with no username or password), biometrics are the weakest form of authentication available and are unsuitable for even moderate risk applications.&amp;quot;&lt;br /&gt;
Biometrics is still a better single factor auth method than having a username/password based one which doesnt enforce password complexity or account lockout. &lt;br /&gt;
&lt;br /&gt;
So I am removing that sentence. There are much worse implementations of single factor authentication.&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
&lt;br /&gt;
I don't know if this is strictly true:&lt;br /&gt;
&amp;quot;    *  Password change**&lt;br /&gt;
    * Password resets** &lt;br /&gt;
&lt;br /&gt;
(**Low value systems only - Most medium and all high value systems should not be using passwords, and thus do not possess password reset capabilities) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
Perhaps it should read &amp;quot;Most medium and all high value systems should use more than one factor of authentication and should not rely exclusively on passwords.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2009_Schedule&amp;diff=72387</id>
		<title>OWASP AppSec DC 2009 Schedule</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2009_Schedule&amp;diff=72387"/>
				<updated>2009-10-29T14:09:27Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: /* Back to Conference Page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
===[[OWASP AppSec DC 2009|Back to Conference Page]]===&lt;br /&gt;
Please note, speaking times are not final, check back regularly for updates.&lt;br /&gt;
====Training 11/10==== &lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;middle&amp;quot;&lt;br /&gt;
| height=&amp;quot;60&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: rgb(64, 88, 160) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: white;&amp;quot; | &amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;'''Day 1 - Nov 10th 2009'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | &amp;amp;nbsp; &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 154A''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 149B''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 149A''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 154B'''&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 155'''&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 09:00-12:00 &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | Day 1:&amp;lt;br&amp;gt;Assessing and Exploiting Web Applications with the open source Samurai Web Testing Framework&amp;lt;br&amp;gt; Justin Searle &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | Day 1:&amp;lt;br&amp;gt;Java EE Secure Code Review&amp;lt;br&amp;gt;Sahba Kazerooni&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | Threat Modeling Express&amp;lt;br&amp;gt;Krishna Raja&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | Foundations of Web Services and XML Security&amp;lt;br&amp;gt;Dave Wichers&amp;lt;br&amp;gt;[http://www.aspectsecurity.com Aspect Security]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | Live CD&amp;lt;br&amp;gt;Matt Tesauro&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 12:00-13:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; | Lunch&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 13:00-17:00 &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | Assessing and Exploiting Web Applications with the open source Samurai Web Testing Framework&amp;lt;br&amp;gt; Justin Searle &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | Java EE Secure Code Review&amp;lt;br&amp;gt;Sahba Kazerooni&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | Threat Modeling Express&amp;lt;br&amp;gt;Krishna Raja&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | Foundations of Web Services and XML Security&amp;lt;br&amp;gt;Dave Wichers&amp;lt;br&amp;gt;[http://www.aspectsecurity.com Aspect Security]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | Live CD&amp;lt;br&amp;gt;Matt Tesauro &amp;lt;!-- Day 2 --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
====Training 11/11==== &lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;middle&amp;quot;&lt;br /&gt;
| height=&amp;quot;60&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: rgb(64, 88, 160) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: white;&amp;quot; | &amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;'''Day 2 - Nov 11th 2009'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | &amp;amp;nbsp; &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 154A''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 149B''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 149A''' &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 154B'''&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | '''Room 155'''&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 09:00-12:00 &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | Day 2:&amp;lt;br&amp;gt;Assessing and Exploiting Web Applications with the open source Samurai Web Testing Framework&amp;lt;br&amp;gt; Justin Searle &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | Day 2:&amp;lt;br&amp;gt;Java EE Secure Code Review&amp;lt;br&amp;gt;Sahba Kazerooni&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | WebAppSec.php: Developing Secure Web Applications&amp;lt;br&amp;gt;Robert Zakon&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | Leader and Manager Training - Leading the Development of Secure Applications&amp;lt;br&amp;gt;John Pavone&amp;lt;br&amp;gt;[http://www.aspectsecurity.com Aspect Security]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | &lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 12:00-13:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; | Lunch&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 13:00-17:00 &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | Assessing and Exploiting Web Applications with the open source Samurai Web Testing Framework&amp;lt;br&amp;gt; Justin Searle &lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | Java EE Secure Code Review&amp;lt;br&amp;gt;Sahba Kazerooni&amp;lt;br&amp;gt;[http://www.securitycompass.com Security Compass]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | WebAppSec.php: Developing Secure Web Applications&amp;lt;br&amp;gt;Robert Zakon&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | Leader and Manager Training - Leading the Development of Secure Applications&amp;lt;br&amp;gt;John Pavone&amp;lt;br&amp;gt;[http://www.aspectsecurity.com Aspect Security]&lt;br /&gt;
| width=&amp;quot;150&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#BCA57A&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;!-- Day 2 --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
====Talks 11/12==== &lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;middle&amp;quot;&lt;br /&gt;
| height=&amp;quot;60&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; style=&amp;quot;background: rgb(64, 88, 160) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: white;&amp;quot; | &amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;'''Day 1 - Nov 12th 2009'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | &amp;amp;nbsp; &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | '''OWASP''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | '''Tools''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | '''SDLC''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | '''Web 2.0'''&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 07:30-08:45 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Registration&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 08:45-09:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;30&amp;quot; bgcolor=&amp;quot;#e0e0e0&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Welcome and Opening Remarks&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 09:00-10:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#e0e0e0&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Keynote: [[AppSecDC Keynote Jarzomnek|Joe Jarzombek]]&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 10:00-10:30 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;30&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Coffee Break &amp;amp;amp; Room Change&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 10:30-11:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[OWASP ESAPI AppSecDC|OWASP ESAPI]]&amp;lt;br&amp;gt;Jeff Williams &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Clubbing WebApps with a Botnet]]&amp;lt;br&amp;gt;Gunter Ollmann &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[Enterprise Application Security - GE's approach to solving root cause and establishing a Center of Excellence|Enterprise Application Security - GE's approach to solving root cause]]&amp;lt;br&amp;gt;Darren Challey &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Understanding the Implications of Cloud Computing on Application Security]]&amp;lt;br&amp;gt;Dennis Hurst&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 11:30-12:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Software Assurance Maturity Model (SAMM)]]&amp;lt;br&amp;gt;Pravir Chandra &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[The Case of Promiscuous Parameters and Other Ongoing Capers in Web Security]]&amp;lt;br&amp;gt;Jacob West &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[Software Development The Next Security Frontier]]&amp;lt;br&amp;gt;Jim Molini&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Transparent Proxy Abuse]]&amp;lt;br&amp;gt;Robert Auger&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 12:30-13:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[DISA's Application Security and Development STIG: How OWASP Can Help You]]&amp;lt;br&amp;gt;Jason Li &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[OWASP ModSecurity Core Rule Set Project]]&amp;lt;br&amp;gt;Ryan C. Barnett &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[The essential role of infosec in secure software development]]&amp;lt;br&amp;gt;Kenneth R. van Wyk &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Development Issues Within AJAX Applications: How to Divert Threats]]&amp;lt;br&amp;gt;Lars Ewe &lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 13:30-14:30 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Lunch&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 14:30-15:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Defend Yourself: Integrating Real Time Defenses into Online Applications]]&amp;lt;br&amp;gt;Michael Coates &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Finding the Hotspots: Web-security testing with the Watcher tool]]&amp;lt;br&amp;gt;Chris Weber &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;3&amp;quot; | [[SDLC Panel AppSecDC|SDLC Panel]]&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;Pravir Chandra&amp;lt;br&amp;gt;Dan Cornell&amp;lt;br&amp;gt;Michael Craigue&amp;lt;br&amp;gt;Dennis Hurst&amp;lt;br&amp;gt;Joey Peloquin&amp;lt;br&amp;gt;David Rook&amp;lt;br&amp;gt;Keith Turpin&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Social Zombies: Your Friends Want to Eat Your Brains]]&amp;lt;br&amp;gt;Tom Eston/Kevin Johnson&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; rowspan=&amp;quot;2&amp;quot; | 15:30-16:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[The ESAPI Web Application Firewall (ESAPI WAF)|The ESAPI Web Application Firewall]]&amp;lt;br&amp;gt;Arshan Dabirsiaghi &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[One Click Ownage]]&amp;lt;br&amp;gt;Ferruh Mavituna &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Cloudy with a chance of 0-day]]&amp;lt;br&amp;gt;Jon Rose/Tom Leavey&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Web Application Security Scanner Evaluation Criteria]]&amp;lt;br&amp;gt;Brian Shura&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; rowspan=&amp;quot;2&amp;quot; | 16:30-17:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[OWASP Live CD: An open environment for Web Application Security]]&amp;lt;br&amp;gt;Matt Tesauro / Brad Causey &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Learning by Breaking: A New Project Insecure Web Apps]]&amp;lt;br&amp;gt;Chuck Willis &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Vulnerability Management in an Application Security World]]&amp;lt;br&amp;gt;Dan Cornell &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Attacking WCF Web Services]]&amp;lt;br&amp;gt;Brian Holyfield&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Synergy! A world where the tools communicate]]&amp;lt;br&amp;gt; &lt;br /&gt;
Josh Abraham &lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; rowspan=&amp;quot;2&amp;quot; | 17:30-18:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[The Entrepreneur's Guide to Career Management]]&amp;lt;br&amp;gt;Lee Kushner &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Advanced SSL: The good, the bad, and the ugly]]&amp;lt;br&amp;gt;Michael Coates &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Threat Modeling by John Steven|Threat Modeling]]&amp;lt;br&amp;gt;John Steven &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[When Web 2.0 Attacks - Understanding Security Implications of AJAX, Flash and |When Web 2.0 Attacks - Understanding Security Implications of AJAX, Flash and &amp;quot;Highly Interactive&amp;quot; Technologies]]&amp;lt;br&amp;gt;Rafal Los&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[User input piercing for Cross Site Scripting Attacks]]&amp;lt;br&amp;gt;Matias Blanco&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 19:00-???? &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#c0c0c0&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Reception &amp;lt;!-- Day 2 --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
====Talks 11/13==== &lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;middle&amp;quot;&lt;br /&gt;
| height=&amp;quot;60&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; style=&amp;quot;background: rgb(64, 88, 160) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: white;&amp;quot; | &amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;'''Day 2 - Nov 13th 2009'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | &amp;amp;nbsp; &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | '''Attack &amp;amp;amp; Defend''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | '''Process''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | '''Metrics''' &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | '''Compliance'''&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 07:30-09:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Registration&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 09:00-10:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#e0e0e0&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Keynote: TBA&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 10:00-10:30 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;30&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Coffee Break &amp;amp;amp; Room Change&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 10:30-11:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Securing the Core JEE Patterns]]&amp;lt;br&amp;gt;Rohit Sethi/Krishna Raja &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[The Big Picture: Web Risks and Assessments Beyond Scanning]]&amp;lt;br&amp;gt;Matt Fisher &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[The Web Hacking Incidents Database]]&amp;lt;br&amp;gt;Ryan C. Barnett &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Business Logic Automatons: Friend or Foe?]]&amp;lt;br&amp;gt;Ofer Shezaf&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 11:30-12:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Unicode Transformations: Finding Elusive Vulnerabilities]]&amp;lt;br&amp;gt;Chris Weber &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Scalable Application Assessments in the Enterprise]]&amp;lt;br&amp;gt;Tom Parker/Lars Ewe &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[Application security metrics from the organization on down to the vulnerabilities]]&amp;lt;br&amp;gt;Chris Wysopal &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[SCAP: Automating our way out of the Vulnerability Wheel of Pain]]&amp;lt;br&amp;gt;Ed Bellis&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 12:30-13:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Malicious Developers and Enterprise Java Rootkits]]&amp;lt;br&amp;gt;Jeff Williams &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Secure Software Updates: Update Like Conficker]]&amp;lt;br&amp;gt;Jeremy Allen &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[OWASP Top 10 2010 AppSecDC|OWASP Top 10 - 2010]]&amp;lt;br&amp;gt;Dave Wichers &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Secure SDLC: The Good, The Bad, and The Ugly]]&amp;lt;br&amp;gt;Joey Peloquin&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 13:30-14:30 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;40&amp;quot; bgcolor=&amp;quot;#909090&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Lunch&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 14:30-15:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[The 10 least-likely and most dangerous people on the Internet]]&amp;lt;br&amp;gt;Robert Hansen &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Improving application security after an incident]]&amp;lt;br&amp;gt;Cory Scott &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[Hacking by Numbers]]&amp;lt;br&amp;gt;Tom Brennan &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[AppSecDC09 Federal CISO Panel|Federal CISO Panel]]&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 15:30-16:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Automated vs. Manual Security: You can't filter The Stupid]]&amp;lt;br&amp;gt;David Byrne/Charles Henderson &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | [[Custom Intrusion Detection Techniques for Monitoring Web Applications]]&amp;lt;br&amp;gt;Matthew Olney &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[Building an in-house application security assessment team]]&amp;lt;br&amp;gt;Keith Turpin&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 16:30-17:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | TBD&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; | TBD &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; | [[The OWASP Security Spending Benchmarks Project]]&amp;lt;br&amp;gt;Dr. Boaz Gelbord &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; | [[Promoting Application Security within Federal Government]]&amp;lt;br&amp;gt;Sarbari Gupta&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; rowspan=&amp;quot;2&amp;quot; | 17:30-18:30 &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Manipulating Web Application Interfaces, a new approach to input validation]]&amp;lt;br&amp;gt;Felipe Moreno-Strauch &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#ffdf80&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Deploying Secure Web Applications with OWASP Resources]]&amp;lt;br&amp;gt;Kuai Hinojosa &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#a0c0e0&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[SANS Dshield Webhoneypot Project]]&amp;lt;br&amp;gt;Jason Lam &lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;120&amp;quot; bgcolor=&amp;quot;#b3ff99&amp;quot; align=&amp;quot;center&amp;quot; rowspan=&amp;quot;2&amp;quot; | [[Techniques in Attacking and Defending XML/Web Services]]&amp;lt;br&amp;gt;Mamoon Yunus/Jason Macy&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;200&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#c0a0a0&amp;quot; align=&amp;quot;center&amp;quot; | [[Injectable Exploits: Two New Tools for Pwning Web Apps and Browsers]]&amp;lt;br&amp;gt;Kevin Johnson, Justin Searle, Frank DiMaggio&lt;br /&gt;
|- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;67&amp;quot; valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#7b8abd&amp;quot; | 18:30-19:00 &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; height=&amp;quot;60&amp;quot; bgcolor=&amp;quot;#c0c0c0&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot; | Closing Remarks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[OWASP AppSec DC 2009|Back to Conference Page]]===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_AppSec_Conference]] [[Category:OWASP_AppSec_DC_09]]&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=SAMM_-_Design_Review_-_2&amp;diff=69700</id>
		<title>SAMM - Design Review - 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=SAMM_-_Design_Review_-_2&amp;diff=69700"/>
				<updated>2009-09-24T14:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: minor grammar edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OpenSAMM}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:65%;&amp;quot;&amp;gt;&lt;br /&gt;
{{SAMM-BadgeList|name=Design_Review|abbr=DR|border2=2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:30%;&amp;quot;&amp;gt;&lt;br /&gt;
[http://www.owasp.org/index.php/SAMM_-_Verification http://www.opensamm.org/downloads/BackButton.png]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{{SAMM-ObjectiveV2|name=Design Review|obj=Offer assessment services to review software design against comprehensive best practices for security}}&lt;br /&gt;
  &amp;lt;div style=&amp;quot;width:30%; float:right; padding-top:50px; padding-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
====Results====&lt;br /&gt;
* Formally offered assessment service to consistently review architecture for security&lt;br /&gt;
* Pinpoint security flaws in maintenance-mode and legacy systems&lt;br /&gt;
* Deeper understanding amongst project stakeholders on how the software provides assurance protections&lt;br /&gt;
&lt;br /&gt;
====Add’l Success Metrics====&lt;br /&gt;
* &amp;gt;80% of stakeholders briefed on status of review requests in past 6 months&lt;br /&gt;
* &amp;gt;75% of projects undergoing design review in past 12 months&lt;br /&gt;
&lt;br /&gt;
====Add’l Costs====&lt;br /&gt;
* Buildout, training, and maintenance of design review team&lt;br /&gt;
* Ongoing project overhead from review activities&lt;br /&gt;
&lt;br /&gt;
====Add’l Personnel====&lt;br /&gt;
* Architects (1-2 days/yr)&lt;br /&gt;
* Developers (1 day/yr)&lt;br /&gt;
* Managers (1 day/yr)&lt;br /&gt;
* Security Auditors (2-3 days/yr)&lt;br /&gt;
&lt;br /&gt;
====Related Levels====&lt;br /&gt;
* Education &amp;amp; Guidance - 2&lt;br /&gt;
* Strategy &amp;amp; Metrics - 2&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;float:left; width:65%;&amp;quot;&amp;gt;&lt;br /&gt;
==Activities==&lt;br /&gt;
===A. Inspect for complete provision of security mechanisms===&lt;br /&gt;
For each interface on a module in the high-level architecture diagram, formally iterate through the list of security mechanisms and analyze the system for their provision. This type of analysis should be performed on both internal interfaces, e.g. between tiers, as well as external ones, e.g. those comprising the attack surface.&lt;br /&gt;
&lt;br /&gt;
The six main security mechanisms to consider are authentication, authorization, input validation, output encoding, error handling and logging. Where relevant, also consider the mechanisms of cryptography and session management. For each interface, determine where in the system design each mechanism is provided and note any missing or unclear features as findings.&lt;br /&gt;
&lt;br /&gt;
This analysis should be conducted by security-savvy staff with assistance from the project team for application-specific knowledge. This analysis should be performed once per release, usually toward the end of the design phase. After initial analysis, subsequent releases are required to update the findings based on changes being made during the development cycle.&lt;br /&gt;
&lt;br /&gt;
===B. Deploy design review service for project teams===&lt;br /&gt;
Institute a process whereby project stakeholders can request a design review. This service may be provided centrally within the organization or distributed across existing staff, but all reviewers must be trained on performing the reviews completely and consistently.&lt;br /&gt;
&lt;br /&gt;
The review service should be centrally managed in that the review request queue should be triaged by senior managers, architects, and stakeholders that are familiar with the overall business risk profile for the organization. This allows prioritization of project reviews in alignment with overall business risk.&lt;br /&gt;
&lt;br /&gt;
During a design review, the review team should work with project teams to collect information sufficient to formulate an understanding of the attack surface, match project-specific security requirements to design elements, and verify security mechanisms at module interfaces.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:100%;&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
===Additional Resources===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Podcast_40&amp;diff=69668</id>
		<title>Podcast 40</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Podcast_40&amp;diff=69668"/>
				<updated>2009-09-23T18:39:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[[OWASP_Podcast|OWASP Podcast Series]] #40'''&lt;br /&gt;
&lt;br /&gt;
OWASP Interview with Rohit Sethi&amp;lt;br/&amp;gt;&lt;br /&gt;
Recorded July 27, 2009&amp;lt;br/&amp;gt;&lt;br /&gt;
Published Sept 23, 2009&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=300769012 http://www.owasp.org/download/jmanico/itunes.jpg] [http://www.owasp.org/download/jmanico/podcast.xml https://www.owasp.org/images/d/d3/Feed-icon-32x32.png] [http://www.owasp.org/download/jmanico/owasp_podcast_40.mp3 mp3]&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Rohit Sethi,&amp;lt;/b&amp;gt; Director of Professional Services, Security Compass, is a specialist in threat modeling, application security reviews, and building security controls into the software development life cycle (SDLC). Mr. Sethi is a frequent guest speaker and instructor at several conferences, including RSA, Shmoocon, and CSI. He has written articles for Security Focus and the Web Application Security Consortium (WASC), and has been quoted as an expert in application security for ITWorldCanada and Computer World.&lt;br /&gt;
At Security Compass, Rohit teaches students various topics on web application security in cities across North America. He has also managed and performed extensive threat analysis, source code reviews, and penetration testing for clients in financial services, utilities, telecommunications and healthcare. He is often consulted for his dual expertise in information security and software engineering.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
*  How did your team come up with the idea of writing this paper?&lt;br /&gt;
*  How does the security analysis of Core J2EE patterns differ from the Core Security patterns book? Do we need both?&lt;br /&gt;
*  Why did you choose the J2EE Core Design patterns and not the Gang of Four Design Patterns?&lt;br /&gt;
*  What value does this analysis have? Who is actually going to use this stuff?&lt;br /&gt;
*  How does this design pattern analysis differ from the most popular design-time security activity: threat modeling?&lt;br /&gt;
*  The analysis doesn’t have a notion of “risk” –  it doesn’t articulate the difference between say an application on Intranet versus one on the Internet.  &lt;br /&gt;
*  What are the next steps for this OWASP project?&lt;br /&gt;
*  How can people contribute to the project?&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project&amp;diff=67066</id>
		<title>Category:OWASP Security Analysis of Core J2EE Design Patterns Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project&amp;diff=67066"/>
				<updated>2009-08-03T03:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Main ====&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Most application security experts focus on a single activity for integrating design into the SDLC: threat modeling . Threat modeling is excellent at approximating an application’s attack surface but, in our experience, developers sometimes do not have the time, budget or security know-how to build an adequate threat model. Perhaps more importantly, developers cannot create a comprehensive threat model until they complete the application design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This reference guide aims at dispensing security best practices to developers to make security decisions during design. We focus on one of the most important concepts in modern software engineering: design patterns. Ever since the publication of the seminal Design Patterns Book , developers have reused common patterns such as Singleton and Factory Method in large-scale software projects. Design patterns offer a common vocabulary to discuss application design independent of implementation details. &lt;br /&gt;
One of the most critically acclaimed pattern collections in the Java Enterprise Edition (JEE) community is the Core J2EE Patterns book  by Deepak Alur, Dan Malks and John Crupi  . Developers regularly implement patterns such as “Application Controller”, “Data Access Object” or “Session Façade” in large, distributed JEE applications and in frameworks such as Spring  and Apache Struts . We aim to dispense security best practices so that developers can introduce security features and avoid vulnerabilities independent of their underlying technology choices such as which Model View Controller (MVC) framework to use.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Java developers currently have access to patterns for security code (e.g. how to develop authentication, how to implement cryptography) such as the Core Security Patterns book. We hope our guide will help address the critical shortage of advice on securely coding using existing design patterns. Your feedback is critical to improving the quality and applicability of the best practices listed in the Security Analysis of Core J2EE Design Patterns. Please contact the mailing list at owasp_security_analysis_j2ee@lists.owasp.org with comments or questions and help improve the guide for future developers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The project is broken up into three categories:&lt;br /&gt;
*[[:Category:OWASP Security Analysis of Core J2EE Design Patterns Project/PresentationTier|Presentation Tier Patterns]]&lt;br /&gt;
*[[:Category:OWASP Security Analysis of Core J2EE Design Patterns Project/BusinessTier|Business Tier Patterns]]&lt;br /&gt;
*[[:Category:OWASP Security Analysis of Core J2EE Design Patterns Project/EISTier|EIS Tier Patterns]]&lt;br /&gt;
&lt;br /&gt;
==Downloadable Versions==&lt;br /&gt;
You can download the OWASP Security Analysis of Core J2EE Design Patterns here:&lt;br /&gt;
&lt;br /&gt;
* [https://www.owasp.org/index.php/File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.1.doc Editable DOC Version]&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.01.pdf PDF Version]&lt;br /&gt;
&lt;br /&gt;
The source for the images used in the patterns can be downloaded [http://www.owasp.org/index.php/File:Secure_pattern_images.ppt here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Project Identification ====&lt;br /&gt;
{{Template:OWASP Security Analysis of Core J2EE Design Patterns Project - GPC Tab}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Security Analysis of Core J2EE Design Patterns Project]]&lt;br /&gt;
[[Category:OWASP Document]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Document]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''' Project's License:''''' [http://www.gnu.org/licenses/gpl-3.0.html '''GPL v3''']&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.01.pdf&amp;diff=67065</id>
		<title>File:Security Analysis of Core JEE Design Patterns v0.01.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.01.pdf&amp;diff=67065"/>
				<updated>2009-08-03T03:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: PDF version of the Security Analysis fo Core java EE Design patterns project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PDF version of the Security Analysis fo Core java EE Design patterns project&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.1.doc&amp;diff=67064</id>
		<title>File:Security Analysis of Core JEE Design Patterns v0.1.doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Security_Analysis_of_Core_JEE_Design_Patterns_v0.1.doc&amp;diff=67064"/>
				<updated>2009-08-03T03:19:29Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Editable version of the Core Java EE Patterns project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Editable version of the Core Java EE Patterns project&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Secure_pattern_images.ppt&amp;diff=67063</id>
		<title>File:Secure pattern images.ppt</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Secure_pattern_images.ppt&amp;diff=67063"/>
				<updated>2009-08-03T03:18:03Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: Images for the Security Analysis of the J2EE Core Patterns project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Images for the Security Analysis of the J2EE Core Patterns project&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/EISTier&amp;diff=65685</id>
		<title>Category:OWASP Security Analysis of Core J2EE Design Patterns Project/EISTier</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/EISTier&amp;diff=65685"/>
				<updated>2009-07-09T21:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Data Access Object ====&lt;br /&gt;
Most if not all JEE applications require access to enterprise or business data from a persistent data store. Data, however, can reside in many different kinds of repositories, from relational databases to mainframe or legacy systems. Mixing application logic with persistence logic introduces tight coupling and creates a maintenance nightmare for an application. The ''Data Access Object'' (DAO) pattern allows for the encapsulation of all access to the persistent data store and manages connections to the data tier, while hiding the implementation details of the persistence API from the client. A &amp;lt;tt&amp;gt;DataAccessObject&amp;lt;/tt&amp;gt; implements create, find, update, and delete operations.&lt;br /&gt;
[[File:J2EEPatterns-Data Access Object.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Interpreter Injection'''&lt;br /&gt;
&lt;br /&gt;
''DataAccessObjects'' (''DAOs'') interact with interpreters such as SQL-enabled databases or Lightweight Directory Access Protocol (LDAP) enabled repositories. ''DAOs'' are therefore susceptible to injection-style attacks such as SQL injection. Avoid SQL attacks by using properly constructed prepared statements or stored procedures. For other interpreters, such as LDAP or XML data stores, use appropriate encoding to escape potentially malicious characters such as LDAP encoding or XML encoding. Remember to use a whitelist approach for encoding rather than a blacklist approach. &lt;br /&gt;
&lt;br /&gt;
You may not find encoding methods for some interpreters, leaving your code highly susceptible to interpreter injection. In these cases use strict whitelist input validation.&lt;br /&gt;
&lt;br /&gt;
'''Improper Resource Closing'''&lt;br /&gt;
&lt;br /&gt;
Developers often forget to properly close resources such as database connections. Always close resources in a finally block, check for null pointers before closing on an object, and catch and handle any possible exception that may occur during resource closing ''within ''the finally block.&lt;br /&gt;
&lt;br /&gt;
'''Unencrypted Connection String Storage'''&lt;br /&gt;
&lt;br /&gt;
In order to communicate with a database or other backend server, most applications use a connection string that includes a user name and password. Developers often store this connection string un-encrypted in server configuration files such as server.xml. Malicious insiders and external attackers who exploit path traversal vulnerabilities may be able to use a plaintext connection string to gain unauthorized access to the database. &lt;br /&gt;
&lt;br /&gt;
Encrypt database and other server credentials during storage. Unfortunately, any method you use to encrypt the connection string has weaknesses. For instance, WebLogic provides an encrypt utility to encrypt any clear text property within a configuration file, but the utility relies on an encryption key stored on the application server. Other methods, such as Jasypt’s password based encryption mechanisms require either manual intervention or remote server communication during startup to implement securely. Nevertheless, storing a password plaintext is the least secure option so always use some form of encryption.&lt;br /&gt;
&lt;br /&gt;
'''Exposing Implementation-specific Exceptions'''&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;tt&amp;gt;DataAccessObject&amp;lt;/tt&amp;gt; makes a direct connection to the persistence layer and executes queries against it, returning data to the client. Such access requires correct handling and translation of exceptions that stem from the data tier. Ensure that exceptions that are thrown from implementation-specific packages, such as &amp;lt;tt&amp;gt;java.sql.*&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;javax.sql.*&amp;lt;/tt&amp;gt; are handled and logged appropriately in the &amp;lt;tt&amp;gt;DataAccessObject&amp;lt;/tt&amp;gt; and are not simply propagated to the client. One popular strategy is to log the exception and throw a custom-made exception to the client, such as a &amp;lt;tt&amp;gt;DAOException&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Service Activator ====&lt;br /&gt;
In JEE applications, certain business services can involve complex processes that may consume considerable time and resources. In such cases, developers often prefer to invoke these services asynchronously. The ''Service Activator ''pattern allows for the reception of asynchronous requests from a client and invokes multiple business services. A &amp;lt;tt&amp;gt;ServiceActivator&amp;lt;/tt&amp;gt; class is typically implemented as a JMS listener that receives and parses messages from the client, identifies and invokes the correct business service to process the request, and informs the client of the outcome.&lt;br /&gt;
[[File:J2EEPatterns-Service Activator.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Denial of Service in Message Queues'''&lt;br /&gt;
&lt;br /&gt;
Attackers may fill up message queues to launch a Denial of Service (DOS) attacks. Perform a sanity check on the size of a message prior to accepting it into the message queue.&lt;br /&gt;
&lt;br /&gt;
'''Unauthenticated Messages'''&lt;br /&gt;
&lt;br /&gt;
Allowing unauthenticated access to &amp;lt;tt&amp;gt;BusinessServices&amp;lt;/tt&amp;gt; or other middle tier components leaves applications susceptible to insider attacks. Build system-to-system authentication into the &amp;lt;tt&amp;gt;ServiceActivator&amp;lt;/tt&amp;gt; itself or use container-managed mechanisms such as mutual certificate authentication.&lt;br /&gt;
&lt;br /&gt;
Another approach is to add authentication credentials into each message, similar to WS-Security authentication in web services. Remember, however, that processor-intensive authentication functions may themselves leave applications vulnerable to DOS attacks.&lt;br /&gt;
&lt;br /&gt;
'''Unauthorized Messages'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;BusinessServices&amp;lt;/tt&amp;gt; often expose critical middle tier or backend functions. Include functional authorization checks to protect &amp;lt;tt&amp;gt;BusinessServices&amp;lt;/tt&amp;gt; from authenticated user privilege escalation. &lt;br /&gt;
&lt;br /&gt;
Developers sometimes skip middle tier authorization, relying instead on functional authorization checks in the presentation tier (e.g. application controller checks). A presentation-tier-only authorization approach might work with strong infrastructure-level access controls. Remember, however, that you must duplicate authorization checks on all channels that access the business service. Wherever possible use the &amp;lt;tt&amp;gt;ServiceActivator&amp;lt;/tt&amp;gt; to enforce consistent access control for all messages.&lt;br /&gt;
&lt;br /&gt;
'''Dynamic SQL in Database Response Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Database Response strategy stores the message response in a database that a client subsequently polls. As with other database interaction patterns, remember to use properly configure Prepared Statements or stored procedures to avoid SQL injection.&lt;br /&gt;
&lt;br /&gt;
'''Unvalidated Email Addresses in Email Response Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Email Response strategy sends a message response though email. Malicious users who can influence the response may provide multiple email addresses and use the server as a gateway to send unauthorized spam messages. Use whitelist validation to ensure that users supply only one email address.&lt;br /&gt;
&lt;br /&gt;
==== Domain Store ====&lt;br /&gt;
Patterns such as ''Data Access Object'' emphasize the value of separating persistence details &amp;lt;tt&amp;gt;from BusinessObjects&amp;lt;/tt&amp;gt;. Some applications must also separate persistence details from the application object model. The ''Domain Store ''pattern allows for this separation, unlike container-managed persistence and bean-managed persistence strategies, which tie persistence code with the object model. The ''Domain Store'' pattern can be implemented using either a custom persistence framework or a persistence product, such as Java Data Objects.&lt;br /&gt;
[[File:J2EEPatterns-Domain Store.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Interpreter Injection'''&lt;br /&gt;
&lt;br /&gt;
''Domain Stores'' interact with interpreters such as SQL-enabled databases or Lightweight Directory Access Protocol (LDAP) enabled repositories. DAOs are therefore susceptible to injection-style attacks such as SQL injection. Avoid SQL attacks by using properly constructed prepared statements or stored procedures. For other interpreters, such as LDAP or XML data stores, use appropriate encoding to escape potentially malicious characters such as LDAP encoding or XML encoding. Remember to use a whitelist approach for encoding rather than a blacklist approach. &lt;br /&gt;
&lt;br /&gt;
You may not find encoding methods for some interpreters, leaving your code highly susceptible to interpreter injection. In these cases use strict whitelist input validation.&lt;br /&gt;
&lt;br /&gt;
'''Properly Close Resources'''&lt;br /&gt;
&lt;br /&gt;
Developers often forget to properly close resources such as database connections. Always close resources in a finally block, check for null pointers before closing on an object, and catch and handle any possible exception that may occur during resource closing ''within ''the finally block.&lt;br /&gt;
&lt;br /&gt;
'''Connection String Storage'''&lt;br /&gt;
&lt;br /&gt;
In order to communicate with a database or other backend server, most applications use a connection string that includes a user name and password. Most developers store this connection string un-encrypted in server configuration files such as server.xml. Malicious insiders and external attackers who exploit path traversal vulnerabilities may be able to use a plaintext connection string to gain unauthorized access to the database. &lt;br /&gt;
&lt;br /&gt;
Encrypt database and other server credentials during storage. Unfortunately, any method you use to encrypt the connection string has weaknesses. For instance, WebLogic provides an encrypt utility to encrypt any clear text property within a configuration file, but the utility relies on an encryption key stored on the application server. Other methods, such as Jasypt’s password based encryption mechanisms require either manual intervention or remote server communication during startup to implement securely. Nevertheless, storing a password plaintext is the least secure option so always use some form of encryption.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Web Service Broker ====&lt;br /&gt;
A web service is a popular way of exposing business services to other applications. The integration of different systems, however, can typically involve incompatibilities and complexities. Furthermore, it is desirable to limit the set of services that are exposed by an application as web services. The ''Web Service Broker'' pattern uses XML and web protocols to selectively expose and broker the services of an application. A &amp;lt;tt&amp;gt;WebServiceBroker&amp;lt;/tt&amp;gt; coordinates the interaction among services, collects responses and performs transactions. It is typically exposed using a WSDL. The &amp;lt;tt&amp;gt;EndpointProcessor&amp;lt;/tt&amp;gt; class is the entry point into the web service, and processes the client request. The &amp;lt;tt&amp;gt;EndpointProcessor&amp;lt;/tt&amp;gt; then invokes the web service through the &amp;lt;tt&amp;gt;WebServiceBroker&amp;lt;/tt&amp;gt;, which brokers to one or more services. &lt;br /&gt;
[[File:J2EEPatterns-Web Services Broker.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''XML Denial of Service'''&lt;br /&gt;
&lt;br /&gt;
Attackers may try Denial of Service (DOS) attacks on XML parsers and validators. Ensure either the web server, application server or an ''Intercepting Filter'' performs a sanity check on the ''size'' of the XML message '''prior'' '''''to''''' '''''XML parsing or validation to prevent DOS conditions.&lt;br /&gt;
&lt;br /&gt;
'''Disclosure of Information in SOAP Faults'''&lt;br /&gt;
&lt;br /&gt;
One of the most common information disclosure vulnerabilities in web services is when error messages disclose full stack trace information and/or other internal details. Stack traces are often embedded in SOAP faults by default. Turn this feature off and return generic error messages to clients.&lt;br /&gt;
&lt;br /&gt;
'''Publishing WSDL Files'''&lt;br /&gt;
&lt;br /&gt;
Web Services Description Language (WSDL) files provide details on how to access web services and are very useful to attackers. Many SOAP frameworks publish the WSDL by default (e.g. http://url/path?WSDL). Turn this feature off.&lt;br /&gt;
&lt;br /&gt;
'''Using DTDs'''&lt;br /&gt;
&lt;br /&gt;
Document Type Definition (DTD) validators may be susceptible to a variety of attacks such as entity reference attacks. If possible, use XML Schema Definition (XSD) validators instead. If a DTD validator is required, ensure that the prologue of the DTD is not supplied by the message sender. Also ensure that external entity references are disabled unless absolutely necessary.&lt;br /&gt;
&lt;br /&gt;
'''Unvalidated Input on Web Services'''&lt;br /&gt;
&lt;br /&gt;
Web services often expose critical Enterprise Information Systems (EIS) that are vulnerable to interpreter injection attacks. Protect EIS systems at the web service level with strict input validation on all client-supplied parameters. XML encode untrusted data prior to its inclusion in a web service / XML response.&lt;br /&gt;
&lt;br /&gt;
'''Unauthenticated and Unauthorized Web Service Requests'''&lt;br /&gt;
&lt;br /&gt;
Like the other middle and EIS tier components, developers often employ weaker or altogether ignore authentication and authorization controls on web service requests – making web services an ideal target for attackers. Authenticate and authorize every web service request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/BusinessTier&amp;diff=65684</id>
		<title>Category:OWASP Security Analysis of Core J2EE Design Patterns Project/BusinessTier</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/BusinessTier&amp;diff=65684"/>
				<updated>2009-07-09T21:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Middle and Integration Tier Security'''&lt;br /&gt;
&lt;br /&gt;
The majority of Open Web Application Security Project (OWASP) Top 10 vulnerabilities occur in the presentation tier. While attacks do exploit vulnerabilities in the business and enterprise integration tiers, the attacks typically ''originate'' from presentation tier web pages. For example, a SQL injection payload is usually delivered as part of an HTTP request to a web page, but the exploit itself usually occurs in the integration tier.&lt;br /&gt;
&lt;br /&gt;
We examine the business and integration tier patterns for security from two perspectives:&lt;br /&gt;
&lt;br /&gt;
# Attacks originating from the presentation tier, such as a Cross-Site Scripting (XSS) attack sent by a malicious web client&lt;br /&gt;
# Attacks originating from the business and integration tiers, such as an unauthorized web service request to an integration tier device&lt;br /&gt;
&lt;br /&gt;
The second perspective is important enough to warrant special attention. Many organizations ignore attacks originating from within the internal network. Unfortunately, the notion that organizations can completely trust insiders is flawed.In application security, developers sometimes argue that the process of launching an attack in the business or integration tiers is complicated and therefore less likely. As organizations increasingly adopt Service Oriented Architectures (SOA) in business and integration tiers with standards like Simple Object Access Protocol (SOAP) and Representation State Transfer (REST), security tools targeting these protocols are becoming readily available  . &lt;br /&gt;
&lt;br /&gt;
Even if you have not yet experienced an insider security incident, remember that insider attacks are on the rise and the systems you architect today may remain in production for years or even decades to come. Create secure applications by building-in protection from insider threats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Business Delegate ====&lt;br /&gt;
The ''Business Delegate'' serves as an abstraction of the business service classes of the business tier from the client tier. Implementing a business delegate effectively reduces the coupling between the client tier and business tier, and allows for greater flexibility and maintainability of the application code. The most significant benefit of this pattern is the capability to hide potentially sensitive implementation details of the business services from the calling client tier. Furthermore, a business delegate can effectively handle business tier exceptions (such as &amp;lt;tt&amp;gt;java.rmi.Remote&amp;lt;/tt&amp;gt; exceptions) and translate them into more meaningful, application-level exceptions to be forwarded to the client.&lt;br /&gt;
[[File:J2EEPatterns-Business Delegate.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Whitelist input validation'''&lt;br /&gt;
&lt;br /&gt;
The DelegateProxyStrategy uses &amp;lt;tt&amp;gt;BusinessDelegate &amp;lt;/tt&amp;gt;objects as simple proxies to underlying services. Each &amp;lt;tt&amp;gt;BusinessDelegate&amp;lt;/tt&amp;gt; is business context specific and is therefore a good place to implement whitelist security input validation. Remember, however, that &amp;lt;tt&amp;gt;BusinessDelegate&amp;lt;/tt&amp;gt; validation only applies to input originating from the presentation tier. You need to duplicate input validation functionality for all other channels that access the same business tier, such as web services.&lt;br /&gt;
&lt;br /&gt;
'''Exception Handling'''&lt;br /&gt;
&lt;br /&gt;
A property of sound exception management is the practice of throwing an exception that is meaningful to the target tier. For example, a &amp;lt;tt&amp;gt;JMSException&amp;lt;/tt&amp;gt; caught by a business tier object should not be propagated to the client tier. Instead, a custom, application-level, exception should be sent to the client tier. &amp;lt;tt&amp;gt;BusinessDelegate&amp;lt;/tt&amp;gt; can effectively perform this translation, intercepting service-level exceptions from the business tier and throwing application-level exceptions to the client tier. This practice helps protect implementation-level details of the business services from calling clients. Note that exceptions can occur within and across many tiers, and restricting exception handling logic to the &amp;lt;tt&amp;gt;BusinessDelegate&amp;lt;/tt&amp;gt; alone is insufficient.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Service Locator ====&lt;br /&gt;
JEE application modules from the client tier often need to access business or integration tier services, such as JMS components, EJB components, or data sources. These components are typically housed in a central registry. In order to communicate with this registry, the client uses the Java Naming and Directory Interface (JNDI) API to obtain an &amp;lt;tt&amp;gt;InitialContext&amp;lt;/tt&amp;gt; object containing the desired object name. Unfortunately, this process can be repeated across several clients, increasing complexity and decreasing performance. The ''Service Locator ''pattern implements a &amp;lt;tt&amp;gt;ServiceLocator&amp;lt;/tt&amp;gt; singleton class that encapsulates API lookups and lookup complexities, and provides an easy-to-use interface for the client tier. This pattern helps promote reuse of resource-intensive lookups, and decouples the client tier from the underlying lookup implementation details.&lt;br /&gt;
[[File:J2EEPatterns-Service Locator.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Memory Leaks in Caching'''&lt;br /&gt;
&lt;br /&gt;
Developers typically use caching to improve performance. If you are not careful about implementing caching, however, you can actually degrade performance over time. &lt;br /&gt;
&lt;br /&gt;
Many developers use collections like HashMaps to maintain references to cached objects. Suppose you maintain a cache using a HashMap where the keys are Strings describing services in the &amp;lt;tt&amp;gt;ServiceLocator&amp;lt;/tt&amp;gt; and the values are &amp;lt;tt&amp;gt;Target&amp;lt;/tt&amp;gt; objects. After a period of inactivity you want to remove the Target reference to free memory. Simply running a method like &amp;lt;tt&amp;gt;close()&amp;lt;/tt&amp;gt; on the Target object will not actually make the object eligible for garbage collection because the cache HashMap still maintains a pointer to the Target object. You must remember to remove references from the HashMap otherwise you will experience memory degradation overtime and possibly suffer from Denial of Service (DoS) conditions. &lt;br /&gt;
&lt;br /&gt;
Use a WeakHashMap or another collection of WeakReferences or SoftReferences rather than traditional collections to maintain caches. A WeakHashMap maintains WeakReferences to key and value objects, meaning the cache will allow key and value objects to be eligible for garbage collection. Using WeakReferences allows the garbage collector to automatically remove objects from the cache when necessary, as long as the application does not maintain any strong references (i.e. regular pointers) to the object.&lt;br /&gt;
&lt;br /&gt;
If you cannot use WeakReferences or SoftReferences then ensure you regularly remove objects from the cache.&lt;br /&gt;
&lt;br /&gt;
'''Open Access to UDDI'''&lt;br /&gt;
&lt;br /&gt;
Many developers opt to use web services instead of more traditional middle tier technologies like Enterprise Java Beans (EJBs). In Service Oriented Architecture (SOAs), Universal Description, Discovery and Integration (UDDI), registries often play the role of Service Locator. UDDIs are extremely valuable to attackers since they house Web Service Definition Language (WSDL) files that provide blueprints of how and where to access web services. If you use UDDI, ensure that only authorized users can access registries. Consider using mutual certificate authentication with each UDDI request. Also ensure that an authenticated user is actually authorized to access specific parts of the registry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Session Façade ====&lt;br /&gt;
Business components in JEE applications often interact with many different services, each of which may involve complex processes. Exposing these components directly to the client tier is undesirable, as this leads to a tight coupling between the client and business tiers, and can lead to code duplication. The ''Session Façade'' pattern is used to encapsulate the services of the business tier and acts as an interface to the client. Developers typically implement a &amp;lt;tt&amp;gt;SessionFacade&amp;lt;/tt&amp;gt; class as a session bean and expose only the interfaces that clients require, hiding the complex interdependencies between &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt;. Very little or no business logic should be placed within a &amp;lt;tt&amp;gt;SessionFacade&amp;lt;/tt&amp;gt;.&lt;br /&gt;
[[File:J2EEPatterns-Session Facade.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Unauthenticated Client Calls'''&lt;br /&gt;
&lt;br /&gt;
Allowing unauthenticated access to Enterprise Java Beans (EJBs), web services, or other middle tier components leaves applications susceptible to insider attacks. In some cases, developers configure application servers to allow open access to the underlying DataSources such as databases. Build system-to-system authentication into the Session Façade itself or use container-managed mechanisms such as mutual certificate authentication. Maybe also mention that DataSources can be made available by app servers for anyone on the network to retrieve.&lt;br /&gt;
&lt;br /&gt;
'''Deserializing Objects from Untrusted Sources'''&lt;br /&gt;
&lt;br /&gt;
Developers often use Remote Method Invocation over Internet Inter-Orb Protocol (RMI-IIOP) to communicate between the presentation and business tiers. RMI uses Java serialization and deserialization to transfer objects over the network. Treat deserialization as a dangerous function because some Java Virtual Machines are vulnerable to Denial Of Service (DOS) conditions when attackers transmit specially crafted serialized objects. Remember to treat client or third party-supplied serialized objects as untrusted input; malicious users can modify the serialized version of an object to inject malicious data or even supply objects running malicious code&lt;br /&gt;
&lt;br /&gt;
Decrease the risk of a DOS attack by authenticating requests ''prior ''to deserializing data. Also upgrade and patch Java Virtual Machines just like other critical software components such as operating systems.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Middle Tier Authorization at Session Facade'''&lt;br /&gt;
&lt;br /&gt;
''Session Façades'' are entry points to the middle tier, meaning they are ideal for handling middle-tier authorization. Ensure clients have sufficient privileges to access any function exposed through ''Session Façades''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Application Service ====&lt;br /&gt;
While the ''Session Façade'' pattern allows for the decoupling of the client tier from the business tier and encapsulates the services of the business tier, &amp;lt;tt&amp;gt;SessionFacade &amp;lt;/tt&amp;gt;objects should not encapsulate business logic. An application may contain multiple &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt; (see the next pattern) that perform distinct services, but placing the business logic here introduces coupling between &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt;. The ''Application Service'' pattern provides a uniform service layer for the client. An &amp;lt;tt&amp;gt;ApplicationService&amp;lt;/tt&amp;gt; class acts as a central location to implement business logic that encapsulates a specific business service of the application and reduces coupling between &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ApplicationService&amp;lt;/tt&amp;gt; object can implement common logic acting on different &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt;, implement use case-specific business logic, invoke business methods in a &amp;lt;tt&amp;gt;BusinessObject&amp;lt;/tt&amp;gt;, or methods in other &amp;lt;tt&amp;gt;ApplicationServices&amp;lt;/tt&amp;gt;. An &amp;lt;tt&amp;gt;ApplicationService&amp;lt;/tt&amp;gt; is commonly implemented as a plain-old Java object (POJO).&lt;br /&gt;
[[File:J2EEPatterns-Application Service.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
'''Unauthenticated Client Calls'''&lt;br /&gt;
&lt;br /&gt;
Allowing unauthenticated access to Enterprise Java Beans (EJBs), web services, or other middle tier components leaves applications susceptible to insider attacks. Build system-to-system authentication into the ''Application Service ''itself or use container-managed mechanisms such as mutual certificate authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Business Object ====&lt;br /&gt;
Ideally, a multi-tiered application is decoupled into presentation, business and data tiers. Of the three, the business tier often results in duplicated code and tight coupling with data logic. The ''Business Object ''pattern allows for the separation of the business state and behavior from the rest of the application, and the centralization of both. &amp;lt;tt&amp;gt;BusinessObjects &amp;lt;/tt&amp;gt;encapsulate the core business data, and implement the desired business behavior, all while separating persistence logic from the business logic. Using this pattern, the client interacts directly with a &amp;lt;tt&amp;gt;BusinessObject&amp;lt;/tt&amp;gt; that will delegate behavior to one or more business entities, and manage its own persistence logic using a desired persistence strategy, such as POJOs or EJB entity beans.&lt;br /&gt;
[[File:J2EEPatterns-Business Object.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== General Notes ===&lt;br /&gt;
&lt;br /&gt;
In most cases, ''Business Objects'' do not implement common security features such as authentication and authorization, data validation and encoding, or session management. Ideally, a ''Business Object'' should simply provide accessor methods and offer basic business logic functions. You still need to develop with standard secure coding practices such as error handling and logging.&lt;br /&gt;
&lt;br /&gt;
==== Composite Entity ====&lt;br /&gt;
''Business Objects ''separate business logic and business data. While Enterprise Java Beans (EJB) entity beans are one way to implement ''Business Objects'', they come with complexity and network overhead. The ''Composite Entity'' pattern uses both local entity beans and Plain Old Java Objects (POJOs) to implement persistent ''Business Objects''. The ''Composite Entity'' can aggregate a single &amp;lt;tt&amp;gt;BusinessObject &amp;lt;/tt&amp;gt;and its related dependant &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt; into coarse-grained entity beans. Using this pattern allows developers to leverage the EJB architecture, such as container-managed transactions, security, and persistence. &lt;br /&gt;
[[File:J2EEPatterns-Composite Entity.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== General Notes ===&lt;br /&gt;
&lt;br /&gt;
'''Entity Bean Alternatives'''&lt;br /&gt;
&lt;br /&gt;
With the rise of third party persistence frameworks such as Hibernate and IBATIS, fewer developers use entity beans. In general, application developers can take security advice for ''Composite Entity'' and apply it to persistence frameworks other than Entity Beans.&lt;br /&gt;
&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Interpreter Injection'''&lt;br /&gt;
&lt;br /&gt;
If you use bean managed persistence (BMP) with entity beans, then protect against injection attacks by using secure prepared statements, stored procedures, or appropriate encoding for non-database persistence mechanisms such as XML encoding for creating XML documents.&lt;br /&gt;
&lt;br /&gt;
In most cases persistence frameworks like Hibernate automatically protect against SQL injection. Remember, however, that many persistence frameworks allow you to create custom queries through special functions like Hibernate Query Language (HQL). If you dynamically concatenate strings to create custom queries, then your application may be vulnerable to injection despite the fact that you use a persistence framework.&lt;br /&gt;
&lt;br /&gt;
'''Plaintext Transmission of Confidential Data'''&lt;br /&gt;
&lt;br /&gt;
The Composite Transfer Object strategy creates a &amp;lt;tt&amp;gt;TransferObject&amp;lt;/tt&amp;gt; to send to a remote client. Many organizations do not use encrypted communication channels within the internal network, so a malicious insider attacker might sniff confidential data within a &amp;lt;tt&amp;gt;TransferObject&amp;lt;/tt&amp;gt; during transmission. Either do not serialize confidential variables or use an encrypted communication channel like Secure Socket Layer (SSL) during transmission.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Transfer Object ====&lt;br /&gt;
Integration patterns such as ''Session Façade'' and ''Business Object'' often need to return data to the client. A client, however, may potentially call several getter methods on these objects, and when these patterns are implemented as remote enterprise beans, a significant network overhead is incurred with each call. The ''Transfer Object'' pattern is designed to optimize the transfer of data to the client tier. A &amp;lt;tt&amp;gt;TransferObject&amp;lt;/tt&amp;gt; encapsulates all data elements within a single structure and returns this structure to the calling client. The ''Transfer Object'' pattern serves to reduce network traffic, transfer bulk data with far fewer remote calls, and promote code reuse.&lt;br /&gt;
[[File:J2EEPatterns-Transfer Object.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Plaintext Transmission of Confidential Data'''&lt;br /&gt;
&lt;br /&gt;
Many organizations do not use encrypted communication channels within the internal network, so a malicious insider attacker might sniff confidential data within a &amp;lt;tt&amp;gt;TransferObject&amp;lt;/tt&amp;gt; during transmission. Either do not serialize confidential variables or use an encrypted communication channel like Secure Socket Layer (SSL) during transmission.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Transfer Object Assembler ====&lt;br /&gt;
Clients often need to access business data from potentially many different &amp;lt;tt&amp;gt;BusinessObjects&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;TransferObjects&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;or ApplicationServices&amp;lt;/tt&amp;gt; to perform processing. Direct access to these different components by the client can lead to tight coupling between tiers and code duplication. The ''Transfer Object Assembler ''pattern provides an efficient way to collect multiple &amp;lt;tt&amp;gt;Transfer Objects&amp;lt;/tt&amp;gt; across different business components and return the information to the client. Think of ''Transfer Object Assembler ''as a factory to create &amp;lt;tt&amp;gt;Transfer Objects&amp;lt;/tt&amp;gt;. The client invokes the &amp;lt;tt&amp;gt;TransferObjectAssembler&amp;lt;/tt&amp;gt;, which retrieves and processes different &amp;lt;tt&amp;gt;TransferObjects&amp;lt;/tt&amp;gt; from the business tier, constructs a composite &amp;lt;tt&amp;gt;TransferObject&amp;lt;/tt&amp;gt; known as the &amp;lt;tt&amp;gt;ApplicationModel&amp;lt;/tt&amp;gt;, and returns the &amp;lt;tt&amp;gt;ApplicationModel&amp;lt;/tt&amp;gt; to the client. Note that the client uses the &amp;lt;tt&amp;gt;ApplicationModel&amp;lt;/tt&amp;gt; for read-only purposes, and does not modify any data contained within it.&lt;br /&gt;
[[File:J2EEPatterns-Transfer Object Assembler.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
'''Unauthenticated Client Calls'''&lt;br /&gt;
&lt;br /&gt;
Allowing unauthenticated access to &amp;lt;tt&amp;gt;TransferObjectAssemblers&amp;lt;/tt&amp;gt; or other middle tier components leaves applications susceptible to insider attacks. If you expose your &amp;lt;tt&amp;gt;TransferObjectAssemblers&amp;lt;/tt&amp;gt; directly to clients, then build in system-to-system authentication or use container-managed mechanisms such as mutual certificate authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Value List Handler ====&lt;br /&gt;
Searching is a common operation in JEE applications. A search typically is initiated by the client tier and execution by the business tier. More concretely, this can involve several invocations of entity bean finder methods or &amp;lt;tt&amp;gt;DataAccessObjects&amp;lt;/tt&amp;gt; by the client, particularly if the result set of the search is large. This introduces network overhead. The ''Value List Handler ''pattern affords efficient searching and result set caching, which can allow the client to traverse and select desired objects from the result set. A &amp;lt;tt&amp;gt;ValueListHandler&amp;lt;/tt&amp;gt; object executes the search and obtains the results in a &amp;lt;tt&amp;gt;ValueList&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ValueList&amp;lt;/tt&amp;gt; is normally created and manipulated by the &amp;lt;tt&amp;gt;ValueListHandler&amp;lt;/tt&amp;gt; through a &amp;lt;tt&amp;gt;DataAccessObject&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ValueList&amp;lt;/tt&amp;gt; is returned to the client, and the client can iterate through the list contents using a &amp;lt;tt&amp;gt;ValueListIterator&amp;lt;/tt&amp;gt;.&lt;br /&gt;
[[File:J2EEPatterns-Value List Handler.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== General Notes ===&lt;br /&gt;
&lt;br /&gt;
In most cases, ''Value List Handlers ''do not implement common security features such as authentication and authorization, data validation and encoding, or session management. You still need to develop with standard secure coding practices such as error handling and logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/PresentationTier&amp;diff=65683</id>
		<title>Category:OWASP Security Analysis of Core J2EE Design Patterns Project/PresentationTier</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/PresentationTier&amp;diff=65683"/>
				<updated>2009-07-09T21:21:40Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Intercepting Filter ====&lt;br /&gt;
The ''Intercepting Filter'' pattern may be used in instances where there is the need to execute logic before and after the main processing of a request (pre and postprocessing). The logic resides in &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; objects and typically consist of code that is common across multiple requests. The Servlet 2.3 Specification provides a mechanism for building filters and chaining of &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; through configuration. A &amp;lt;tt&amp;gt;FilterManager&amp;lt;/tt&amp;gt; controls the execution of a number of loosely-coupled &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; (referred to as a &amp;lt;tt&amp;gt;FilterChain&amp;lt;/tt&amp;gt;), each of which performs a specific action. This Standard Filter Strategy can also be replaced by a Custom Filter Strategy which replaces the Servlet Specification’s object wrapping with a custom implementation.&lt;br /&gt;
&lt;br /&gt;
[[File:J2EEPatterns-Intercepting Filter.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Relying Only on a Blacklist Validation Filter'''&lt;br /&gt;
&lt;br /&gt;
Developers often use blacklists in &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; as their only line of defense against input attacks such as Cross Site Scripting (XSS). Attackers constantly circumvent blacklists because of errors in canonicalization and character encoding. In order to sufficiently protect applications, do not rely on a blacklist validation filter as the sole means of protection; also validate input with strict whitelists on all input and/or encode data at every sink. &lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Filter'''&lt;br /&gt;
&lt;br /&gt;
Encoding data before forwarding requests to the &amp;lt;tt&amp;gt;Target&amp;lt;/tt&amp;gt; is too early because the data is too far from the sink point and may actually end up in several sink points, each requiring a different form of encoding. For instance, suppose an application uses a client-supplied e-mail address in a Structured Query Language (SQL) query, a Lightweight Directory Access Protocol (LDAP) lookup, and within a Hyper Text Markup Language (HTML) page. SQL, LDAP, and HTML are all different sinks and each requires a unique form of encoding. It may be impossible to encode input at the &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; for all three sink types without breaking functionality. On the other hand, performing encoding after the &amp;lt;tt&amp;gt;Target&amp;lt;/tt&amp;gt; returns data is too late since data will have already reached the sink by the time it reaches the &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Overly Generous Whitelist Validation'''&lt;br /&gt;
&lt;br /&gt;
While attempting to implement whitelist validation, developers often allow a large range of characters that may include potentially malicious characters. For example, some developers will allow all printable ASCII characters which contain malicious XSS and SQL injection characters such as less than signs and semi-colons. If your whitelists are not sufficiently restrictive, perform additional encoding at each data sink.&lt;br /&gt;
&lt;br /&gt;
'''XML Denial of Service'''&lt;br /&gt;
&lt;br /&gt;
If you use ''Intercepting Filter'' to preprocess XML messages, then remember that attackers may try many different Denial of Service (DOS) attacks on XML parsers and validators. Ensure either the web server, application server, or the first &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; on the chain performs a sanity check on the ''size'' of the XML message '''prior'' '''''to''''' '''''XML parsing or validation to prevent DOS conditions.&lt;br /&gt;
&lt;br /&gt;
'''Logging Arbitrary HTTP Parameters'''&lt;br /&gt;
&lt;br /&gt;
A common cross-cutting application security concern is logging and monitoring of user actions. Although an ''Intercepting Filter'' is ideally situated to log incoming requests, avoid logging entire HTTP requests. HTTP requests contain user-supplied parameters which often include confidential data such as passwords, credit card numbers and personally identifiable information (PII) such as an address. Logging confidential data or PII may be in violation of privacy and/or security regulations. &lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Input Validation'''&lt;br /&gt;
&lt;br /&gt;
Use an ''Intercepting Filter'' to implement security input validation consistently across all presentation tier pages including both Servlets and JSPs. The &amp;lt;tt&amp;gt;Filter’s&amp;lt;/tt&amp;gt; position between the client and the front/application controllers make it an ideal location for a blacklist against all input. Ideally, developers should always employ whitelist validation rather than blacklist validation; however, in practice developers often select blacklist validation due to the difficulty in creating whitelists. In cases where blacklist validation is used, ensure that additional encoding is performed at each data sink (e.g. HTML and JavaScript encoding).&lt;br /&gt;
&lt;br /&gt;
'''Page-Level Authorization'''&lt;br /&gt;
&lt;br /&gt;
Use an ''Intercepting Filter'' to examine requests from the client to ensure that a user is authorized to access a particular page. Centralizing authorization checks removes the burden of including explicit page-level authorization deeper in the application. The Spring Security framework employs an ''Intercepting Filter'' for authorization. &lt;br /&gt;
&lt;br /&gt;
Remember that page-level authorization is only one component of a complete authorization scheme. Perform authorization at the command level if you use &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; objects, the parameter level such as HTTP request parameters, and at the business logic level such as ''Business Delegate'' or ''Session Façade''. Remember to propagate user access control information such as users’ roles to other design layers like the ''Application Controller''. The OWASP Enterprise Security Application Programming Interface (ESAPI) uses &amp;lt;tt&amp;gt;ThreadLocal&amp;lt;/tt&amp;gt; objects to maintain user authorization data throughout the life of a thread.&lt;br /&gt;
&lt;br /&gt;
'''Session Management'''&lt;br /&gt;
&lt;br /&gt;
Session management is usually one of the first security controls that an application applies to a request. Aside from container-managed session management controls such as idle timeout and invalidation, some applications implement controls such as fixed session timeout, session rotation and session-IP correlation through proprietary code. Use an ''Intercepting Filter ''to apply the additional session management controls before each request is processed.&lt;br /&gt;
&lt;br /&gt;
Invalidating the current session token and assigning a new session token after authentication is a common defense against session fixation attacks. This control can also be handled in an ''Intercepting Filter ''specifically configured to intercept authentication requests. You may alternatively use a generic session management &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; that intercepts all requests, and then use conditional logic to check, specifically, for authentication requests in order to apply a defense against session fixation attacks. Be aware, however, that using a generic &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; introduces maintenance overhead when you implement new authentication paths.&lt;br /&gt;
&lt;br /&gt;
'''Audit Logging'''&lt;br /&gt;
&lt;br /&gt;
Since ''Intercepting Filters'' are often designed to intercept all requests, they are ideally situated to perform logging of user actions for auditing purposes. Consider implementing a &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; that intercepts all requests and logs information such as:&lt;br /&gt;
&lt;br /&gt;
* Username for authenticated requests&lt;br /&gt;
* Timestamp of request&lt;br /&gt;
* Resource requested&lt;br /&gt;
* Response type such as success, error, etc.&lt;br /&gt;
&lt;br /&gt;
The logging filter should be configured as the first &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; in the chain in order to log all requests irrespective of any errors that may occur in &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; further down the chain. Never log confidential or PII data.&lt;br /&gt;
&lt;br /&gt;
==== Front Controller ====&lt;br /&gt;
Processing a request typically consists of a number of request handling activities such as protocol handling, navigation and routing, core processing, and dispatch as well as view processing&amp;lt;sup&amp;gt;vii&amp;lt;/sup&amp;gt;. A controller provides a place for centralizing this common logic performed for each request. Typically implemented as a Servlet, the ''Front Controller ''can perform this common logic and further delegate the action management (servicing the request) and view management (dispatching a view for user output) activities to an ''Application Controller''. This pattern provides centralization of request control logic and partitioning of an application between control and processing.&lt;br /&gt;
[[File:J2EEPatterns-Front Controller.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Physical Resource Mapping'''&lt;br /&gt;
&lt;br /&gt;
The Physical Resource Mapping strategy maps user-supplied parameters directly to physical resources such as files residing on the server. Attackers often take advantage of this strategy to gain illicit access to resources. In a directory traversal exploit, for example, clients supply the server with the physical location of a file such as “file=statement_060609.pdf”. Attackers attempt to access other files on the server by supplying malicious parameters such as “file=../../../../../etc/password”. If the application blindly accepts and opens any user-supplied filename then the attacker may have access to a whole array of sensitive files, including properties and configuration files that often contain hard-coded passwords. &lt;br /&gt;
&lt;br /&gt;
Developers sometimes mitigate directory traversal attacks by checking for the presence of a specific prefix or suffix, such as verifying that the file parameter begins with “statement” and ends with “.pdf”. A crafty attacker can take advantage of null character injection and enter “file=statement_060609.pdf/../../../../etc/password%00.pdf”. Java will see that the resource beings with “statement” and ends with “.pdf” whereas the operating system may actually drop all remaining characters after the %00 null terminator and open the password file.&lt;br /&gt;
&lt;br /&gt;
As a rule, avoid using the Physical Resource Mapping strategy altogether. If you must use this strategy, ensure that the application operates in a sandboxed environment with the Java Security Manager and/or employs sufficient operating system controls to protect resources from unauthorized access.&lt;br /&gt;
&lt;br /&gt;
'''Invoking Commands Without Sufficient Authorization'''&lt;br /&gt;
&lt;br /&gt;
In the Command and Controller strategy, users supply a &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; object which the &amp;lt;tt&amp;gt;Application Controller &amp;lt;/tt&amp;gt;subsequently handles by invoking an action. Developers who rely on client-side controls and page-level access control often forget to check if the user is actually ''allowed ''to invoke a given &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Attackers take advantage of this vulnerability by simply modifying a parameter. A common example is a Create Read Update Delete (CRUD) transaction, such as http://siteurl/controller?command=viewUser&amp;amp;userName=jsmith. An attacker can simply modify “viewUser” to “deleteUser”. Often developers assume that if clients cannot see a link to “deleteUser” on a web page then they will not be able to invoke the “deleteUser” command. We like to call this ''GUI-based Authorization ''and it is a surprisingly common vulnerability in web applications.&lt;br /&gt;
&lt;br /&gt;
Ensure that clients are actually allowed to invoke the supplied command by performing an authorization check on the application server. Provide the &amp;lt;tt&amp;gt;Application Controller&amp;lt;/tt&amp;gt; sufficient data about the current user to perform the authorization check, such as roles and username. Consider using a &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object to store user data.&lt;br /&gt;
&lt;br /&gt;
'''Unhandled Mappings in the Multiplexed Resource Mapping Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Multiplexed Resource Mapping strategy maps sets of logical requests to physical resources. For example, all requests that end with a “.ctrl” suffix are handled by a &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; object. Often developers forget to account for non-existent mappings, such as suffixes not associated with specific handlers.&lt;br /&gt;
&lt;br /&gt;
Create a default &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; for non-existent mappings. Ensure the &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; simply provides a generic error message; relying on application server defaults often leads to propagation of detailed error messages and sometimes even reflected XSS in the error message (e.g. “The resource &amp;amp;lt;script&amp;amp;gt;alert(‘xss’)&amp;amp;lt;/script&amp;amp;gt;.pdf could not be found”).&lt;br /&gt;
&lt;br /&gt;
'''Logging of Arbitrary HTTP Parameters'''&lt;br /&gt;
&lt;br /&gt;
A common cross-cutting application security concern is logging and monitoring of user actions. Although a ''Front Controller'' is ideally situated to log incoming requests, avoid logging entire HTTP requests. HTTP requests contain user-supplied parameters which often include confidential data such as passwords and credit card numbers and personally identifiable information (PII) such as an address. Logging confidential data or PII may be in violation of privacy and/or security regulations. &lt;br /&gt;
&lt;br /&gt;
'''Duplicating Common Logic Across Multiple Front Controllers'''&lt;br /&gt;
&lt;br /&gt;
If you use multiple ''Front Controllers'' for different types of requests, be sure to use the Base Front strategy to centralize security controls common to all requests. Duplicating cross-cutting security concerns such as authentication or session management checks in multiple ''Front Controllers'' may decrease maintainability. In addition, the inconsistent implementation of security checks may result in difficult-to-find security holes for specific use cases. If you use the BaseFront strategy to encapsulate cross-cutting security controls, then declare all security check methods as ''final'' in order to prevent method overriding and potentially skipping security checks in subclasses. The risk of overriding security checks increases with the size of the development team. &lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Logical Resource Mapping'''&lt;br /&gt;
&lt;br /&gt;
The Logical Resource Mapping strategy forces developers to explicitly define resources available for download and prevents directory traversal attacks.&lt;br /&gt;
&lt;br /&gt;
'''Session Management'''&lt;br /&gt;
&lt;br /&gt;
Session management is usually one of the first security controls that an application applies to a request. Aside from container-managed session management controls such as idle timeout and invalidation, some applications implement controls such as fixed session timeout, session rotation, and session-IP correlation through proprietary code. Use a ''Front Controller'' to apply the additional session management controls before each request is processed.&lt;br /&gt;
&lt;br /&gt;
Invalidating the current session token and assigning a new session token after authentication is a common defense against session fixation attacks. This control can also be handled by ''Front Controller'' .&lt;br /&gt;
&lt;br /&gt;
'''Audit Logging'''&lt;br /&gt;
&lt;br /&gt;
Since ''Front Controllers ''are often designed to intercept all requests, they are ideally situated to perform logging of user actions for auditing purposes. Consider logging request information such as:&lt;br /&gt;
&lt;br /&gt;
* Username for authenticated requests&lt;br /&gt;
* Timestamp of request&lt;br /&gt;
* Resource requested&lt;br /&gt;
* Response type such as success, error, etc.&lt;br /&gt;
&lt;br /&gt;
Never log confidential or PII data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Context Object ====&lt;br /&gt;
In a multi-tiered applications, one tier may retrieve data from an interface using a specific protocol and then pass this data to another tier to be used for processing or as input into decision logic. In order to reduce the dependency of the inner tiers on any specific protocol, the protocol-specific details of the data can be removed and the data populated into a &amp;lt;tt&amp;gt;ContextObject&amp;lt;/tt&amp;gt; which can be shared between tiers. Examples of such data include HTTP parameters, application configuration values, or security data such as the user login information, defined by the Request Context, Configuration Context, and Security Context strategies, respectively. By removing the protocol-specific details from the input, the ''Context Object'' pattern significantly reduces the effort required to adapt code to a change in the application’s interfaces.&lt;br /&gt;
[[File:J2EEPatterns-Context Object.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Context Object Auto-Population Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Context Object Auto-Population strategy uses client-supplied parameters to populate the variables in a &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object. Rather than using a logical mapping to match parameters with &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; variables, the Context Object Auto-Population strategy automatically matches &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; variable names with parameter names. In some cases, developers maintain two types of variables within a &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object: client-supplied and server supplied. An e-commerce application, for example, might have a ShoppingCartContext object with client-supplied product ID and quantity variables and a price variable derived from a server-side database query. If a client supplies a request such as “http://siteurl/controller?command=purchase&amp;amp;prodID=43quantity=2” then the Context Object Auto-Population strategy will automatically set the ShoppingCartContext.prodId=43 and ShoppingCartContext.quantity=2. What if the user appends “&amp;amp;price=0.01” to the original query? The strategy automatically sets the ShoppingCarContext.price=0.01 even though the price value should not be client controlled. Ryan Berg and Dinis Cruz and of Ounce labs documented this as a vulnerability in the Spring Model View Controller (MVC) framework.&lt;br /&gt;
&lt;br /&gt;
Avoid using the Context Object Auto-Population strategy wherever possible. If you must use this strategy, ensure that the user is actually allowed to supply the variables to the context object by performing explicit authorization checks.&lt;br /&gt;
&lt;br /&gt;
'''Assuming Security Context Reflects All Security Concerns'''&lt;br /&gt;
&lt;br /&gt;
The Security Context strategy should more precisely be called an Access Control Context strategy. Developers often assume that security is comprised entirely of authentication, authorization and encryption. This line of thinking often leads developers to believe that using the Secure Socket Layer (SSL) with user authentication and authorization is sufficient for creating a secure web application. &lt;br /&gt;
&lt;br /&gt;
Also remember that fine-grained authorization decisions may be made further downstream in the application architecture, such as at the ''Business Delegate''. Consider propagating roles, permissions, and other relevant authorization information via the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Whitelist Input Validation'''&lt;br /&gt;
&lt;br /&gt;
The Request Context Validation strategy uses the &amp;lt;tt&amp;gt;RequestContext&amp;lt;/tt&amp;gt; object to perform validation on client-supplied values. The Core J2EE Patterns book provides examples for form and business logic level validation, such as verifying the correct number of digits in a credit card. Use the same mechanism to perform security input validation with regular expressions. Unlike ''Intercepting Filter''s, &amp;lt;tt&amp;gt;RequestContexts&amp;lt;/tt&amp;gt; encapsulate enough context data to perform whitelist validation. Many developers employ this strategy in Apache Struts applications by opting to use the Apache Commons Validator plugin for security input validation. &lt;br /&gt;
&lt;br /&gt;
In several real-world implementations of Request Context Validation, the&amp;lt;tt&amp;gt; RequestContext&amp;lt;/tt&amp;gt; only encapsulates HTTP parameters. Remember that malicious user-supplied input can come from a variety of other sources: cookies, URI paths, and other HTTP headers. If you do use the Request Context Validation strategy for security input validation then provide mechanisms for security input validation on other forms of input. For example, use an ''Intercepting Filter'' to validate cookie data.&lt;br /&gt;
&lt;br /&gt;
'''Flagging Tainted Variables'''&lt;br /&gt;
&lt;br /&gt;
Conceptually, &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; objects form the last layer where applications can differentiate between untrusted user-supplied data and trusted system-supplied data. For instance, a shopping cart &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object might contain a user-supplied shipping address and a database-supplied product name. Generally speaking, objects logically downstream from the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object cannot distinguish user-supplied data from system-supplied data. If you encode data at sink points and you want to minimize performance impact by encoding only user-supplied data (as opposed to system generated data), then consider adding an “isTainted” flag for each variable in the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; class. Set “isTainted” to true if the variable is user supplied or derived from another user supplied value. Set “isTainted” to false if the variable is computer generated and can be trusted. Store the instance variable and “isTainted” booleans as key/value pairs in a collection with efficient lookups (such as a &amp;lt;tt&amp;gt;WeakHashMap)&amp;lt;/tt&amp;gt;. Downstream in the application, simply check if a variable is tainted (originates from user-supplied input) prior to deciding to encode it at sink points. For instance, you might HTML, JavaScript, or Cascading Stylesheet (CSS) encode all tainted data that you print to stream in a Servlet while leaving untainted data as is. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Application Controller ====&lt;br /&gt;
While the ''Front Controller'' pattern stresses centralization of logic common to all incoming requests, the conditional logic related to mapping each request to a command and view set can be further separated. The &amp;lt;tt&amp;gt;FrontController&amp;lt;/tt&amp;gt; performs all generic request processing and delegates the conditional logic to an &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; can then decide, based on the request, which command should service the request and which view to dispatch. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; can be extended to include new use cases through a map holding references to the Command and View for each transaction. ''The Application Controller'' pattern is central to the Apache Struts model view controller framework. &lt;br /&gt;
[[File:J2EEPatterns-Application Controller.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Unauthorized Commands'''&lt;br /&gt;
&lt;br /&gt;
In the Command Handler strategy, users supply a &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; object which the &amp;lt;tt&amp;gt;ApplicationController &amp;lt;/tt&amp;gt;subsequently handles by invoking an action. Developers who rely on client-side controls and page-level access control often forget to check if the user should actually be ''allowed ''to invoke a given &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Attackers take advantage of this vulnerability by simply modifying a parameter. A common example is a Create Read Update Delete (CRUD) transaction, such as http://siteurl/controller?command=viewUser&amp;amp;userName=jsmith. An attacker can simply modify “viewUser” to “deleteUser”. Often developers assume that if clients cannot see a link to “deleteUser” on a web page then they will not be able to invoke the “deleteUser” command. We call this vulnerability ''GUI-based Authorization ''and it is a surprisingly common in web applications.&lt;br /&gt;
&lt;br /&gt;
Ensure that clients are actually allowed to invoke the supplied command by performing an authorization check on the application server. Provide the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; sufficient data about the current user to perform the authorization check, such as roles and username. Consider using a &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object to store user data.&lt;br /&gt;
&lt;br /&gt;
'''Unhandled Commands'''&lt;br /&gt;
&lt;br /&gt;
Create a default response page for non-existent commands. Relying on application server defaults often leads to propagation of detailed error messages and sometimes even reflected XSS in the error message (e.g. “The resource &amp;amp;lt;script&amp;amp;gt;alert(‘xss’)&amp;amp;lt;/script&amp;amp;gt;.pdf could not be found”).&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
The Transform Handler strategy uses XML Stylesheet Language Transforms (XSLTs) to generate views. Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''XML Denial of Service'''&lt;br /&gt;
&lt;br /&gt;
If you use ''Application Controller'' with XML messages then remember that attackers may try Denial of Service (DOS) attacks on XML parsers and validators. Ensure either the web server, application server, or an ''Intercepting Filter'' performs a sanity check on the ''size'' of the XML message '''prior'' '''''to''''' '''''XML parsing or validation to prevent DOS conditions.&lt;br /&gt;
&lt;br /&gt;
'''Disclosure of Information in SOAP Faults'''&lt;br /&gt;
&lt;br /&gt;
One of the most common information disclosure vulnerabilities in web services is when error messages disclose full stack trace information and/or other internal details. Stack traces are often embedded in SOAP faults by default. Turn this feature off and return generic error messages to clients.&lt;br /&gt;
&lt;br /&gt;
'''Publishing WSDL Files'''&lt;br /&gt;
&lt;br /&gt;
Web Services Description Language (WSDL) files provide details on how to access web services and are very useful to attackers. Many SOAP frameworks publish the WSDL by default (e.g. http://url/path?WSDL). Turn this feature off.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Synchronization Token as Anti-CSRF Mechanism'''&lt;br /&gt;
&lt;br /&gt;
Synchronizer tokens are random numbers designed to detect duplicate web page requests. Use cryptographically strong random synchronized tokens to help prevent anti-Cross Site Request Forgery (CSRF). Remember, however, that CSRF tokens can be defeated if an attacker can successfully launch a Cross Site Scripting (XSS) attack on the application to programmatically parse and read the synchronization token. &lt;br /&gt;
&lt;br /&gt;
'''Page-Level Authorization'''&lt;br /&gt;
&lt;br /&gt;
If not already done using an ''Intercepting Filter'', use the ''Application Controller'' to examine client requests to ensure that only authorized users access a particular page. Centralizing authorization checks removes the burden of including explicit page-level authorization deeper in the application. &lt;br /&gt;
&lt;br /&gt;
Remember that page-level authorization is only one component to a complete authorization scheme. Perform authorization at the command level if you use &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; objects, the parameter level such as HTTP request parameters, and at the business logic level such as ''Business Delegate'' or ''Session Façade''. Remember to propagate user access control information such as users’ roles to other design layers. The OWASP Enterprise Security Application Programming Interface (ESAPI) uses &amp;lt;tt&amp;gt;ThreadLocal&amp;lt;/tt&amp;gt; objects to maintain user authorization data throughout the life of a thread.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== View Helper ====&lt;br /&gt;
View processing occurs with each request and typically consists of two major activities: processing and preparation of the data required by the view, and creating a view based on a template using data prepared during the first activity. These two components, often termed as &amp;lt;tt&amp;gt;Model&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt;, can be separated by using the ''View Helper ''pattern. Using this pattern, a view only contains the formatting logic either using the Template-Based View strategy such as a JSP or Controller-Based View Strategy using Servlets and XSLT transformations. The &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; then makes use of &amp;lt;tt&amp;gt;Helper&amp;lt;/tt&amp;gt; objects that both retrieve data from the &amp;lt;tt&amp;gt;PresentationModel&amp;lt;/tt&amp;gt; and encapsulate processing logic to format data for the View. JavaBean Helper and Custom Tag Helper are two popular strategies which use different data types (JavaBeans and custom view tags respectively) for encapsulating the model components. &lt;br /&gt;
[[File:J2EEPatterns-View Helper.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
Some developers elect to use Xml Stylesheet Language Transforms (XSLTs) within their &amp;lt;tt&amp;gt;Helper&amp;lt;/tt&amp;gt; objects. Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''Unencoded User Supplied Data'''&lt;br /&gt;
&lt;br /&gt;
Many JEE developers use standard and third party tag libraries extensively. Libraries such as Java Server pages Tag Libraries (JSTL) and Java Server Faces (JSF) simplify development by encapsulating view building logic and hiding difficult-to-maintain scriptlet code. Some tags automatically perform HTML encoding on common special characters. The “c:out” and “$(fn:escapeXml(variable))” Expression Language (EL) tags in JSTL automatically HTML encode potentially dangerous less-than, greater-than, ampersand, and apostrophe characters. Encoding a small subset of potentially malicious characters significantly reduces the risk of common Cross Site Scripting (XSS) attacks in web applications but may still leave other less-common malicious characters such as percentage signs unencoded. Many other tags do not perform any HTML encoding. Most do not perform any encoding for other sink types, such as JavaScript or Cascading Style Sheets (CSS).&lt;br /&gt;
&lt;br /&gt;
Assume tag libraries do not perform output encoding unless you have specific evidence to the contrary. Wherever possible, wrap existing tag libraries with custom tags that perform output encoding. If you cannot use custom tags then manually encode user supplied data prior to embedding it in a tag.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Custom Tag Helper'''&lt;br /&gt;
&lt;br /&gt;
The Custom Tag Helper strategy uses custom tags to create views. Wherever possible embed output encoding in custom tags to automatically protect against Cross Site Scripting (XSS) attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Composite View ====&lt;br /&gt;
Applications often contain common &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; components, both from layout and content perspectives, across multiple &amp;lt;tt&amp;gt;Views&amp;lt;/tt&amp;gt; in an application. These common components can be modularized by using the ''Composite View'' pattern which allows for a &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; to be built from modular, atomic components. Examples of modular components which can be reused are page headers, footers, and common tables. A &amp;lt;tt&amp;gt;CompositeView&amp;lt;/tt&amp;gt; makes use of a &amp;lt;tt&amp;gt;ViewManager&amp;lt;/tt&amp;gt; to assemble multiple views. A &amp;lt;tt&amp;gt;CompositeView&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt; can be assembled by JavaBeans, standard JSP tags such as &amp;lt;jsp:include&amp;gt;, or custom tags, &amp;lt;/nowiki&amp;gt;using the JavaBean View Management, Standard Tag View Management, or Custom Tag View Management strategies respectively. &lt;br /&gt;
[[File:J2EEPatterns-Composite View.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
The Transformer View Management strategy uses XML Stylesheet Language Transforms (XSLTs). Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''Skipping Authorization Check Within SubViews'''&lt;br /&gt;
&lt;br /&gt;
One of the most common web applications vulnerabilities is weak functional authorization. Developers sometimes use user role data to dynamically generate views. In the Core J2EE Pattern books the authors refer to these dynamic views as “Role-based content”. Role-based content prevents unauthorized users from ''viewing'' content but does not prevent unauthorized users from ''invoking'' Servlets and Java Server Pages (JSPs). For example, imagine a JEE accounting application with two JSPs – accounting_functions.jsp which is the main accounting page and gl.jsp representing the general ledger. In order to restrict access to the general ledger, developers include the following content in accounts.jsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;region: render template=’portal.jsp’&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;region:put section=’general_ledger’ content=’gl.jsp’ &amp;lt;/nowiki&amp;gt;        &lt;br /&gt;
       role=’accountant’ /&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/region:render&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code snippet above restricts the content in gl.jsp to users in the accountant role. Remember, however, that a user can simply access gl.jsp directly – a flaw that can be even more devastating if invoking gl.jsp with parameters causes a transaction to run such as posting a debit or credit.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Custom Tags'''&lt;br /&gt;
&lt;br /&gt;
The Custom Tag View Management strategy uses custom tags to create views. Wherever possible embed output encoding in custom tags to automatically protect against Cross Site Scripting (XSS) attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Service to Worker ====&lt;br /&gt;
Applications commonly dispatch a &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; based exclusively on the results of request processing. In this the ''Service to Worker ''pattern, the &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; (either &amp;lt;tt&amp;gt;FrontController&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;) performs business logic and, based on the result of that logic, creates a &amp;lt;tt&amp;gt;View &amp;lt;/tt&amp;gt;and invokes its logic. ''Service to Worker'' is different from ''Dispatcher View'' because in the latter the &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; logic is invoked '''before '''the''' '''business logic is invoked.&lt;br /&gt;
[[File:J2EEPatterns-Service to Worker.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Dispatching Error Pages Without a Default Error Handler'''&lt;br /&gt;
&lt;br /&gt;
In ''Service to Worker'', an &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; manages the flow of web pages. When an application encounters an error, the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; typically determines which error page to dispatch. The Core J2EE Patterns book uses the following line of code to determine which error page to forward the user to:&lt;br /&gt;
&lt;br /&gt;
next= ApplicationResources.getInstance().getErrorPage(e);&lt;br /&gt;
&lt;br /&gt;
Many developers use the approach of mapping exceptions to particular error pages, but do not account for a default error page. As applications evolve, the job of creating a friendly error page for every exception type becomes increasingly difficult. In many applications the &amp;lt;tt&amp;gt;ApplicationController &amp;lt;/tt&amp;gt;will simply dump a stack trace or even redisplay the client’s request back to them. Avoid both scenarios by providing a default generic error page. In Java EE you can implement default error handling through web.xml configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Dispatcher View ====&lt;br /&gt;
In instances where there is a limited amount or no business processing required prior to generating a response, control can be passed to the &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; directly from the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; performs general control logic and is only responsible for mapping the request to a corresponding &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt;. Dispatcher View pattern is typically used in situations where the response is entirely static or the response is generated from data which has been generated from a previous request. Using this pattern, view management is often so trivial (i.e. mapping of an alias to a resource) that no application-level logic is required and it is handled by the container. &lt;br /&gt;
[[File:J2EEPatterns-Dispatcher View.JPG]]&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Using User Supplied Forward Values'''&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; determines which view to dispatch to a user. In the Core J2EE Patterns book, the authors provide the following sample of code to determine the next page to dispatch to a user:&lt;br /&gt;
&lt;br /&gt;
 next = request.getParameter(“nextview”);&lt;br /&gt;
&lt;br /&gt;
Depending on how you forward users to the next page, an attacker may be able to:&lt;br /&gt;
&lt;br /&gt;
* Gain unauthorized access to pages if the forwarding mechanism bypasses authorization checks&lt;br /&gt;
* Forward unsuspecting users to a malicious site. Attackers can take advantage of the forwarding feature to craft more convincing phishing emails with links such as http://siteurl/page?nextview=http://malicioussite/attack.html. Since the URL originates from a trusted domain – “http://siteurl” in the example – it is less likely to be caught by phishing filters or careful users&lt;br /&gt;
* Perform Cross Site Scripting (XSS) in browsers that accept JavaScript URLs. For example, an attacker might send a phishing email with the following URL: [http://siteurl/page?nextview=javascript:do_something_malicious http://siteurl/page?nextview=javascript:do_something_malicious]&lt;br /&gt;
* Perform HTTP Response Splitting if the application uses an HTTP redirect to forward the user to the next page. The user supplies the literal value of the destination URL. Because the application server uses that URL in the header of the HTTP redirect response, a malicious user can inject carriage return and line feeds into the response using hex encoded %0A and %0D&lt;br /&gt;
&lt;br /&gt;
Do not rely on literal user-supplied values to determine the next page. Instead, use a logical mapping of numbers to actual pages. For example, in http://siteurl/page?nextview=1 the “1” maps to “edituser.jsp” on the server.&lt;br /&gt;
&lt;br /&gt;
'''Assuming User’s Navigation History '''&lt;br /&gt;
&lt;br /&gt;
The Core J2EE Patterns book discusses an example where the ''Dispatcher View'' pattern may be used. In the example, the application places an intermediate model in a temporary store and a later request uses that model to generate a response. When writing code for the second view, some developers assume that the user has already navigated to the first view thereby instantiating and populating the intermediate model. An attacker may take advantage of this assumption by directly navigating to the second view before the first. Similarly, if the first view automatically dispatches the second view (through an HTTP or JavaScript redirect), an attacker may drop the second request, resulting in an unexpected state. Always user server-side checks such as session variables to verify that the user has followed the intended navigation path. &lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/PresentationTier&amp;diff=65682</id>
		<title>Category:OWASP Security Analysis of Core J2EE Design Patterns Project/PresentationTier</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project/PresentationTier&amp;diff=65682"/>
				<updated>2009-07-09T21:19:10Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Intercepting Filter ====&lt;br /&gt;
The ''Intercepting Filter'' pattern may be used in instances where there is the need to execute logic before and after the main processing of a request (pre and postprocessing). The logic resides in &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; objects and typically consist of code that is common across multiple requests. The Servlet 2.3 Specification provides a mechanism for building filters and chaining of &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; through configuration. A &amp;lt;tt&amp;gt;FilterManager&amp;lt;/tt&amp;gt; controls the execution of a number of loosely-coupled &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; (referred to as a &amp;lt;tt&amp;gt;FilterChain&amp;lt;/tt&amp;gt;), each of which performs a specific action. This Standard Filter Strategy can also be replaced by a Custom Filter Strategy which replaces the Servlet Specification’s object wrapping with a custom implementation.&lt;br /&gt;
&lt;br /&gt;
[[File:J2EEPatterns-Intercepting Filter.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Relying Only on a Blacklist Validation Filter'''&lt;br /&gt;
&lt;br /&gt;
Developers often use blacklists in &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; as their only line of defense against input attacks such as Cross Site Scripting (XSS). Attackers constantly circumvent blacklists because of errors in canonicalization and character encoding. In order to sufficiently protect applications, do not rely on a blacklist validation filter as the sole means of protection; also validate input with strict whitelists on all input and/or encode data at every sink. &lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Filter'''&lt;br /&gt;
&lt;br /&gt;
Encoding data before forwarding requests to the &amp;lt;tt&amp;gt;Target&amp;lt;/tt&amp;gt; is too early because the data is too far from the sink point and may actually end up in several sink points, each requiring a different form of encoding. For instance, suppose an application uses a client-supplied e-mail address in a Structured Query Language (SQL) query, a Lightweight Directory Access Protocol (LDAP) lookup, and within a Hyper Text Markup Language (HTML) page. SQL, LDAP, and HTML are all different sinks and each requires a unique form of encoding. It may be impossible to encode input at the &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; for all three sink types without breaking functionality. On the other hand, performing encoding after the &amp;lt;tt&amp;gt;Target&amp;lt;/tt&amp;gt; returns data is too late since data will have already reached the sink by the time it reaches the &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Overly Generous Whitelist Validation'''&lt;br /&gt;
&lt;br /&gt;
While attempting to implement whitelist validation, developers often allow a large range of characters that may include potentially malicious characters. For example, some developers will allow all printable ASCII characters which contain malicious XSS and SQL injection characters such as less than signs and semi-colons. If your whitelists are not sufficiently restrictive, perform additional encoding at each data sink.&lt;br /&gt;
&lt;br /&gt;
'''XML Denial of Service'''&lt;br /&gt;
&lt;br /&gt;
If you use ''Intercepting Filter'' to preprocess XML messages, then remember that attackers may try many different Denial of Service (DOS) attacks on XML parsers and validators. Ensure either the web server, application server, or the first &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; on the chain performs a sanity check on the ''size'' of the XML message '''prior'' '''''to''''' '''''XML parsing or validation to prevent DOS conditions.&lt;br /&gt;
&lt;br /&gt;
'''Logging Arbitrary HTTP Parameters'''&lt;br /&gt;
&lt;br /&gt;
A common cross-cutting application security concern is logging and monitoring of user actions. Although an ''Intercepting Filter'' is ideally situated to log incoming requests, avoid logging entire HTTP requests. HTTP requests contain user-supplied parameters which often include confidential data such as passwords, credit card numbers and personally identifiable information (PII) such as an address. Logging confidential data or PII may be in violation of privacy and/or security regulations. &lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Input Validation'''&lt;br /&gt;
&lt;br /&gt;
Use an ''Intercepting Filter'' to implement security input validation consistently across all presentation tier pages including both Servlets and JSPs. The &amp;lt;tt&amp;gt;Filter’s&amp;lt;/tt&amp;gt; position between the client and the front/application controllers make it an ideal location for a blacklist against all input. Ideally, developers should always employ whitelist validation rather than blacklist validation; however, in practice developers often select blacklist validation due to the difficulty in creating whitelists. In cases where blacklist validation is used, ensure that additional encoding is performed at each data sink (e.g. HTML and JavaScript encoding).&lt;br /&gt;
&lt;br /&gt;
'''Page-Level Authorization'''&lt;br /&gt;
&lt;br /&gt;
Use an ''Intercepting Filter'' to examine requests from the client to ensure that a user is authorized to access a particular page. Centralizing authorization checks removes the burden of including explicit page-level authorization deeper in the application. The Spring Security framework employs an ''Intercepting Filter'' for authorization. &lt;br /&gt;
&lt;br /&gt;
Remember that page-level authorization is only one component of a complete authorization scheme. Perform authorization at the command level if you use &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; objects, the parameter level such as HTTP request parameters, and at the business logic level such as ''Business Delegate'' or ''Session Façade''. Remember to propagate user access control information such as users’ roles to other design layers like the ''Application Controller''. The OWASP Enterprise Security Application Programming Interface (ESAPI) uses &amp;lt;tt&amp;gt;ThreadLocal&amp;lt;/tt&amp;gt; objects to maintain user authorization data throughout the life of a thread.&lt;br /&gt;
&lt;br /&gt;
'''Session Management'''&lt;br /&gt;
&lt;br /&gt;
Session management is usually one of the first security controls that an application applies to a request. Aside from container-managed session management controls such as idle timeout and invalidation, some applications implement controls such as fixed session timeout, session rotation and session-IP correlation through proprietary code. Use an ''Intercepting Filter ''to apply the additional session management controls before each request is processed.&lt;br /&gt;
&lt;br /&gt;
Invalidating the current session token and assigning a new session token after authentication is a common defense against session fixation attacks. This control can also be handled in an ''Intercepting Filter ''specifically configured to intercept authentication requests. You may alternatively use a generic session management &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; that intercepts all requests, and then use conditional logic to check, specifically, for authentication requests in order to apply a defense against session fixation attacks. Be aware, however, that using a generic &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; introduces maintenance overhead when you implement new authentication paths.&lt;br /&gt;
&lt;br /&gt;
'''Audit Logging'''&lt;br /&gt;
&lt;br /&gt;
Since ''Intercepting Filters'' are often designed to intercept all requests, they are ideally situated to perform logging of user actions for auditing purposes. Consider implementing a &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; that intercepts all requests and logs information such as:&lt;br /&gt;
&lt;br /&gt;
* Username for authenticated requests&lt;br /&gt;
* Timestamp of request&lt;br /&gt;
* Resource requested&lt;br /&gt;
* Response type such as success, error, etc.&lt;br /&gt;
&lt;br /&gt;
The logging filter should be configured as the first &amp;lt;tt&amp;gt;Filter&amp;lt;/tt&amp;gt; in the chain in order to log all requests irrespective of any errors that may occur in &amp;lt;tt&amp;gt;Filters&amp;lt;/tt&amp;gt; further down the chain. Never log confidential or PII data.&lt;br /&gt;
&lt;br /&gt;
==== Front Controller ====&lt;br /&gt;
Processing a request typically consists of a number of request handling activities such as protocol handling, navigation and routing, core processing, and dispatch as well as view processing&amp;lt;sup&amp;gt;vii&amp;lt;/sup&amp;gt;. A controller provides a place for centralizing this common logic performed for each request. Typically implemented as a Servlet, the ''Front Controller ''can perform this common logic and further delegate the action management (servicing the request) and view management (dispatching a view for user output) activities to an ''Application Controller''. This pattern provides centralization of request control logic and partitioning of an application between control and processing.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Physical Resource Mapping'''&lt;br /&gt;
&lt;br /&gt;
The Physical Resource Mapping strategy maps user-supplied parameters directly to physical resources such as files residing on the server. Attackers often take advantage of this strategy to gain illicit access to resources. In a directory traversal exploit, for example, clients supply the server with the physical location of a file such as “file=statement_060609.pdf”. Attackers attempt to access other files on the server by supplying malicious parameters such as “file=../../../../../etc/password”. If the application blindly accepts and opens any user-supplied filename then the attacker may have access to a whole array of sensitive files, including properties and configuration files that often contain hard-coded passwords. &lt;br /&gt;
&lt;br /&gt;
Developers sometimes mitigate directory traversal attacks by checking for the presence of a specific prefix or suffix, such as verifying that the file parameter begins with “statement” and ends with “.pdf”. A crafty attacker can take advantage of null character injection and enter “file=statement_060609.pdf/../../../../etc/password%00.pdf”. Java will see that the resource beings with “statement” and ends with “.pdf” whereas the operating system may actually drop all remaining characters after the %00 null terminator and open the password file.&lt;br /&gt;
&lt;br /&gt;
As a rule, avoid using the Physical Resource Mapping strategy altogether. If you must use this strategy, ensure that the application operates in a sandboxed environment with the Java Security Manager and/or employs sufficient operating system controls to protect resources from unauthorized access.&lt;br /&gt;
&lt;br /&gt;
'''Invoking Commands Without Sufficient Authorization'''&lt;br /&gt;
&lt;br /&gt;
In the Command and Controller strategy, users supply a &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; object which the &amp;lt;tt&amp;gt;Application Controller &amp;lt;/tt&amp;gt;subsequently handles by invoking an action. Developers who rely on client-side controls and page-level access control often forget to check if the user is actually ''allowed ''to invoke a given &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Attackers take advantage of this vulnerability by simply modifying a parameter. A common example is a Create Read Update Delete (CRUD) transaction, such as http://siteurl/controller?command=viewUser&amp;amp;userName=jsmith. An attacker can simply modify “viewUser” to “deleteUser”. Often developers assume that if clients cannot see a link to “deleteUser” on a web page then they will not be able to invoke the “deleteUser” command. We like to call this ''GUI-based Authorization ''and it is a surprisingly common vulnerability in web applications.&lt;br /&gt;
&lt;br /&gt;
Ensure that clients are actually allowed to invoke the supplied command by performing an authorization check on the application server. Provide the &amp;lt;tt&amp;gt;Application Controller&amp;lt;/tt&amp;gt; sufficient data about the current user to perform the authorization check, such as roles and username. Consider using a &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object to store user data.&lt;br /&gt;
&lt;br /&gt;
'''Unhandled Mappings in the Multiplexed Resource Mapping Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Multiplexed Resource Mapping strategy maps sets of logical requests to physical resources. For example, all requests that end with a “.ctrl” suffix are handled by a &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; object. Often developers forget to account for non-existent mappings, such as suffixes not associated with specific handlers.&lt;br /&gt;
&lt;br /&gt;
Create a default &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; for non-existent mappings. Ensure the &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; simply provides a generic error message; relying on application server defaults often leads to propagation of detailed error messages and sometimes even reflected XSS in the error message (e.g. “The resource &amp;amp;lt;script&amp;amp;gt;alert(‘xss’)&amp;amp;lt;/script&amp;amp;gt;.pdf could not be found”).&lt;br /&gt;
&lt;br /&gt;
'''Logging of Arbitrary HTTP Parameters'''&lt;br /&gt;
&lt;br /&gt;
A common cross-cutting application security concern is logging and monitoring of user actions. Although a ''Front Controller'' is ideally situated to log incoming requests, avoid logging entire HTTP requests. HTTP requests contain user-supplied parameters which often include confidential data such as passwords and credit card numbers and personally identifiable information (PII) such as an address. Logging confidential data or PII may be in violation of privacy and/or security regulations. &lt;br /&gt;
&lt;br /&gt;
'''Duplicating Common Logic Across Multiple Front Controllers'''&lt;br /&gt;
&lt;br /&gt;
If you use multiple ''Front Controllers'' for different types of requests, be sure to use the Base Front strategy to centralize security controls common to all requests. Duplicating cross-cutting security concerns such as authentication or session management checks in multiple ''Front Controllers'' may decrease maintainability. In addition, the inconsistent implementation of security checks may result in difficult-to-find security holes for specific use cases. If you use the BaseFront strategy to encapsulate cross-cutting security controls, then declare all security check methods as ''final'' in order to prevent method overriding and potentially skipping security checks in subclasses. The risk of overriding security checks increases with the size of the development team. &lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Logical Resource Mapping'''&lt;br /&gt;
&lt;br /&gt;
The Logical Resource Mapping strategy forces developers to explicitly define resources available for download and prevents directory traversal attacks.&lt;br /&gt;
&lt;br /&gt;
'''Session Management'''&lt;br /&gt;
&lt;br /&gt;
Session management is usually one of the first security controls that an application applies to a request. Aside from container-managed session management controls such as idle timeout and invalidation, some applications implement controls such as fixed session timeout, session rotation, and session-IP correlation through proprietary code. Use a ''Front Controller'' to apply the additional session management controls before each request is processed.&lt;br /&gt;
&lt;br /&gt;
Invalidating the current session token and assigning a new session token after authentication is a common defense against session fixation attacks. This control can also be handled by ''Front Controller'' .&lt;br /&gt;
&lt;br /&gt;
'''Audit Logging'''&lt;br /&gt;
&lt;br /&gt;
Since ''Front Controllers ''are often designed to intercept all requests, they are ideally situated to perform logging of user actions for auditing purposes. Consider logging request information such as:&lt;br /&gt;
&lt;br /&gt;
* Username for authenticated requests&lt;br /&gt;
* Timestamp of request&lt;br /&gt;
* Resource requested&lt;br /&gt;
* Response type such as success, error, etc.&lt;br /&gt;
&lt;br /&gt;
Never log confidential or PII data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Context Object ====&lt;br /&gt;
In a multi-tiered applications, one tier may retrieve data from an interface using a specific protocol and then pass this data to another tier to be used for processing or as input into decision logic. In order to reduce the dependency of the inner tiers on any specific protocol, the protocol-specific details of the data can be removed and the data populated into a &amp;lt;tt&amp;gt;ContextObject&amp;lt;/tt&amp;gt; which can be shared between tiers. Examples of such data include HTTP parameters, application configuration values, or security data such as the user login information, defined by the Request Context, Configuration Context, and Security Context strategies, respectively. By removing the protocol-specific details from the input, the ''Context Object'' pattern significantly reduces the effort required to adapt code to a change in the application’s interfaces.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Context Object Auto-Population Strategy'''&lt;br /&gt;
&lt;br /&gt;
The Context Object Auto-Population strategy uses client-supplied parameters to populate the variables in a &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object. Rather than using a logical mapping to match parameters with &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; variables, the Context Object Auto-Population strategy automatically matches &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; variable names with parameter names. In some cases, developers maintain two types of variables within a &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object: client-supplied and server supplied. An e-commerce application, for example, might have a ShoppingCartContext object with client-supplied product ID and quantity variables and a price variable derived from a server-side database query. If a client supplies a request such as “http://siteurl/controller?command=purchase&amp;amp;prodID=43quantity=2” then the Context Object Auto-Population strategy will automatically set the ShoppingCartContext.prodId=43 and ShoppingCartContext.quantity=2. What if the user appends “&amp;amp;price=0.01” to the original query? The strategy automatically sets the ShoppingCarContext.price=0.01 even though the price value should not be client controlled. Ryan Berg and Dinis Cruz and of Ounce labs documented this as a vulnerability in the Spring Model View Controller (MVC) framework.&lt;br /&gt;
&lt;br /&gt;
Avoid using the Context Object Auto-Population strategy wherever possible. If you must use this strategy, ensure that the user is actually allowed to supply the variables to the context object by performing explicit authorization checks.&lt;br /&gt;
&lt;br /&gt;
'''Assuming Security Context Reflects All Security Concerns'''&lt;br /&gt;
&lt;br /&gt;
The Security Context strategy should more precisely be called an Access Control Context strategy. Developers often assume that security is comprised entirely of authentication, authorization and encryption. This line of thinking often leads developers to believe that using the Secure Socket Layer (SSL) with user authentication and authorization is sufficient for creating a secure web application. &lt;br /&gt;
&lt;br /&gt;
Also remember that fine-grained authorization decisions may be made further downstream in the application architecture, such as at the ''Business Delegate''. Consider propagating roles, permissions, and other relevant authorization information via the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Whitelist Input Validation'''&lt;br /&gt;
&lt;br /&gt;
The Request Context Validation strategy uses the &amp;lt;tt&amp;gt;RequestContext&amp;lt;/tt&amp;gt; object to perform validation on client-supplied values. The Core J2EE Patterns book provides examples for form and business logic level validation, such as verifying the correct number of digits in a credit card. Use the same mechanism to perform security input validation with regular expressions. Unlike ''Intercepting Filter''s, &amp;lt;tt&amp;gt;RequestContexts&amp;lt;/tt&amp;gt; encapsulate enough context data to perform whitelist validation. Many developers employ this strategy in Apache Struts applications by opting to use the Apache Commons Validator plugin for security input validation. &lt;br /&gt;
&lt;br /&gt;
In several real-world implementations of Request Context Validation, the&amp;lt;tt&amp;gt; RequestContext&amp;lt;/tt&amp;gt; only encapsulates HTTP parameters. Remember that malicious user-supplied input can come from a variety of other sources: cookies, URI paths, and other HTTP headers. If you do use the Request Context Validation strategy for security input validation then provide mechanisms for security input validation on other forms of input. For example, use an ''Intercepting Filter'' to validate cookie data.&lt;br /&gt;
&lt;br /&gt;
'''Flagging Tainted Variables'''&lt;br /&gt;
&lt;br /&gt;
Conceptually, &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; objects form the last layer where applications can differentiate between untrusted user-supplied data and trusted system-supplied data. For instance, a shopping cart &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object might contain a user-supplied shipping address and a database-supplied product name. Generally speaking, objects logically downstream from the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; object cannot distinguish user-supplied data from system-supplied data. If you encode data at sink points and you want to minimize performance impact by encoding only user-supplied data (as opposed to system generated data), then consider adding an “isTainted” flag for each variable in the &amp;lt;tt&amp;gt;Context&amp;lt;/tt&amp;gt; class. Set “isTainted” to true if the variable is user supplied or derived from another user supplied value. Set “isTainted” to false if the variable is computer generated and can be trusted. Store the instance variable and “isTainted” booleans as key/value pairs in a collection with efficient lookups (such as a &amp;lt;tt&amp;gt;WeakHashMap)&amp;lt;/tt&amp;gt;. Downstream in the application, simply check if a variable is tainted (originates from user-supplied input) prior to deciding to encode it at sink points. For instance, you might HTML, JavaScript, or Cascading Stylesheet (CSS) encode all tainted data that you print to stream in a Servlet while leaving untainted data as is. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Application Controller ====&lt;br /&gt;
While the ''Front Controller'' pattern stresses centralization of logic common to all incoming requests, the conditional logic related to mapping each request to a command and view set can be further separated. The &amp;lt;tt&amp;gt;FrontController&amp;lt;/tt&amp;gt; performs all generic request processing and delegates the conditional logic to an &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; can then decide, based on the request, which command should service the request and which view to dispatch. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; can be extended to include new use cases through a map holding references to the Command and View for each transaction. ''The Application Controller'' pattern is central to the Apache Struts model view controller framework. &lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Unauthorized Commands'''&lt;br /&gt;
&lt;br /&gt;
In the Command Handler strategy, users supply a &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; object which the &amp;lt;tt&amp;gt;ApplicationController &amp;lt;/tt&amp;gt;subsequently handles by invoking an action. Developers who rely on client-side controls and page-level access control often forget to check if the user should actually be ''allowed ''to invoke a given &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Attackers take advantage of this vulnerability by simply modifying a parameter. A common example is a Create Read Update Delete (CRUD) transaction, such as http://siteurl/controller?command=viewUser&amp;amp;userName=jsmith. An attacker can simply modify “viewUser” to “deleteUser”. Often developers assume that if clients cannot see a link to “deleteUser” on a web page then they will not be able to invoke the “deleteUser” command. We call this vulnerability ''GUI-based Authorization ''and it is a surprisingly common in web applications.&lt;br /&gt;
&lt;br /&gt;
Ensure that clients are actually allowed to invoke the supplied command by performing an authorization check on the application server. Provide the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; sufficient data about the current user to perform the authorization check, such as roles and username. Consider using a &amp;lt;tt&amp;gt;Context &amp;lt;/tt&amp;gt;object to store user data.&lt;br /&gt;
&lt;br /&gt;
'''Unhandled Commands'''&lt;br /&gt;
&lt;br /&gt;
Create a default response page for non-existent commands. Relying on application server defaults often leads to propagation of detailed error messages and sometimes even reflected XSS in the error message (e.g. “The resource &amp;amp;lt;script&amp;amp;gt;alert(‘xss’)&amp;amp;lt;/script&amp;amp;gt;.pdf could not be found”).&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
The Transform Handler strategy uses XML Stylesheet Language Transforms (XSLTs) to generate views. Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''XML Denial of Service'''&lt;br /&gt;
&lt;br /&gt;
If you use ''Application Controller'' with XML messages then remember that attackers may try Denial of Service (DOS) attacks on XML parsers and validators. Ensure either the web server, application server, or an ''Intercepting Filter'' performs a sanity check on the ''size'' of the XML message '''prior'' '''''to''''' '''''XML parsing or validation to prevent DOS conditions.&lt;br /&gt;
&lt;br /&gt;
'''Disclosure of Information in SOAP Faults'''&lt;br /&gt;
&lt;br /&gt;
One of the most common information disclosure vulnerabilities in web services is when error messages disclose full stack trace information and/or other internal details. Stack traces are often embedded in SOAP faults by default. Turn this feature off and return generic error messages to clients.&lt;br /&gt;
&lt;br /&gt;
'''Publishing WSDL Files'''&lt;br /&gt;
&lt;br /&gt;
Web Services Description Language (WSDL) files provide details on how to access web services and are very useful to attackers. Many SOAP frameworks publish the WSDL by default (e.g. http://url/path?WSDL). Turn this feature off.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Synchronization Token as Anti-CSRF Mechanism'''&lt;br /&gt;
&lt;br /&gt;
Synchronizer tokens are random numbers designed to detect duplicate web page requests. Use cryptographically strong random synchronized tokens to help prevent anti-Cross Site Request Forgery (CSRF). Remember, however, that CSRF tokens can be defeated if an attacker can successfully launch a Cross Site Scripting (XSS) attack on the application to programmatically parse and read the synchronization token. &lt;br /&gt;
&lt;br /&gt;
'''Page-Level Authorization'''&lt;br /&gt;
&lt;br /&gt;
If not already done using an ''Intercepting Filter'', use the ''Application Controller'' to examine client requests to ensure that only authorized users access a particular page. Centralizing authorization checks removes the burden of including explicit page-level authorization deeper in the application. &lt;br /&gt;
&lt;br /&gt;
Remember that page-level authorization is only one component to a complete authorization scheme. Perform authorization at the command level if you use &amp;lt;tt&amp;gt;Command&amp;lt;/tt&amp;gt; objects, the parameter level such as HTTP request parameters, and at the business logic level such as ''Business Delegate'' or ''Session Façade''. Remember to propagate user access control information such as users’ roles to other design layers. The OWASP Enterprise Security Application Programming Interface (ESAPI) uses &amp;lt;tt&amp;gt;ThreadLocal&amp;lt;/tt&amp;gt; objects to maintain user authorization data throughout the life of a thread.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== View Helper ====&lt;br /&gt;
View processing occurs with each request and typically consists of two major activities: processing and preparation of the data required by the view, and creating a view based on a template using data prepared during the first activity. These two components, often termed as &amp;lt;tt&amp;gt;Model&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt;, can be separated by using the ''View Helper ''pattern. Using this pattern, a view only contains the formatting logic either using the Template-Based View strategy such as a JSP or Controller-Based View Strategy using Servlets and XSLT transformations. The &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; then makes use of &amp;lt;tt&amp;gt;Helper&amp;lt;/tt&amp;gt; objects that both retrieve data from the &amp;lt;tt&amp;gt;PresentationModel&amp;lt;/tt&amp;gt; and encapsulate processing logic to format data for the View. JavaBean Helper and Custom Tag Helper are two popular strategies which use different data types (JavaBeans and custom view tags respectively) for encapsulating the model components. &lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
Some developers elect to use Xml Stylesheet Language Transforms (XSLTs) within their &amp;lt;tt&amp;gt;Helper&amp;lt;/tt&amp;gt; objects. Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''Unencoded User Supplied Data'''&lt;br /&gt;
&lt;br /&gt;
Many JEE developers use standard and third party tag libraries extensively. Libraries such as Java Server pages Tag Libraries (JSTL) and Java Server Faces (JSF) simplify development by encapsulating view building logic and hiding difficult-to-maintain scriptlet code. Some tags automatically perform HTML encoding on common special characters. The “c:out” and “$(fn:escapeXml(variable))” Expression Language (EL) tags in JSTL automatically HTML encode potentially dangerous less-than, greater-than, ampersand, and apostrophe characters. Encoding a small subset of potentially malicious characters significantly reduces the risk of common Cross Site Scripting (XSS) attacks in web applications but may still leave other less-common malicious characters such as percentage signs unencoded. Many other tags do not perform any HTML encoding. Most do not perform any encoding for other sink types, such as JavaScript or Cascading Style Sheets (CSS).&lt;br /&gt;
&lt;br /&gt;
Assume tag libraries do not perform output encoding unless you have specific evidence to the contrary. Wherever possible, wrap existing tag libraries with custom tags that perform output encoding. If you cannot use custom tags then manually encode user supplied data prior to embedding it in a tag.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Custom Tag Helper'''&lt;br /&gt;
&lt;br /&gt;
The Custom Tag Helper strategy uses custom tags to create views. Wherever possible embed output encoding in custom tags to automatically protect against Cross Site Scripting (XSS) attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Composite View ====&lt;br /&gt;
Applications often contain common &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; components, both from layout and content perspectives, across multiple &amp;lt;tt&amp;gt;Views&amp;lt;/tt&amp;gt; in an application. These common components can be modularized by using the ''Composite View'' pattern which allows for a &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; to be built from modular, atomic components. Examples of modular components which can be reused are page headers, footers, and common tables. A &amp;lt;tt&amp;gt;CompositeView&amp;lt;/tt&amp;gt; makes use of a &amp;lt;tt&amp;gt;ViewManager&amp;lt;/tt&amp;gt; to assemble multiple views. A &amp;lt;tt&amp;gt;CompositeView&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt; can be assembled by JavaBeans, standard JSP tags such as &amp;lt;jsp:include&amp;gt;, or custom tags, &amp;lt;/nowiki&amp;gt;using the JavaBean View Management, Standard Tag View Management, or Custom Tag View Management strategies respectively. &lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''XSLT and XPath Vulnerabilities'''&lt;br /&gt;
&lt;br /&gt;
The Transformer View Management strategy uses XML Stylesheet Language Transforms (XSLTs). Avoid XSLT and related XPath vulnerabilities by performing strict whitelist input validation or XML encoding on any user-supplied data used in view generation.&lt;br /&gt;
&lt;br /&gt;
'''Skipping Authorization Check Within SubViews'''&lt;br /&gt;
&lt;br /&gt;
One of the most common web applications vulnerabilities is weak functional authorization. Developers sometimes use user role data to dynamically generate views. In the Core J2EE Pattern books the authors refer to these dynamic views as “Role-based content”. Role-based content prevents unauthorized users from ''viewing'' content but does not prevent unauthorized users from ''invoking'' Servlets and Java Server Pages (JSPs). For example, imagine a JEE accounting application with two JSPs – accounting_functions.jsp which is the main accounting page and gl.jsp representing the general ledger. In order to restrict access to the general ledger, developers include the following content in accounts.jsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;region: render template=’portal.jsp’&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;region:put section=’general_ledger’ content=’gl.jsp’ &amp;lt;/nowiki&amp;gt;        &lt;br /&gt;
       role=’accountant’ /&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/region:render&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code snippet above restricts the content in gl.jsp to users in the accountant role. Remember, however, that a user can simply access gl.jsp directly – a flaw that can be even more devastating if invoking gl.jsp with parameters causes a transaction to run such as posting a debit or credit.&lt;br /&gt;
&lt;br /&gt;
=== Use to Implement ===&lt;br /&gt;
&lt;br /&gt;
'''Output Encoding in Custom Tags'''&lt;br /&gt;
&lt;br /&gt;
The Custom Tag View Management strategy uses custom tags to create views. Wherever possible embed output encoding in custom tags to automatically protect against Cross Site Scripting (XSS) attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Service to Worker ====&lt;br /&gt;
Applications commonly dispatch a &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; based exclusively on the results of request processing. In this the ''Service to Worker ''pattern, the &amp;lt;tt&amp;gt;Controller&amp;lt;/tt&amp;gt; (either &amp;lt;tt&amp;gt;FrontController&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;) performs business logic and, based on the result of that logic, creates a &amp;lt;tt&amp;gt;View &amp;lt;/tt&amp;gt;and invokes its logic. ''Service to Worker'' is different from ''Dispatcher View'' because in the latter the &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; logic is invoked '''before '''the''' '''business logic is invoked.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Dispatching Error Pages Without a Default Error Handler'''&lt;br /&gt;
&lt;br /&gt;
In ''Service to Worker'', an &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; manages the flow of web pages. When an application encounters an error, the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; typically determines which error page to dispatch. The Core J2EE Patterns book uses the following line of code to determine which error page to forward the user to:&lt;br /&gt;
&lt;br /&gt;
next= ApplicationResources.getInstance().getErrorPage(e);&lt;br /&gt;
&lt;br /&gt;
Many developers use the approach of mapping exceptions to particular error pages, but do not account for a default error page. As applications evolve, the job of creating a friendly error page for every exception type becomes increasingly difficult. In many applications the &amp;lt;tt&amp;gt;ApplicationController &amp;lt;/tt&amp;gt;will simply dump a stack trace or even redisplay the client’s request back to them. Avoid both scenarios by providing a default generic error page. In Java EE you can implement default error handling through web.xml configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Dispatcher View ====&lt;br /&gt;
In instances where there is a limited amount or no business processing required prior to generating a response, control can be passed to the &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; directly from the &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; performs general control logic and is only responsible for mapping the request to a corresponding &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt;. Dispatcher View pattern is typically used in situations where the response is entirely static or the response is generated from data which has been generated from a previous request. Using this pattern, view management is often so trivial (i.e. mapping of an alias to a resource) that no application-level logic is required and it is handled by the container. &lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
'''Using User Supplied Forward Values'''&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;ApplicationController&amp;lt;/tt&amp;gt; determines which view to dispatch to a user. In the Core J2EE Patterns book, the authors provide the following sample of code to determine the next page to dispatch to a user:&lt;br /&gt;
&lt;br /&gt;
 next = request.getParameter(“nextview”);&lt;br /&gt;
&lt;br /&gt;
Depending on how you forward users to the next page, an attacker may be able to:&lt;br /&gt;
&lt;br /&gt;
* Gain unauthorized access to pages if the forwarding mechanism bypasses authorization checks&lt;br /&gt;
* Forward unsuspecting users to a malicious site. Attackers can take advantage of the forwarding feature to craft more convincing phishing emails with links such as http://siteurl/page?nextview=http://malicioussite/attack.html. Since the URL originates from a trusted domain – “http://siteurl” in the example – it is less likely to be caught by phishing filters or careful users&lt;br /&gt;
* Perform Cross Site Scripting (XSS) in browsers that accept JavaScript URLs. For example, an attacker might send a phishing email with the following URL: [http://siteurl/page?nextview=javascript:do_something_malicious http://siteurl/page?nextview=javascript:do_something_malicious]&lt;br /&gt;
* Perform HTTP Response Splitting if the application uses an HTTP redirect to forward the user to the next page. The user supplies the literal value of the destination URL. Because the application server uses that URL in the header of the HTTP redirect response, a malicious user can inject carriage return and line feeds into the response using hex encoded %0A and %0D&lt;br /&gt;
&lt;br /&gt;
Do not rely on literal user-supplied values to determine the next page. Instead, use a logical mapping of numbers to actual pages. For example, in http://siteurl/page?nextview=1 the “1” maps to “edituser.jsp” on the server.&lt;br /&gt;
&lt;br /&gt;
'''Assuming User’s Navigation History '''&lt;br /&gt;
&lt;br /&gt;
The Core J2EE Patterns book discusses an example where the ''Dispatcher View'' pattern may be used. In the example, the application places an intermediate model in a temporary store and a later request uses that model to generate a response. When writing code for the second view, some developers assume that the user has already navigated to the first view thereby instantiating and populating the intermediate model. An attacker may take advantage of this assumption by directly navigating to the second view before the first. Similarly, if the first view automatically dispatches the second view (through an HTTP or JavaScript redirect), an attacker may drop the second request, resulting in an unexpected state. Always user server-side checks such as session variables to verify that the user has followed the intended navigation path. &lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Web_Services_Broker.JPG&amp;diff=65681</id>
		<title>File:J2EEPatterns-Web Services Broker.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Web_Services_Broker.JPG&amp;diff=65681"/>
				<updated>2009-07-09T21:15:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-View_Helper.JPG&amp;diff=65680</id>
		<title>File:J2EEPatterns-View Helper.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-View_Helper.JPG&amp;diff=65680"/>
				<updated>2009-07-09T21:15:09Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Value_List_Handler.JPG&amp;diff=65679</id>
		<title>File:J2EEPatterns-Value List Handler.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Value_List_Handler.JPG&amp;diff=65679"/>
				<updated>2009-07-09T21:14:43Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Transfer_Object_Assembler.JPG&amp;diff=65678</id>
		<title>File:J2EEPatterns-Transfer Object Assembler.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Transfer_Object_Assembler.JPG&amp;diff=65678"/>
				<updated>2009-07-09T21:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Transfer_Object.JPG&amp;diff=65677</id>
		<title>File:J2EEPatterns-Transfer Object.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Transfer_Object.JPG&amp;diff=65677"/>
				<updated>2009-07-09T21:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Session_Facade.JPG&amp;diff=65676</id>
		<title>File:J2EEPatterns-Session Facade.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Session_Facade.JPG&amp;diff=65676"/>
				<updated>2009-07-09T21:13:31Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_to_Worker.JPG&amp;diff=65675</id>
		<title>File:J2EEPatterns-Service to Worker.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_to_Worker.JPG&amp;diff=65675"/>
				<updated>2009-07-09T21:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_Locator.JPG&amp;diff=65674</id>
		<title>File:J2EEPatterns-Service Locator.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_Locator.JPG&amp;diff=65674"/>
				<updated>2009-07-09T21:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_Activator.JPG&amp;diff=65673</id>
		<title>File:J2EEPatterns-Service Activator.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Service_Activator.JPG&amp;diff=65673"/>
				<updated>2009-07-09T21:12:13Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Intercepting_Filter.JPG&amp;diff=65672</id>
		<title>File:J2EEPatterns-Intercepting Filter.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Intercepting_Filter.JPG&amp;diff=65672"/>
				<updated>2009-07-09T21:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Dispatcher_View.JPG&amp;diff=65671</id>
		<title>File:J2EEPatterns-Dispatcher View.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Dispatcher_View.JPG&amp;diff=65671"/>
				<updated>2009-07-09T21:11:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Front_Controller.JPG&amp;diff=65670</id>
		<title>File:J2EEPatterns-Front Controller.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Front_Controller.JPG&amp;diff=65670"/>
				<updated>2009-07-09T21:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Domain_Store.JPG&amp;diff=65669</id>
		<title>File:J2EEPatterns-Domain Store.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Domain_Store.JPG&amp;diff=65669"/>
				<updated>2009-07-09T21:10:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Data_Access_Object.JPG&amp;diff=65668</id>
		<title>File:J2EEPatterns-Data Access Object.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Data_Access_Object.JPG&amp;diff=65668"/>
				<updated>2009-07-09T21:09:53Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Context_Object.JPG&amp;diff=65667</id>
		<title>File:J2EEPatterns-Context Object.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Context_Object.JPG&amp;diff=65667"/>
				<updated>2009-07-09T21:09:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Composite_View.JPG&amp;diff=65666</id>
		<title>File:J2EEPatterns-Composite View.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Composite_View.JPG&amp;diff=65666"/>
				<updated>2009-07-09T21:08:09Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Composite_Entity.JPG&amp;diff=65665</id>
		<title>File:J2EEPatterns-Composite Entity.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Composite_Entity.JPG&amp;diff=65665"/>
				<updated>2009-07-09T21:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Business_Object.JPG&amp;diff=65664</id>
		<title>File:J2EEPatterns-Business Object.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Business_Object.JPG&amp;diff=65664"/>
				<updated>2009-07-09T21:06:59Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Business_Delegate.JPG&amp;diff=65663</id>
		<title>File:J2EEPatterns-Business Delegate.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:J2EEPatterns-Business_Delegate.JPG&amp;diff=65663"/>
				<updated>2009-07-09T21:06:06Z</updated>
		
		<summary type="html">&lt;p&gt;Rksethi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rksethi</name></author>	</entry>

	</feed>