<?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=Chris+Schmidt</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=Chris+Schmidt"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Chris_Schmidt"/>
		<updated>2026-04-28T00:39:19Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:ESAPI_Logo.png&amp;diff=163155</id>
		<title>File:ESAPI Logo.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:ESAPI_Logo.png&amp;diff=163155"/>
				<updated>2013-11-13T20:38:13Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Summit_2013/Attendes&amp;diff=160897</id>
		<title>Projects Summit 2013/Attendes</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Summit_2013/Attendes&amp;diff=160897"/>
				<updated>2013-10-16T02:37:44Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has the current list of projected attendee.&lt;br /&gt;
&lt;br /&gt;
If you are going to be at the Projects Summit, please add your name to the list bellow, indicating your availability&lt;br /&gt;
&lt;br /&gt;
===Legend:===&lt;br /&gt;
&lt;br /&gt;
* AD = All Day&lt;br /&gt;
* MO = Morning&lt;br /&gt;
* AF = Afternoon&lt;br /&gt;
* EV = Evening&lt;br /&gt;
&lt;br /&gt;
===Attendees List and availability===&lt;br /&gt;
 &lt;br /&gt;
* '''Andrew van der Stock''': Mon (AD) Tue (AD), Wed (MO)&lt;br /&gt;
* '''Andrew Muller''': Mon (AD) Tue (AD), Wed (MO)&lt;br /&gt;
* '''Chris Schmidt''': Sun (EV), Mon (AD), Tue (AD), Wed (AD), Thu (AD), Fri (MO)&lt;br /&gt;
* '''Chris Smith''': Mon (AD) Tue (AD), Wed (MO)&lt;br /&gt;
* '''Dennis Groves''': Sun (MO), Mon (AD) Tue (AD), Wed (MO), &lt;br /&gt;
* '''Dinis Cruz''': Sun (AD), Mon (AD) Tue (AD), Wed (MO), Thu (MO) &lt;br /&gt;
* '''Fabio Cerullo''':&lt;br /&gt;
* '''Johanna Curiel''' : Sun (EV) , Mon (AD), Tue (AD),  Wed (AD)&lt;br /&gt;
* '''Jonathan Marcil''':&lt;br /&gt;
* '''Konstantinos Papapanagiotou''':  Sun (AD), Mon (AD) Tue (AD), Wed (AD), Thu (AF) &lt;br /&gt;
* '''Larry Conklin''':&lt;br /&gt;
* '''Martin Knobloch''':&lt;br /&gt;
* '''Simon Bennetts''': Tue (EV), Wed(MO), Thu (MO)&lt;br /&gt;
* '''Samantha Groves''': Sun (AD), Mon (AD) Tue (AD), Wed (AD), Thu (AD), Fri (AD) &lt;br /&gt;
* '''Seba Deleersnyder''': Wed (AD), Thu (AD)&lt;br /&gt;
* '''Kevin W. Wall''': Sun(EV), Mon (AD), Tue (AD), Wed(AD), Thu (MO, AF; 5:00pm flight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{:Projects_Summit_2013/Navigation}}&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133495</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133495"/>
				<updated>2012-07-25T18:33:53Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reboot Type: Type 1&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Redesign (October 2012 - Columbus, Oh) -- $3-5K'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
* Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
* Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
* Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
* Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
* Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
* Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Rebooted Hackathon (December 2012 - Denver, Co) -- $5-8k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
* Best Mobile Component&lt;br /&gt;
* Best Cloud Component&lt;br /&gt;
* Best Application Component&lt;br /&gt;
* Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
* Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
* Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
* Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
Anticipated Budget&lt;br /&gt;
* Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
* Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
* Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Tutorials Video Series -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Documentation Sprint -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133494</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133494"/>
				<updated>2012-07-25T18:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reboot Type: Type 1&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Redesign (October 2012 - Columbus, Oh) -- $3-5K'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
* Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
* Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
* Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
* Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
* Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
* Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Rebooted Hackathon (December 2012 - Denver, Co) -- $5-8k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
* Best Mobile Component&lt;br /&gt;
* Best Cloud Component&lt;br /&gt;
* Best Application Component&lt;br /&gt;
* Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
* Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
* Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
* Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
* Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
* Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
* Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Tutorials Video Series -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Documentation Sprint -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133493</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133493"/>
				<updated>2012-07-25T18:31:08Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reboot Type: Type 1&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Redesign (October 2012 - Columbus, Oh) -- $3-5K'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
* Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
* Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
* Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
* Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
* Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
** Attendees&lt;br /&gt;
*** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
*** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
*** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
*** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
* Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Rebooted Hackathon (December 2012 - Denver, Co) -- $5-8k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
* Best Mobile Component&lt;br /&gt;
* Best Cloud Component&lt;br /&gt;
* Best Application Component&lt;br /&gt;
* Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
* Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
* Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
* Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
* Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
* Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
* Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Tutorials Video Series -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ESAPI:Documentation Sprint -- ~$2k'''&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133492</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133492"/>
				<updated>2012-07-25T18:29:34Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reboot Type: Type 1&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Redesign (October 2012 - Columbus, Oh) -- $3-5K&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
** Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
** Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
** Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
** Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
** Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
*** Attendees&lt;br /&gt;
**** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
**** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
**** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
**** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
** Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Rebooted Hackathon (December 2012 - Denver, Co) -- $5-8k&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
** Best Mobile Component&lt;br /&gt;
** Best Cloud Component&lt;br /&gt;
** Best Application Component&lt;br /&gt;
** Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
** Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
*** Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
*** Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
*** Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
** Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
** Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
** Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Tutorials Video Series -- ~$2k &lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Documentation Sprint -- ~$2k&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012&amp;diff=133491</id>
		<title>Projects Reboot 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012&amp;diff=133491"/>
				<updated>2012-07-25T18:25:09Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
'''Welcome the the OWASP Project Reboot Page:&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
''What is the OWASP Project ReBoot initiative?''&lt;br /&gt;
&lt;br /&gt;
OWASP needs to refresh, revitalize &amp;amp; update its projects. We need to make the software development community more aware of our efforts and demonstrate the foundations library of solutions &amp;amp; guidance designed to help with the secure application development lifecycle.&lt;br /&gt;
&lt;br /&gt;
The proposal for this initiative is here:&lt;br /&gt;
&lt;br /&gt;
'''[https://docs.google.com/a/owasp.org/file/d/0B5Z9zE0hx0LNSUZvOWVKd1JRWnlVaGJMcjB3SEN3Zw/edit Project Re-Boot Proposal]'''&lt;br /&gt;
&lt;br /&gt;
'''Project Lead''': Eoin Keary &amp;lt;br&amp;gt;&lt;br /&gt;
'''Proposal Approval Team''': Jim Manico, Rahim Jina, Tom Brennan,...&amp;lt;br&amp;gt;&lt;br /&gt;
[[Reboot_Review_Criteria]] (For review team)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Board Approval can be seen here:&lt;br /&gt;
[https://www.owasp.org/index.php/May_14,2012]&lt;br /&gt;
&lt;br /&gt;
To that end we have a budget to fund various project related activities. We hope putting some financial support behind projects will re-energise our community and hopefully deliver some great high quality material which can be used to support software developers and testers for years to come:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Current Submissions''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP Application Security Guide For CISOs]]'''  - Selected for Reboot&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP Development Guide]]''' - Selected for Reboot&amp;lt;br&amp;gt;  &lt;br /&gt;
'''[[OWASP Zed Attack Proxy Reboot2012|Zed Attack Proxy]]'''   - Selected for Reboot&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP WebGoat Reboot2012|OWASP WebGoat]]''' &amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP AppSensor]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP Mobile Project]]'''  - Selected for Reboot&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP_Portuguese_Project_Proposal | OWASP Portuguese Language Project]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP_Application_Testing_guide_v4]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[OWASP_ESAPI_Reboot2012 | OWASP ESAPI]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Key Dates:'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Submission closing date''': July 30th 2012 &amp;lt;br&amp;gt;&lt;br /&gt;
'''First round of proposal selection''': 15 June 2012&amp;lt;br&amp;gt;&lt;br /&gt;
'''Second round of proposal selection''': 10 Aug 2012&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''First Round Decisions'''&amp;lt;br&amp;gt;&lt;br /&gt;
The following table shows to votes submitted by reviewers. 1 is first preference, 2 is second preference and so on..&lt;br /&gt;
'''Any Outstanding / additional proposals shall be voted on during the second round of proposal selection (10/8/2012).'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;  width=&amp;quot;50%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Proposal&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Tom&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Jim&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Rahim&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Eoin&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP Development Guide&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP CISO Guide&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP Mobile Project&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 5 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP WebGoat PHP&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 6 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP Zed Attack Proxy&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;!-- Row 7 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;OWASP AppSensor&amp;lt;/td&amp;gt;&amp;lt;!-- Col 1 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;!-- Col 2 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;!-- Col 3 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;!-- Col 4 --&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;!-- Col 5 --&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Projects selected via first round of review''': &amp;lt;br&amp;gt;&lt;br /&gt;
#'''OWASP Development Guide''': Funding Amount: $5000 initial funding&lt;br /&gt;
#'''OWASP CISO Guide''': Funding Amount: $5000 initial funding&lt;br /&gt;
#'''OWASP Zed Attack Proxy''': Funding Amount: $5000 initial funding&lt;br /&gt;
#'''OWASP Mobile Project''': Funding Amount: $5000 initial funding&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Activity types''':&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Type 1''': Update, rewrite &amp;amp; complete guides or tools.&amp;lt;br&amp;gt;&lt;br /&gt;
This &amp;quot;type&amp;quot; is aimed at both existing and new tools or guides which require development effort to update, augment, rewrite, develop in order to achieve a high quality release quality product.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
#&amp;quot;Mini&amp;quot; Project based summits: Expenses associated with getting global workshops, with the aim of releasing a new version of a project.&amp;lt;br&amp;gt;&lt;br /&gt;
#Paying contributors for their time and effort.&amp;lt;br&amp;gt;&lt;br /&gt;
#Paying for user guides etc to be professionally developed (technical writing etc).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Type 2''': Market, Training, Awareness, increase adoption.&amp;lt;br&amp;gt;&lt;br /&gt;
Existing, healthy robust tools and guides can utilise Type 2 activities to help with creating awareness and increasing adoption of that project.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
#Assisting with expenses associated with marketing a project.&amp;lt;br&amp;gt;&lt;br /&gt;
#Costs facilitating OWASP project focused training and awareness events&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How are we going to fund this??'''&amp;lt;br&amp;gt;&lt;br /&gt;
We are requesting all OWASP chapters which are in a healthy financial position to pledge 25% of their chapters funds to pay for this initiative.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.surveymonkey.com/s/OWASP-REBOOT Pledge some chapter funds here]&lt;br /&gt;
&lt;br /&gt;
Donate $1.00 to help save a current or future software application [http://www.firstgiving.com/fundraiser/projectreboot/owasp-project-reboot Click Here]&lt;br /&gt;
&lt;br /&gt;
The Foundation shall also support this initiative with additional funding.&amp;lt;br&amp;gt;&lt;br /&gt;
The goal is to accumulate a budget of $100K which shall be appointed to projects undergoing this reboot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/owasp.org/spreadsheet/pub?hl=en_US&amp;amp;hl=en_US&amp;amp;key=0Atu4kyR3ljftdEdQWTczbUxoMUFnWmlTODZ2ZFZvaXc&amp;amp;output=html - Chapter Funds]&lt;br /&gt;
&lt;br /&gt;
'''Can I apply for this Reboot?'''&amp;lt;br&amp;gt;&lt;br /&gt;
You certainly can, assuming you are an OWASP member.&amp;lt;br&amp;gt;&lt;br /&gt;
If you feel your project is ready or has potential you can apply for the reboot programme.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How does funding work?'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Type 1''': Funding can be applied for as required if travel/mini summit etc is to be expensed as part of the reboot. Development activities; payment to contributors shall be at 50% and 100% milestones.&amp;lt;br&amp;gt;&lt;br /&gt;
Milestones are agreed prior to project reboot initiation.&amp;lt;br&amp;gt;&lt;br /&gt;
Once the 50% milestone is reached the work done to date shall be reviewed by a member of the [https://www.owasp.org/index.php/Category:Global_Projects_Committee - GPC] and also another nominated OWASP reviewer (generally an OWASP leader).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Type 2''': Funding is supplied as required. Items to be funded are agreed prior to reboot initiation.&amp;lt;br&amp;gt;&lt;br /&gt;
Invoices for the required services are sent directly to the foundation for payment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How do I apply?'''&lt;br /&gt;
Send in a proposal with the following information:&lt;br /&gt;
&lt;br /&gt;
# Project name and description. Including reboot project lead and any team members.&lt;br /&gt;
# Re boot type (Type 1 or Type 2)&lt;br /&gt;
# Goals of the reboot&lt;br /&gt;
# Timeline for the 50% milestone and the 100% milestone. Suggested milestone reviewers (Generally OWASP Leaders or other industry experts)&lt;br /&gt;
# Budget required and how you shall spend it.&lt;br /&gt;
&lt;br /&gt;
Want to support this initiative or learn more? Contact [mailto:eoin.keary@owasp.org Eoin Keary]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133490</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133490"/>
				<updated>2012-07-25T18:24:11Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* ESAPI:Redesign (October 2012 - Columbus, Oh) -- $3-5K&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
** Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
** Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
** Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
** Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
** Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
*** Attendees&lt;br /&gt;
**** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
**** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
**** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
**** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
** Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Rebooted Hackathon (December 2012 - Denver, Co) -- $5-8k&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
** Best Mobile Component&lt;br /&gt;
** Best Cloud Component&lt;br /&gt;
** Best Application Component&lt;br /&gt;
** Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
** Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
*** Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
*** Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
*** Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
** Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
** Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
** Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Tutorials Video Series -- ~$2k &lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Documentation Sprint -- ~$2k&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133489</id>
		<title>Projects Reboot 2012 - OWASP ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects_Reboot_2012_-_OWASP_ESAPI&amp;diff=133489"/>
				<updated>2012-07-25T18:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Created page with &amp;quot;* ESAPI:Redesign (October 2012 - Columbus, Oh)  The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to crea...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* ESAPI:Redesign (October 2012 - Columbus, Oh)&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Redesign initiative will focus on gathering key players in the Application Security / Development communities to create a new ESAPI vision. The current API is outdated and ineffective in several key areas and the project has suffered extreme bloat resulting in a large footprint and a lot of functionality that simply isn't ever used being required in an application's codebase. The key objectives for this meeting will be:&lt;br /&gt;
&lt;br /&gt;
** Evaluate the current threat landscape and propose alteration, removal, or addition of controls to the ESAPI core.&lt;br /&gt;
** Evaluate the contracts of the API and establish a new API Specification&lt;br /&gt;
** Create a threat model for each control including the threats the control mitigates, the assumptions made by the contract, and the desired output of the control&lt;br /&gt;
** Establish a testing infrastructure for implementations of controls to ensure compatibility and conformance with the specification&lt;br /&gt;
&lt;br /&gt;
The budget for this effort is as follows:&lt;br /&gt;
&lt;br /&gt;
** Travel/Lodging for key stakeholders -- $2.5k&lt;br /&gt;
*** Attendees&lt;br /&gt;
**** Chris Schmidt (Denver, Co) -- Unconfirmed&lt;br /&gt;
**** Kevin Wall (Columbus, Oh) -- Unconfirmed&lt;br /&gt;
**** John Steven (Washington, DC) -- Uncomfirmed&lt;br /&gt;
**** Jeff Williams (Columbia, MD) -- Uncomfirmed&lt;br /&gt;
** Catering (Breakfast/Lunch) -- $500&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Rebooted Hackathon (December 2012 - Denver, Co)&lt;br /&gt;
&lt;br /&gt;
The ESAPI:Rebooted Hackathon will be a 2-day event held in the Denver area during early December. The primary goals of the hackathon are to foster new development and contributions from the development community and extend the reach of ESAPI into additional platforms. Developers attending the hackathon will compete to create ESAPI-Enabled components (leveraging the new API). The core team will be responsible for ensuring the API is ready before the hackathon and providing end users with the API. Judging for the hackathon will be done by industry specialists and the core ESAPI team. Categories for awards will be:&lt;br /&gt;
** Best Mobile Component&lt;br /&gt;
** Best Cloud Component&lt;br /&gt;
** Best Application Component&lt;br /&gt;
** Best Overall Component Package&lt;br /&gt;
&lt;br /&gt;
** Desired Outcomes of ESAPI:Rebooted&lt;br /&gt;
*** Ready-to-use control components for various platforms using the new ESAPI architecture&lt;br /&gt;
*** Recruitment for additional contributors to the ESAPI repository&lt;br /&gt;
*** Developer Community and Awareness around the Project&lt;br /&gt;
&lt;br /&gt;
** Travel and Lodging for core ESAPI Team (currently Kevin Wall, Jeff Williams, and Chris Schmidt) -- $2k&lt;br /&gt;
** Marketing Material / Online Advertising Budget -- $2k&lt;br /&gt;
** Catering -- $1k&lt;br /&gt;
&lt;br /&gt;
It is anticipated that a portion of the budget will be covered by sponsors for the event. Additionally, prizes for the attendees of the Hackathon will be provided by event sponsors.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Tutorials Video Series &lt;br /&gt;
&lt;br /&gt;
The ESAPI Team identified a need for a set of easy to follow tutorials on implementing and using ESAPI controls in applications as a key item at the ESAPI Summit in MN last year. These tutorials should be created in the same format as the OWASP Tutorials video library.&lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will include (1) Voice Actor, (1) Video Producer, (1) Audio Producer, (1) Graphic Designer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* ESAPI:Documentation Sprint&lt;br /&gt;
&lt;br /&gt;
A need has been identified to produce a reference manual for ESAPI. This manual will cover everything from installation to writing custom controls and components for ESAPI. &lt;br /&gt;
&lt;br /&gt;
The anticipated budget for this at this point is unknown. The required staff will be (1-3) Authors, (1) Graphic Designer, (1) Editor.&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GSoC2012_Ideas&amp;diff=125596</id>
		<title>GSoC2012 Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GSoC2012_Ideas&amp;diff=125596"/>
				<updated>2012-03-05T22:07:17Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Guidelines==&lt;br /&gt;
===Information for Students===&lt;br /&gt;
The ideas below were contributed by OWASP project leaders and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the corresponding project leaders and find out more about the particular suggestion you're looking at.&lt;br /&gt;
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.&lt;br /&gt;
&lt;br /&gt;
===Adding a Proposal===&lt;br /&gt;
&lt;br /&gt;
'''Project:'''&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
'''Ideas'''&lt;br /&gt;
How to find ideas? Obvious sources of projects are the OWASP project wiki, bugs database, and project mailing lists.&lt;br /&gt;
&lt;br /&gt;
=== Generic Sample Proposal===&lt;br /&gt;
&lt;br /&gt;
'''Accepted for GSoC 2011'''&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
KDE has developed a number of very interesting and powerful technologies, libraries and components but there is no easy way to show them to other people.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Something like Qt Demo but with KDE technologies.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C++ is the main language of KDE, therefore the demo should be in C++. The more you know about C++, Qt, KDE and scripting (for Kross and KDE bindings demos), the better.&lt;br /&gt;
This idea encompasses so much different stuff the student is not expected to know everything before he starts coding (but will certainly know a lot when he's done!).&lt;br /&gt;
&lt;br /&gt;
'''Skill level:''' medium&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Pau Garcia i Quiles as general mentor and someone to ask for directions. Specific help for each technology will probably require help from its developers.&lt;br /&gt;
&lt;br /&gt;
==OWASP Project Requests==&lt;br /&gt;
&lt;br /&gt;
=== ZAP Proxy ===&lt;br /&gt;
&lt;br /&gt;
The Zed Attack Proxy (ZAP) is an easy to use integrated penetration testing tool for finding vulnerabilities in web applications.&lt;br /&gt;
&lt;br /&gt;
It is designed to be used by people with a wide range of security experience and as such is ideal for developers and functional testers who are new to penetration testing.&lt;br /&gt;
&lt;br /&gt;
ZAP provides automated scanners as well as a set of tools that allow you to find security vulnerabilities manually.&lt;br /&gt;
&lt;br /&gt;
'''Website:''' https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project&lt;br /&gt;
&lt;br /&gt;
'''Mailing List:''' http://groups.google.com/group/zaproxy-develop&lt;br /&gt;
&lt;br /&gt;
====Project 001 - Compare crawling sessions for authentication issues ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Develop a ZAP session crawler to be able to compare two crawling sessions of two logged in users and see what URLs or Actions could be performed from the other session.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
ZAP will be able to recognise when requests are associated with different sessions.&lt;br /&gt;
&lt;br /&gt;
ZAP should allow the user to view the crawled URLs for each session independantly, and show which URLs are unique to each session.&lt;br /&gt;
&lt;br /&gt;
It should also be able to check if any of the 'unique' pages can in fact be accessed by the other session.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' &lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of crawlers and/or aplication security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Simon Bennetts - OWASP ZAP Project Leader | Skyler Onken - OWASP ZAP Developer&lt;br /&gt;
&lt;br /&gt;
====Project 002 - Dynamically Configurable actions ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
ZAP provides various mechanisms which allow HTTP requests and responses to be changed dynamically. So (for example) a string in an HTTP request can automatically be changed to another string.&lt;br /&gt;
&lt;br /&gt;
It also supports a scripting interface, which is very powerful but at the moment difficult to use.&lt;br /&gt;
&lt;br /&gt;
This project would introduce something inbetween thess 2 options - a powerful way of defining (potentially) complex rules using a wizard based interface.&lt;br /&gt;
&lt;br /&gt;
The challenge will be to make it as usable as possible while still providing a wide range of functionality.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This component would provide a set of highly configurable 'actions' which the user would see up via a wizard.&lt;br /&gt;
&lt;br /&gt;
So they would initially define when the action applies, based on things like regex matching on request elements. And they should be able to define multiple criteria with ANDs and ORs.&lt;br /&gt;
&lt;br /&gt;
Then they would define the actions, which could include:&lt;br /&gt;
* Changing the request (adding, removing or replacing strings)&lt;br /&gt;
* Raising alerts&lt;br /&gt;
* Breaking (to replace existing break points)&lt;br /&gt;
* Running custom scripts (which could do pretty much anything)&lt;br /&gt;
They would then be able to switch the actions on and off from the full list of defined actions using checkboxes&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Simon Bennetts - OWASP ZAP Project Leader | Skyler Onken - OWASP ZAP Developer&lt;br /&gt;
&lt;br /&gt;
====Project 003 - Extend Web API to cover all of the ZAP functionality ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
ZAP provides a REST based API which can be used to control core aspects of the functionality provided by ZAP.&lt;br /&gt;
&lt;br /&gt;
This project would extend that API to cover all/most of the ZAP functionality.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Comprehensive Web API that will cover all of the ZAP Proxy functionality.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Simon Bennetts - OWASP ZAP Project Leader | Skyler Onken - OWASP ZAP Developer&lt;br /&gt;
&lt;br /&gt;
====Project 004 - Closer integration with OWASP AJAX ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
ZAP provides a basic spider that can be used to explore an application, however it is very limited, especially when used with AJAX based applications.&lt;br /&gt;
&lt;br /&gt;
The OWASP AJAX crawling tool (https://www.owasp.org/index.php/OWASP_AJAX_Crawling_Tool) is specifically designed to crawl AJAX applications and can already use ZAP as a proxy.&lt;br /&gt;
&lt;br /&gt;
This project would develop a ZAP plugin which integrates ZAP with the OWASP AJAX crawling Tool.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new ZAP plugin would be produced which allows ZAP to crawl AJAX applications using the OWASP AJAX crawling tool.&lt;br /&gt;
&lt;br /&gt;
The plugin would allow the 2 tools to be tightly integrated, while still allowing them to work completely independently.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Both ZAP and the AJAX tool are written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of crawlers and/or aplication security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Simon Bennetts - OWASP ZAP Project Leader | Skyler Onken - OWASP AJAX Tool Project Leader&lt;br /&gt;
&lt;br /&gt;
=== ESAPI Swingset Interactive ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Swingset Interactive is a web application which demonstrates common security vulnerabilities and asks users to secure the application against these vulnerabilities using the ESAPI library. The application is intended for Java Developers. The goal of the application is to teach developers about the functionality of the ESAPI library and give users a practical understanding of how it can be used to protect web applications against common security vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
'''Website:''' https://www.owasp.org/index.php/Projects/OWASP_ESAPI_Swingset_Interactive_Project&lt;br /&gt;
&lt;br /&gt;
'''Mailing List:''' http://lists.owasp.org/pipermail/owasp-esapi-swingset/&lt;br /&gt;
&lt;br /&gt;
====Project 001 - Implement a solid Authenticator class ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Provide Swingset Interactive with a simple but fully functional implementation of the ESAPI Authenticator Interface.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Swingset Interactive comes with a rudimentary implementation of the ESAPI Authenticator Interface, a FileBasedAuthenticator. This implementation needs to be fixed or replaced in order to allow users of the Swingset Interactive application all of the ESAPI Authenticator methods, including registration, login, a &amp;quot;remember me&amp;quot; feature and a persistence beyond server restart.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
A basic knowledge of Java, Java Servlets is necessary, as is knowledge of HTML.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
====Project 002 - Upgrade to ESAPI 2.0.x ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Adapt Swingset Interactive to work with ESAPI 2.0.x. libraries.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Make the current Swingset Interactive application compatible with ESAPI 2.0.x. Swingset Interactive currently comes with ESAPI 1.4.Various changes and improvements were made with ESAPI 2.0.x and it is generally recommended not to use 1.4 any more for Java EE Projects.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
A basic knowledge of Java, Java Servlets is necessary, as is knowledge of HTML.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
====Project 003 - Improve the Swingset look and feel ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Various minor bug fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Fix and solve a number of documented bug fixes and improvement suggestions for the Swingset Interactive and bring in your own improvement suggestions.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
A basic knowledge of Java, Java Servlets is necessary, as is knowledge of HTML.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
====Project 004 - Platform-independent Swingset Interactive ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Adapt Swingset Interactive to work with any OS.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Swingset Interactive currently runs only under Windows. Modify the Eclipse project and installation scripts to be easily installed on any OS that runs Eclipse. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Good knowledge of Java, Apache Tomcat and a broad knowledge of various Operating Systems are required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
====Project 005 - Mavenize the Swingset ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Create a new Swingset Interactive Maven Archetype.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Offer the Swingset Interactive as a Maven Archetype.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Good knowledge of Java, and Maven are required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
====Project 006 - New Lessons ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Develop new coding lessons to learn the ESAPI Libraries.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new set of interactive coding lessons for students to use.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Good knowledge of Java, ESAPI, HTML and the Eclipse framework are required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Fabio Cerullo - OWASP ESAPI Swingset Interactive Project Leader&lt;br /&gt;
&lt;br /&gt;
=== AntiSamy ===&lt;br /&gt;
&lt;br /&gt;
The AntiSamy project provides a Java library for developers to accept innocent HTML markup without exposing themselves to possible cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
'''Website:''' https://www.owasp.org/index.php/AntiSamy&lt;br /&gt;
&lt;br /&gt;
'''Mailing List:''' https://lists.owasp.org/mailman/listinfo/owasp-antisamy&lt;br /&gt;
&lt;br /&gt;
====Project 001 - Add a Functional Testing Suite ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Create a set of positive test cases designed to generate assurance that AntiSamy correctly processes inert HTML.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
As of today, AntiSamy has a large set of test cases that prove that AntiSamy is resistant to a number of known attacks. There are also test cases that make sure it doesn't crash when given bad data. There are very few test cases that ensure that it properly handles good HTML. A set of test cases that confirm how expected good data is processed by AntiSamy generates a lot of assurance that it is functional as well as secure.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Comfort with Java, Maven, SVN and JUnit are required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Arshan Dabirsiaghi - OWASP AntiSamy Project Leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project 002 - Various Bug Fixes ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
There are around 30 open defects from the issue tracker.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A set of patches that address defects or implement features from the accepted issues in the issue tracker.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Comfort with Java, Maven, SVN and JUnit are required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Arshan Dabirsiaghi - OWASP AntiSamy Project Leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AppSensor ===&lt;br /&gt;
The AppSensor project defines a conceptual framework and methodology that offers prescriptive guidance to implement intrusion detection and automated response into an existing application. Current efforts are underway to create the AppSensor tool which can be utilized by any existing application interested in adding detection and response capabilities. &lt;br /&gt;
&lt;br /&gt;
'''Website:''' https://www.owasp.org/index.php/OWASP_AppSensor_Project&lt;br /&gt;
&lt;br /&gt;
'''Mailing List:''' https://lists.owasp.org/mailman/listinfo/owasp-appsensor-project&lt;br /&gt;
&lt;br /&gt;
==== Project 001 - SOAP web service server implementation ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is implementing a new service based architecture for the next version. This project would involve implementing a SOAP based web service (based on the WS-I Basic Profile standard) as a front-end to the AppSensor processing engine. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new SOAP based web service would be produced which provides a front-end to the existing processing core built into AppSensor.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, so a good knowledge of this language is recommended. Additionally, some knowledge of SOAP-based web services (particularly the WS-I Basic Profile standard) would be useful, but not essential. Finally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 002 - REST web service server implementation ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is implementing a new service based architecture for the next version. This project would involve implementing a REST based web service as a front-end to the AppSensor processing engine. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new REST based web service would be produced which provides a front-end to the existing processing core built into AppSensor.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, so a good knowledge of this language is recommended. Additionally, some knowledge of REST-based web services would be useful, but not essential. Finally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 003 - SOAP/REST web service client implementation ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is implementing a new service based architecture for the next version. This project would involve implementing SOAP and REST based web service clients in various languages to communicate to a back-end server that represents the AppSensor core engine. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
New SOAP and REST based web service clients would be produced which communicate to a back-end server that represents the AppSensor core engine.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, and the initial client will be for Java, so a good knowledge of this language is recommended. Proficiency in one or more of the following languages would also be beneficial: C#, PHP, Python, Ruby. Additionally, some knowledge of REST and SOAP based web services would be useful, but not essential. Finally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 004 - Detection Point Implementation Expansion ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor has documentation outlining around 50 different detection points. We currently have an existing implementation that supports a small handful (5-7) of those. Implementing additional detection points would increase the value of the project. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Implementations of existing detection points would be produced. This could be done in any number of languages.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, and the initial client will be for Java, so a good knowledge of this language is recommended. Proficiency in one or more of the following languages would also be beneficial: C#, PHP, Python, Ruby. Finally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 005 - Implement new configuration file format ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor currently uses a properties file format for configuration. A new XML file format is planned. Moving to an XML format would simplify the configuration and make it easier to extend.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new implementation of the configuration file would be created. An XML file format would be created, along with the code to process that file format, as well as an XSD to validate the file.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, so a good knowledge of this language is recommended. Additionally, a basic understanding of XML and XSD would be useful, though not required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 006 - Trend Monitoring ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Several of the detection point concepts for AppSensor revolve around the idea of trend monitoring within an application. There is a trivial implementation currently that provides very little utility. An enhanced trend monitoring capability would allow for the implementation of more detection points and expand the capabilities of AppSensor.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A new implementation of the trend monitoring module would be implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, so a good knowledge of this language is recommended. Additionally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader &lt;br /&gt;
&lt;br /&gt;
==== Project 007 - Reporting ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor currently has very weak reporting capabilities. Enhanced reporting would provide users with better insight into the health of the applications being protected by AppSensor&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
New APIs for reporting would be implemented as SOAP and/or REST based web services. Additionally, a reference implementation of a reporting client UI would be developed.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
AppSensor is written in Java, and the initial client will be for Java, so a good knowledge of this language is recommended. Some knowledge of REST and SOAP based web services would also be useful, but not essential. Additionally, some experience in a modern UI development framework would be beneficial, presumably an RIA style framework. Finally, basic knowledge of application security would be very helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' John Melton - OWASP AppSensor Development Leader&lt;br /&gt;
&lt;br /&gt;
=== ESAPI ===&lt;br /&gt;
ESAPI (The OWASP Enterprise Security API) is a free, open source, web application security control library that makes it easier for programmers to write lower-risk applications. The ESAPI libraries are designed to make it easier for programmers to retrofit security into existing applications. The ESAPI libraries also serve as a solid foundation for new development.&lt;br /&gt;
&lt;br /&gt;
'''Website''' http://www.esapi.org&lt;br /&gt;
&lt;br /&gt;
'''Mailing List:''' https://lists.owasp.org/mailman/listinfo/esapi-dev&lt;br /&gt;
&lt;br /&gt;
==== Project 001 - Port ESAPI 2.0.x to ESAPI-PHP ====&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The ESAPI-PHP Project has become outdated and needs to be brought up-to-date with the latest ESAPI 2.0 specification. &lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
PHP-Library with ESAPI 2.x functionality.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
ESAPI 2.0.x is written in Java, so an understanding of the Java programming language is required as well as proficiency in PHP. Additionally, a basic understanding of application security would be desireable.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Chris Schmidt - ESAPI Project Leader&lt;br /&gt;
&lt;br /&gt;
==== Project 002 - Resolve Bugs for ESAPI 2.1.0 Roadmap ====&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
There are several outstanding issues in the ESAPI Bugtracker (http://code.google.com/p/owasp-esapi-java/issues/list) that need to be addressed for the 2.1.0 release.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
Patches and unit tests to resolve the outstanding ESAPI issues.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisistes:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable working in Java, writing unit tests using JUnit and creating patch files using svn.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Chris Schmidt - ESAPI Project Leader / Kevin Wall - ESAPI Java Development Leader&lt;br /&gt;
&lt;br /&gt;
==== Project 003 - Develop Struts2 Components ====&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
Struts2 is one of the most widely used Java MVC frameworks, users of ESAPI are regularly looking for pluggable components that they can drop into their application to utilize ESAPI within the context of their application framework. The goal of this task is to create a set of pluggable components that integrate ESAPI into Struts2 to utilize ESAPI Encoders, Validation, and Intrusion Detection with the least amount of manual work and configuration.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
A standalone project that uses ESAPI Components in a Struts2 add-on.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
A solid understanding of Java and Apache Struts, comfort developing unit tests in JUnit and functional tests using Selenium as well as maintaining a Maven build.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Chris Schmidt - ESAPI Project Leader&lt;br /&gt;
&lt;br /&gt;
==== Project 004 - JSR-303 Bean Validation Provider ====&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation'''&lt;br /&gt;
&lt;br /&gt;
JSR-303 is a huge step forward in the way that validation is performed. There are currently 2 implementations of the JSR-303 specification - Hibernate-Validator and Apache BVal. Both of these libraries have demonstrated a lack of security driven validation and focused on using Constraints for business validation purposes. There are also key steps missing in the implementations, most notably - canonicalization of data prior to validation. The goal of this task will be to create a proof of concept implementation of the JSR-303 specification that passes all tests in the Java Compatibility Kit and utilizes the ESAPI Validators to implement constraints.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
A proof of concept implementation of the JSR-303 specification as a standalone JAR&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in Java, especially utilizing advanced JDK5+ features such as Annotations and writing custom annotation processors.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Chris Schmidt - ESAPI Project Leader&lt;br /&gt;
&lt;br /&gt;
==== Project 005 - Mobile Service Provider ====&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The mobile platform continues to grow exponentially and there has been very little movement of exposing security functionality to mobile applications. Creation of a mobile service platform that exposes security controls to mobile applications would make great strides towards providing mobile application developers with the means to write more secure code on mobile clients.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
A WebService container (Jersey or SOAP) that exposes key controls (output encoding, input validation, secure logging, security policy, access control, authentication) to clients using a simple interface.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Familiarity with Java and Apache-WS or Jersey. An understanding of the mobile platform would also be extremely useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Chris Schmidt - ESAPI Project Leader&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Chris_Schmidt&amp;diff=123264</id>
		<title>User:Chris Schmidt</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Chris_Schmidt&amp;diff=123264"/>
				<updated>2012-01-26T03:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Chris is currently the Project Leader for the OWASP ESAPI Projects and also serves on the OWASP Global Projects Committee. He has been involved with OWASP for 4 years and has spoken at many OWASP events about the benefits of the Enterprise Security API as well as participated in Leadership discussions amongst the organization.&lt;br /&gt;
&lt;br /&gt;
During the day, Chris is an Application Security Engineer and Senior Software Engineer for Aspect Security where he has been since fall 2010. Prior to joining the team at Aspect Security he spent 5 years as 'Black Ops Beef' for ServiceMagic Inc with the official title of Software Engineer. Before getting involved in software professionally, Chris worked in hardware as a Senior Field Service Engineer providing hardware and software support for PC’s, Servers, Midrange Systems and Peripherals for 9 years.&lt;br /&gt;
&lt;br /&gt;
In addition to his professional career he is also a musician with several ongoing projects and enjoys cold beer and long walks in the park.&lt;br /&gt;
&lt;br /&gt;
Links:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Blog: [http://yet-another-dev.blogspot.com Yet Another Developer's Blog]&lt;br /&gt;
* Twitter: [https://twitter.com/carne Carne]&lt;br /&gt;
* LinkedIn: [http://www.linkedin.com/in/chrisschmidt Chris Schmidt]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2012/Training/Defense_Against_The_Dark_Arts_-_ESAPI&amp;diff=123263</id>
		<title>OWASP AppSec DC 2012/Training/Defense Against The Dark Arts - ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2012/Training/Defense_Against_The_Dark_Arts_-_ESAPI&amp;diff=123263"/>
				<updated>2012-01-26T03:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{:OWASP AppSec DC 2012 Header}}&lt;br /&gt;
==Description==&lt;br /&gt;
'''Course Length: 2 Day'''&lt;br /&gt;
&lt;br /&gt;
It has been said that software engineering is 10% engineering and 90% art. Given the same set of technical specifications, two engineers will have drastically different methods of addressing those specifications. This is the beauty of innovation and forward thinking, and while it is this type of creative problem solving that has kept the technical industry lurching forward in large strides – it is also the boon of application security. Enter the Enterprise Security API – a central repository for engineers to solve security concerns in application code. I have said many times that it should not be the responsibility of the engineers cranking out code every day to design security controls. It is difficult to remain on the bleeding edge of Application Security and Software Engineering at the same time and even more difficult to bring these two disciplines together into a cohesive, reusable component that addresses the threats specific to an organization.&lt;br /&gt;
&lt;br /&gt;
This course will illustrate the importance of having an Enterprise Security API and how to effectively design, build and deploy a solution that addresses the Threat Model of the single application or enterprise application portfolio.&lt;br /&gt;
&lt;br /&gt;
Topics Include (but are not necessarily limited to)&lt;br /&gt;
* ESAPI Architecture&lt;br /&gt;
* Security Controls Overview&lt;br /&gt;
* OWASP Reference Implementations&lt;br /&gt;
* Designing Custom Controls&lt;br /&gt;
* Integrating with existing Applications&lt;br /&gt;
* Starting Fresh&lt;br /&gt;
* Enterprise Security Configuration&lt;br /&gt;
* Error Handling, Logging and Intrusion Detection/Prevention&lt;br /&gt;
* Authentication and Authorization&lt;br /&gt;
* Validation and Encoding&lt;br /&gt;
&lt;br /&gt;
==Student Requirements==&lt;br /&gt;
Laptop Required: &amp;lt;br/&amp;gt;&lt;br /&gt;
Students Need to Bring:&amp;lt;br/&amp;gt;&lt;br /&gt;
1) Laptop with wireless network adapter&amp;lt;br/&amp;gt;&lt;br /&gt;
2) VMWare Player&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Objectives==&lt;br /&gt;
Audience: Technical&lt;br /&gt;
Skill Level: Intermediate&lt;br /&gt;
&lt;br /&gt;
1) What ESAPI is and what it isn't&amp;lt;br&amp;gt;2) How do I integrate ESAPI into an existing application?&amp;lt;br&amp;gt;3) How do I solve &amp;lt;problem&amp;gt; using ESAPI?&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Additionally, each student will walk away with a set of fully reusable ESAPI components that they will be able to use in real world applications and a certificate of completion.&lt;br /&gt;
==Instructor==&lt;br /&gt;
[https://www.owasp.org/index.php/User:Chris_Schmidt Chris Schmidt]&lt;br /&gt;
[[Category:AppSec_DC_2012_Training]]&lt;br /&gt;
{{:OWASP AppSec DC 2012 Footer}}&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2012/Training/Defense_Against_The_Dark_Arts_-_ESAPI&amp;diff=123256</id>
		<title>OWASP AppSec DC 2012/Training/Defense Against The Dark Arts - ESAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_AppSec_DC_2012/Training/Defense_Against_The_Dark_Arts_-_ESAPI&amp;diff=123256"/>
				<updated>2012-01-26T03:04:09Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{:OWASP AppSec DC 2012 Header}}&lt;br /&gt;
==Description==&lt;br /&gt;
'''Course Length: 2 Day'''&lt;br /&gt;
&lt;br /&gt;
This course will focus on using the OWASP ESAPI for Java to solve real-world security issues. In the course students will learn how to leverage the ESAPI library to design and implement reusable security controls in an enterprise environment. This is a laptops out event and students will walk away with a toolkit of reusable components that they can use in real situation to solve security issues in Java applications.&lt;br /&gt;
==Student Requirements==&lt;br /&gt;
Laptop Required: &lt;br /&gt;
Students Need to Bring:&lt;br /&gt;
1) Laptop with wireless network adapter&lt;br /&gt;
2) VMWare Player&lt;br /&gt;
&lt;br /&gt;
==Objectives==&lt;br /&gt;
Audience: Technical&lt;br /&gt;
Skill Level: Intermediate&lt;br /&gt;
&lt;br /&gt;
1) What ESAPI is and what it isn't&amp;lt;br&amp;gt;2) How do I integrate ESAPI into an existing application?&amp;lt;br&amp;gt;3) How do I solve &amp;lt;problem&amp;gt; using ESAPI?&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Additionally, each student will walk away with a set of fully reusable ESAPI components that they will be able to use in real world applications and a certificate of completion.&lt;br /&gt;
==Instructor==&lt;br /&gt;
Chris Schmidt&lt;br /&gt;
[[Category:AppSec_DC_2012_Training]]&lt;br /&gt;
{{:OWASP AppSec DC 2012 Footer}}&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API&amp;diff=118907</id>
		<title>GPC Project Details/OWASP Enterprise Security API</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_Enterprise_Security_API&amp;diff=118907"/>
				<updated>2011-10-12T04:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &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 Enterprise Security API&lt;br /&gt;
| project_description = ESAPI (The OWASP Enterprise Security API) is a free, open source, web application security control library that makes it easier for programmers to write lower-risk applications. The ESAPI libraries are designed to make it easier for programmers to retrofit security into existing applications. The ESAPI libraries also serve as a solid foundation for new development. Allowing for language-specific differences, all OWASP ESAPI versions have the same basic design:&lt;br /&gt;
&lt;br /&gt;
* '''There is a set of security control interfaces.''' They define for example types of parameters that are passed to types of security controls. &lt;br /&gt;
&lt;br /&gt;
* '''There is a reference implementation for each security control.''' The logic is not organization‐specific and the logic is not application‐specific. An example: string‐based input validation.&lt;br /&gt;
&lt;br /&gt;
* '''There are optionally your own implementations for each security control.''' There may be application logic contained in these classes which may be developed by or for your organization. An example: enterprise authentication.&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 = chris.schmidt@owasp.org&lt;br /&gt;
| leader_username = Chris_Schmidt&lt;br /&gt;
| past_leaders_special_contributions = Jeff Williams, Dave Wichers&lt;br /&gt;
| maintainer_name = &lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username =&lt;br /&gt;
| contributor_name1 = Kevin Wall&lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
| contributor_name2 = Jim Manico&lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = Jeff Williams&lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = Dave Wichers&lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = John Steven&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 = http://www.owasp.org/images/8/81/Esapi-datasheet.pdf&lt;br /&gt;
| presentation_link = http://owasp-esapi-java.googlecode.com/files/OWASP%20ESAPI.ppt&lt;br /&gt;
| mailing_list_name = esapi-user&lt;br /&gt;
| links_url1 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API#tab=Downloads&lt;br /&gt;
| links_name1 = General ESAPI information&lt;br /&gt;
| links_url2 = http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API/Sub-Projects&lt;br /&gt;
| links_name2 = ESAPI/Sub-Projects&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 (ESAPI Global)&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&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Connections_Committee_-_Application_7&amp;diff=118022</id>
		<title>OWASP Connections Committee - Application 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Connections_Committee_-_Application_7&amp;diff=118022"/>
				<updated>2011-09-26T16:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[How to Join a Committee|Click here to return to 'How to Join a Committee' page]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''COMMITTEE APPLICATION FORM''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Applicant's Name'''&lt;br /&gt;
 | colspan=&amp;quot;1&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;Jerry Hoff&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Current and past OWASP Roles''' &lt;br /&gt;
 | colspan=&amp;quot;1&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|OWASP Video Series&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Committee Applying for''' &lt;br /&gt;
 | colspan=&amp;quot;1&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|OWASP Connection Committee&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Please be aware that for an application to be considered by the board, '''you MUST have 5 recommendations'''.  &lt;br /&gt;
An incomplete application will not be considered for vote.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''COMMITTEE RECOMMENDATIONS''' &lt;br /&gt;
 |- &lt;br /&gt;
 ! align=&amp;quot;center&amp;quot; style=&amp;quot;background:white; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;&lt;br /&gt;
 ! align=&amp;quot;center&amp;quot; style=&amp;quot;background:#7B8ABD; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Who Recommends/Name''' &lt;br /&gt;
 ! align=&amp;quot;center&amp;quot; style=&amp;quot;background:#7B8ABD; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Role in OWASP'''&lt;br /&gt;
 ! align=&amp;quot;center&amp;quot; style=&amp;quot;background:#7B8ABD; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Recommendation Content''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:3%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''1'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Jim Manico&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Connection Committee Chair&lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| We need Jerrys help!&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:3%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''2'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Ludovic Petit&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Chapter leader OWASP France, Connections Committee Member &lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| We need guys like Jerry. His work is both a must and serves the Owasp voice, definitely!&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:3%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''3'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Jack Mannino&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Mobile Security Project&lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Jerry has great ideas on how to promote application security, and the drive to get it done.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:3%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''4'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Chris Schmidt&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| GPC / ESAPI &lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Jerry has great vision and ideas on how to make AppSec visible and accessible - he would be a great addition to the GCC&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:3%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''5'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=116202</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=116202"/>
				<updated>2011-08-24T05:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011  ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview  ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on September 21, 2011 at [http://www.appsecusa.org OWASP AppSec USA 2011] in Minneapolis, Minnesota. &lt;br /&gt;
&lt;br /&gt;
=== Agenda  ===&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;border: 2px solid black;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color: navy;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Start &lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | End &lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Topic &lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Description &lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Deliverables&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 0900 &lt;br /&gt;
| 0930 &lt;br /&gt;
| Mission Briefing &lt;br /&gt;
| Brief summary of where we've been, administrative changes, and outlining the goals and purpose of the Summit &lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| 0930 &lt;br /&gt;
| 1030 &lt;br /&gt;
| The ESAPI Specification 1.0 &lt;br /&gt;
| Review the high level API and determine what methods should remain as '''core''' API's and what should be moved upstream to higher level API's (ie ESAPI-Web, ESAPI-Mobile, etc) &lt;br /&gt;
| &lt;br /&gt;
*[[ESAPI Specification Overview]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1030 &lt;br /&gt;
| 1045 &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Coffee Break&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1045 &lt;br /&gt;
| 1200 &lt;br /&gt;
| The ESAPI Roadmap &lt;br /&gt;
| Take a look at the existing Roadmap, create the roadmap for the next several release cycles. &lt;br /&gt;
|&lt;br /&gt;
*[[ESAPI Roadmap]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1200 &lt;br /&gt;
| 1300 &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Lunch Break and Open Conversation (Provided by OWASP/ESAPI)&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1300 &lt;br /&gt;
| 1400 &lt;br /&gt;
| ESAPI Policies &lt;br /&gt;
| Formally define how to processes for contributers, community, sponsors, submitting issues, reporting security vulnerabilities&lt;br /&gt;
| &lt;br /&gt;
*[[ESAPI How To Contribute]] &lt;br /&gt;
*[[ESAPI Community Contributions]] &lt;br /&gt;
*[[ESAPI Sponsoring]] &lt;br /&gt;
*[[ESAPI Submitting Issues]] &lt;br /&gt;
*[[ESAPI Vulnerability Reporting]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1400 &lt;br /&gt;
| 1500 &lt;br /&gt;
| ESTAPI Framework &lt;br /&gt;
| How do we test and ensure that implementations meet the specifications defined in the API in a cross-platform and demonstratible manner? &lt;br /&gt;
| &lt;br /&gt;
*[[ESAPI Testing Framework]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1500&lt;br /&gt;
| 1515 &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Coffee Break&lt;br /&gt;
|-&lt;br /&gt;
| 1515 &lt;br /&gt;
| 1615 &lt;br /&gt;
| Documentation &lt;br /&gt;
| Identify a Roadmap for ESAPI Documentation. Elect someone to champion this cause and find resources to address the documentation needs. Determine funding levels and budget needed for documentation to happen. &lt;br /&gt;
| &lt;br /&gt;
*[[ESAPI Documentation Roadmap]] &lt;br /&gt;
*[[ESAPI Documentation Sub-Project]] &lt;br /&gt;
*[[ESAPI Documentation Sub-Project Budget]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1615&lt;br /&gt;
| 1630 &lt;br /&gt;
| Mission De-Briefing &lt;br /&gt;
| We have accomplished a lot in the last 3 years as a team. This will be a quick wrap-up by Chris on the 2nd ESAPI Summit Day. &lt;br /&gt;
| n/a&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 2100 &lt;br /&gt;
| ???? &lt;br /&gt;
| ESAPI 2.0GA Release Celebration &lt;br /&gt;
| Celebrate the release of ESAPI 2.0GA (and beyond) with beers with the ESAPI Team (Sponsors/Location: TBA) &lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please [https://docs.google.com/a/owasp.org/spreadsheet/viewform?formkey=dHBEQ1YtVlcyWHp1RTZ6cHJHdENDc1E6MQ add your name here] so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
* [[User:jmanico|Jim Manico]] - ESAPI Project Manager&lt;br /&gt;
* [[User:John Steven|jOHN Steven]] - Cigital Principal, ESAPI Malcontent&lt;br /&gt;
* [[User:Kevin W. Wall|Kevin Wall]] - CenturyLink; ESAPI crypto guy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=116034</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=116034"/>
				<updated>2011-08-20T22:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on September 21, 2011 at [http://www.appsecusa.org OWASP AppSec USA 2011] in Minneapolis, Minnesota.&lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
{|  cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;2&amp;quot; style=&amp;quot;border: 2px solid black;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color: navy;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Start&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | End&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Topic&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;color: white;&amp;quot; | Deliverables&lt;br /&gt;
|-style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 0900&lt;br /&gt;
| 0930&lt;br /&gt;
| Mission Briefing&lt;br /&gt;
| Brief summary of where we've been, administrative changes, and outlining the goals and purpose of the Summit&lt;br /&gt;
| n/a&lt;br /&gt;
|- &lt;br /&gt;
| 0930&lt;br /&gt;
| 1030&lt;br /&gt;
| The ESAPI Specification 1.0&lt;br /&gt;
| Review the high level API and determine what methods should remain as '''core''' API's and what should be moved upstream to higher level API's (ie ESAPI-Web, ESAPI-Mobile, etc)&lt;br /&gt;
| &lt;br /&gt;
* [[ESAPI Specification Overview]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1030&lt;br /&gt;
| 1045&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Coffee Break&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1045&lt;br /&gt;
| 1200&lt;br /&gt;
| The ESAPI Specification 1.0&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Continuation of the API Specification &lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1200&lt;br /&gt;
| 1300&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Lunch Break and Open Conversation (Provided by OWASP/ESAPI)&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1300&lt;br /&gt;
| 1400&lt;br /&gt;
| The ESAPI Roadmap&lt;br /&gt;
| Take a look at the existing Roadmap, create the roadmap for the next several release cycles.&lt;br /&gt;
| &lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
|- &lt;br /&gt;
| 1400&lt;br /&gt;
| 1500&lt;br /&gt;
| ESAPI Policies&lt;br /&gt;
| Formally define how to processes for contributers, community, sponsors, submitting issues, reporting security vulnerabilities&lt;br /&gt;
| &lt;br /&gt;
* [[ESAPI How To Contribute]] &lt;br /&gt;
* [[ESAPI Community Contributions]] &lt;br /&gt;
* [[ESAPI Sponsoring]] &lt;br /&gt;
* [[ESAPI Submitting Issues]] &lt;br /&gt;
* [[ESAPI Vulnerability Reporting]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1500&lt;br /&gt;
| 1630&lt;br /&gt;
| ESTAPI Framework&lt;br /&gt;
| How do we test and ensure that implementations meet the specifications defined in the API in a cross-platform and demonstratible manner?&lt;br /&gt;
| &lt;br /&gt;
* [[ESAPI Testing Framework]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1630&lt;br /&gt;
| 1645 &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Coffee Break&lt;br /&gt;
|- &lt;br /&gt;
| 1645&lt;br /&gt;
| 1745&lt;br /&gt;
| Documentation&lt;br /&gt;
| Identify a Roadmap for ESAPI Documentation. Elect someone to champion this cause and find resources to address the documentation needs. Determine funding levels and budget needed for documentation to happen.&lt;br /&gt;
|&lt;br /&gt;
* [[ESAPI Documentation Roadmap]]&lt;br /&gt;
* [[ESAPI Documentation Sub-Project]]&lt;br /&gt;
* [[ESAPI Documentation Sub-Project Budget]]&lt;br /&gt;
|- style=&amp;quot;background-color: lightgray;&amp;quot;&lt;br /&gt;
| 1745&lt;br /&gt;
| 1800&lt;br /&gt;
| Mission De-Briefing&lt;br /&gt;
| We have accomplished a lot in the last 3 years as a team. This will be a quick wrap-up by Chris on the 2nd ESAPI Summit Day.&lt;br /&gt;
| n/a&lt;br /&gt;
|- style=&amp;quot;background-color: lightblue;&amp;quot;&lt;br /&gt;
| 1800&lt;br /&gt;
| ????&lt;br /&gt;
| ESAPI 2.0GA Release Celebration&lt;br /&gt;
| Celebrate the release of ESAPI 2.0GA (and beyond) with beers with the ESAPI Team (Sponsors: TBA)&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
* [[User:jmanico|Jim Manico]] - ESAPI Project Manager&lt;br /&gt;
* [[User:John Steven|jOHN Steven]] - Cigital Principal, ESAPI Malcontent&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112399</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112399"/>
				<updated>2011-06-18T03:52:31Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
The AccessReferenceMap interface is used to map from a set of internal direct object references to a set of indirect references that are safe to disclose publicly. This can be used to help protect database keys, filenames, and other types of direct object references. As a rule, developers should not expose their direct object references as it enables attackers to attempt to manipulate them.&lt;br /&gt;
&lt;br /&gt;
Indirect references are handled as strings, to facilitate their use in HTML. Implementations can generate simple integers or more complicated random character strings as indirect references. Implementations should probably add a constructor that takes a list of direct references.&lt;br /&gt;
&lt;br /&gt;
Note that in addition to defeating all forms of parameter tampering attacks, there is a side benefit of the AccessReferenceMap. Using random strings as indirect object references, as opposed to simple integers makes it impossible for an attacker to guess valid identifiers. So if per-user AccessReferenceMaps are used, then request forgery (CSRF) attacks will also be prevented.&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Key&lt;br /&gt;
| The type of object to use for a key in the AccessReferenceMap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ====&lt;br /&gt;
Adds a direct reference to the AccessReferenceMap, then generates and returns an associated indirect reference.&lt;br /&gt;
&lt;br /&gt;
===== StereoTypes =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| The type for the direct reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| direct&lt;br /&gt;
|&lt;br /&gt;
| The direct reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
The key for the added Direct Reference&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ====&lt;br /&gt;
Get the original direct object reference from an indirect reference. Developers should use this when they get an indirect reference from a request to translate it back into the real direct reference. If an invalid indirect reference is requested, then an AccessControlException is thrown. If a type is implied the requested object will be cast to that type, if the object is not of the requested type, a AccessControlException will be thrown to the caller.&lt;br /&gt;
&lt;br /&gt;
===== StereoTypes =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| The type for the direct reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
| The indirect reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
The direct reference&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the requested reference does not exist or the implied type is incorrect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ====&lt;br /&gt;
Get a safe indirect reference to use in place of a potentially sensitive direct object reference.&lt;br /&gt;
&lt;br /&gt;
===== StereoTypes =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| The type for the direct reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| direct&lt;br /&gt;
|&lt;br /&gt;
| The direct reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
The indirect reference&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ====&lt;br /&gt;
Removes a direct reference and its associated indirect reference from the AccessReferenceMap.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ====&lt;br /&gt;
Updates the access reference map with a new set of direct references, maintaining any existing indirect references associated with items that are in the new list.&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== User login() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
==== void logout() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(char c) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== void addCodec(Codec c) ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;Codec&amp;gt; getCodecs() ====&lt;br /&gt;
&lt;br /&gt;
==== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ====&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String seal(String data, Long timestamp) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String sign(String data) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String unseal(String sealedData) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySeal(String sealedData) throws DataIntegrityException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySignature(String signature, String data) throws InvalidSignatureException ====&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
===Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getErrorOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== String getStandardOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getExitValue() ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ''native'' FileHandle getExecutable() ====&lt;br /&gt;
&lt;br /&gt;
==== ''native'' Handle getWorkingDirectory() ====&lt;br /&gt;
&lt;br /&gt;
==== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ====&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addEvent(String eventName, String message) ====&lt;br /&gt;
&lt;br /&gt;
==== void addException(Throwable exception) ====&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== Boolean getRandomBoolean() ====&lt;br /&gt;
&lt;br /&gt;
==== Byte[] getRandomBytes(Integer len) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomFilename(String extension) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomUUID() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getRandomInteger(Integer min, Integer max) ====&lt;br /&gt;
&lt;br /&gt;
==== Long getRandomLong(Long min, Long max) ====&lt;br /&gt;
&lt;br /&gt;
==== Float getRandomReal(Float min, Float max) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomString(Integer len, char[] charSet=) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getAccountID() ====&lt;br /&gt;
&lt;br /&gt;
==== String getAccountName() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getExpirationTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getFailedLoginCount() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastFailedLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLastHostAddress() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastPasswordChangeTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLocale() ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;String&amp;gt; getRoles() ====&lt;br /&gt;
&lt;br /&gt;
==== String getScreenName() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isAnonymous() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isEnabled() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isExpired() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isInRole(String role) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLocked() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLoggedIn() ====&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void assertValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getName() ====&lt;br /&gt;
&lt;br /&gt;
==== void setName(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getValue() ====&lt;br /&gt;
&lt;br /&gt;
==== void setValue(String value) ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getMaxAge() ====&lt;br /&gt;
&lt;br /&gt;
==== void setMaxAge(Integer maxAge) ====&lt;br /&gt;
&lt;br /&gt;
==== String getDomain() ====&lt;br /&gt;
&lt;br /&gt;
==== void setDomain(String domain) ====&lt;br /&gt;
&lt;br /&gt;
==== String getPath() ====&lt;br /&gt;
&lt;br /&gt;
==== void setPath(String path) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isHttpOnly() ====&lt;br /&gt;
&lt;br /&gt;
==== void setHttpOnly(Boolean httpOnly) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isSecure() ====&lt;br /&gt;
&lt;br /&gt;
==== void setSecure(Boolean secure) ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureChannel() ====&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureRequest() ====&lt;br /&gt;
&lt;br /&gt;
==== ClientCookie getCookie(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== List&amp;lt;FileHandle&amp;gt; getFileUploads() ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getHeader(String header) ====&lt;br /&gt;
&lt;br /&gt;
==== String getParameter(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== void sendForward(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void verifyCsrfToken() throws CsrfException ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addCookie(ClientCookie cookie) ====&lt;br /&gt;
&lt;br /&gt;
==== void addHeader(String key, String value) ====&lt;br /&gt;
&lt;br /&gt;
==== void killCookies() ====&lt;br /&gt;
&lt;br /&gt;
==== void sendRedirect(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void setContentType(String contentType) ====&lt;br /&gt;
&lt;br /&gt;
==== void setNoCacheHeaders() ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String key) ====&lt;br /&gt;
&lt;br /&gt;
== URLResource ==&lt;br /&gt;
&lt;br /&gt;
=== Extends ===&lt;br /&gt;
* [[#Resource|Resource]]&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void resetCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void addSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
==== void removeSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Mapping&amp;diff=112334</id>
		<title>ESAPI Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Mapping&amp;diff=112334"/>
				<updated>2011-06-17T06:48:54Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 75%; align:center; text-align:center; border:2px solid #4F81BD; background-color:#F2F2F2; padding=2;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color: #000; color: #FFF;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: #FFF&amp;quot; | Top 10 2010&lt;br /&gt;
! style=&amp;quot;color: #FFF&amp;quot; colspan=&amp;quot;2&amp;quot; | ESAPI Control / ASVS Requirements&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; width=&amp;quot;34%&amp;quot; style=&amp;quot;background-color: #D9D9D9&amp;quot; | [[Top 10 2010-A1|A1-Injection]] &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Encoder A1|Encoder]] &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Validator A1|Validator]] &lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V6 V6: Output Encoding/Escaping]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V5 V5: Input Validation]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[Top 10 2010-A2|A2-Cross Site Scripting (XSS)]] &lt;br /&gt;
| style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Encoder A2|Encoder]] &lt;br /&gt;
| style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Validator A2|Validator]]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V6 V6: Output Encoding/Escaping]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V5 V5: Input Validation]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #D9D9D9&amp;quot; | [[Top 10 2010-A3|A3-Broken Authentication and Session Management]] &lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | [[ESAPI Mapping Authenticator A3|Autenticator]]&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | [[ESAPI Mapping HttpUtilities A3|HttpUtilities]]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V2 V2: Authentication]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V11 V11: HTTP Security]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Mapping&amp;diff=112333</id>
		<title>ESAPI Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Mapping&amp;diff=112333"/>
				<updated>2011-06-17T06:48:31Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Created page with &amp;quot;&amp;lt;center&amp;gt; {| style=&amp;quot;width: 75%; align:center; text-align:center; border:2px solid #4F81BD; background-color:#F2F2F2; padding=2;&amp;quot; |- style=&amp;quot;background-color: #000; color: #FFF;&amp;quot; ! ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 75%; align:center; text-align:center; border:2px solid #4F81BD; background-color:#F2F2F2; padding=2;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color: #000; color: #FFF;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: #FFF&amp;quot; | Top 10 2010&lt;br /&gt;
! style=&amp;quot;color: #FFF&amp;quot; colspan=&amp;quot;2&amp;quot; | ESAPI Control / ASVS Requirements&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; width=&amp;quot;34%&amp;quot; style=&amp;quot;background-color: #D9D9D9&amp;quot; | [[Top 10 2010-A1|A1-Injection]] &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Encoder A1|Encoder]] &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Validator A1|Validator]] &lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V6 V6: Output Encoding/Escaping]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V5 V5: Input Validation]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[Top 10 2010-A2|A2-Cross Site Scripting (XSS)]] &lt;br /&gt;
| style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Encoder A2|Encoder]] &lt;br /&gt;
| style=&amp;quot;background-color: lightgreen&amp;quot; | [[ESAPI Mapping Validator A2|Validator]]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V6 V6: Output Encoding/Escaping]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V5 V5: Input Validation]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #D9D9D9&amp;quot; | [[Top 10 2010-A3|A3-Broken Authentication and Session Management]] &lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | [[ESAPI Mapping Authenticator A3|Autenticator]]&lt;br /&gt;
| style=&amp;quot;background: lightgreen&amp;quot; | [[ESAPI Mapping HttpUtilities A3|HttpUtilities]]&lt;br /&gt;
|- style=&amp;quot;background-color: #FFF&amp;quot;&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V2 V2: Authentication]&lt;br /&gt;
| style=&amp;quot;background-color: #FFB200&amp;quot; | [http://code.google.com/p/owasp-asvs/wiki/Verification_V11 V11: HTTP Security]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Enterprise_Security_API&amp;diff=112331</id>
		<title>Category:OWASP Enterprise Security API</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Enterprise_Security_API&amp;diff=112331"/>
				<updated>2011-06-17T05:47:54Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Home  ====&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;66%&amp;quot; | &lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
ESAPI (The OWASP Enterprise Security API) is a free, open source, web application security control library that makes it easier for programmers to write lower-risk applications. The ESAPI libraries are designed to make it easier for programmers to retrofit security into existing applications. The ESAPI libraries also serve as a solid foundation for new development. &lt;br /&gt;
&lt;br /&gt;
Allowing for language-specific differences, all OWASP ESAPI versions have the same basic design: &lt;br /&gt;
&lt;br /&gt;
*'''There is a set of security control interfaces.''' They define for example types of parameters that are passed to types of security controls.&lt;br /&gt;
&lt;br /&gt;
*'''There is a reference implementation for each security control.''' The logic is not organization‐specific and the logic is not application‐specific. An example: string‐based input validation.&lt;br /&gt;
&lt;br /&gt;
*'''There are optionally your own implementations for each security control.''' There may be application logic contained in these classes which may be developed by or for your organization. An example: enterprise authentication.&lt;br /&gt;
&lt;br /&gt;
This project source code is licensed under the [http://en.wikipedia.org/wiki/BSD_license BSD license], which is very permissive and about as close to public domain as is possible. The project documentation is licensed under the [http://creativecommons.org/licenses/by-sa/2.0/ Creative Commons] license. You can use or modify ESAPI however you want, even include it in commercial products.&lt;br /&gt;
&lt;br /&gt;
The following organizations are a few of the many organizations that are starting to adopt ESAPI to secure their web applications: [http://www.americanexpress.com/ American Express], [http://www.apache.org/ Apache Foundation], [http://www.boozallen.com Booz Allen Hamilton], [http://www.aspectsecurity.com/ Aspect Security], [http://www.foundstone.com Foundstone(McAfee)], [http://www.thehartford.com/ The Hartford], [http://www.infinitecampus.com Infinite Campus], [http://www.lockheedmartin.com/ Lockheed Martin], [http://cwe.mitre.org/top25/index.html MITRE], [http://enterprise.spawar.navy.mil/ U.S. Navy - SPAWAR], [http://www.worldbank.org/ The World Bank], [http://www.sans.org/top25errors/ SANS Institute]. &lt;br /&gt;
&lt;br /&gt;
Please let us know how your organization is using OWASP ESAPI. Include your name, organization's name, and brief description of how you are using it. The project lead can be reached [mailto:jeff.williams@owasp.org here]. The project maintainer can be reached [mailto:jim.manico@owasp.org here].&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
[[Image:Esapi-sponsors.PNG]] &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
== Let's talk here  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs-bulb.jpg]]'''ESAPI Communities''' &lt;br /&gt;
&lt;br /&gt;
Further development of ESAPI occurs through mailing list discussions and occasional workshops, and suggestions for improvement are welcome. For more information, please subscribe to one of the lists below.&lt;br /&gt;
&lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/esapi-dev esapi-dev mailing list (this is the main list)] &lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/esapi-user esapi-user mailing list] &lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/esapi-php esapi-php mailing list] &lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/esapi-python esapi-python mailing list] &lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/owasp-esapi-ruby esapi-ruby mailing list] &lt;br /&gt;
*[https://lists.owasp.org/mailman/listinfo/owasp-esapi-swingset esapi-swingset mailing list]&lt;br /&gt;
&lt;br /&gt;
IRC Chat&lt;br /&gt;
&lt;br /&gt;
If you would rather chat with us about your problem or thoughts - you can join us in our IRC channel using an [http://www.google.com/search?q=irc+client IRC Client] or using FreeNode's [http://webchat.freenode.net WebChat] client.&lt;br /&gt;
&lt;br /&gt;
*Server: irc.freenode.net&lt;br /&gt;
*Channel: #esapi&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
== Got developer cycles?  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs-waiting.JPG]]'''ESAPI Coding''' &lt;br /&gt;
&lt;br /&gt;
The ESAPI project is always on the lookout for volunteers who are interested in contributing developer cycles. &lt;br /&gt;
&lt;br /&gt;
*[http://owasp-esapi-php.googlecode.com/files/esapi4php-contributing.pdf ESAPI for PHP Developer Onboarding Instructions] &lt;br /&gt;
*ESAPI for other languages developer onboarding instructions -- coming soon!&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
== Related resources  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs-satellite.jpg]]'''OWASP Cheat Sheet Series''' &lt;br /&gt;
&lt;br /&gt;
*[[SQL Injection Prevention Cheat Sheet]] &lt;br /&gt;
*[[XSS (Cross Site Scripting) Prevention Cheat Sheet]] &lt;br /&gt;
*[[Cryptographic Storage Cheat Sheet]]&lt;br /&gt;
*[[Authentication Cheat Sheet]]&lt;br /&gt;
*[[Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet]]&lt;br /&gt;
*[[Transport Layer Protection Cheat Sheet]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Downloads  ====&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
! width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
[[Image:Asvs-step1.jpg]]'''1. About ESAPI''' &lt;br /&gt;
&lt;br /&gt;
*Data sheet([http://www.owasp.org/images/8/81/Esapi-datasheet.pdf PDF],[http://www.owasp.org/images/3/32/Esapi-datasheet.doc Word]) &lt;br /&gt;
*Project presentation ([http://owasp-esapi-java.googlecode.com/files/OWASP%20ESAPI.ppt PowerPoint]) &lt;br /&gt;
*Video presentation ([http://www.youtube.com/watch?v=QAPD1jPn04g YouTube])&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs-step2.jpg]]'''2. Get ESAPI''' &lt;br /&gt;
&lt;br /&gt;
*[http://code.google.com/p/owasp-esapi-java/downloads/list ESAPI for Java Downloads] &lt;br /&gt;
*{{#switchtablink:.NET|ESAPI for .NET}}&amp;lt;br&amp;gt; &lt;br /&gt;
*{{#switchtablink:Classic ASP|ESAPI for Classic ASP}}&amp;lt;br&amp;gt; &lt;br /&gt;
*{{#switchtablink:PHP|ESAPI for PHP}}&amp;lt;br&amp;gt; &lt;br /&gt;
*{{#switchtablink:ColdFusion.2FCFML|ESAPI for ColdFusion &amp;amp; CFML}}&amp;lt;br&amp;gt; &lt;br /&gt;
*{{#switchtablink:Python|ESAPI for Python}}&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://code.google.com/p/owasp-esapi-js/downloads/detail?name=esapi4js-0.1.3.zip ESAPI for Javascript]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
[[Image:Asvs-step3.jpg]]'''3. Learn ESAPI''' &lt;br /&gt;
&lt;br /&gt;
*ESAPI design patterns (not language-specific): [http://www.owasp.org/images/8/82/Esapi-design-patterns.pdf (PDF], [http://www.owasp.org/index.php/File:Esapi-design-patterns.doc Word], [http://www.owasp.org/images/8/87/Esapi-design-patterns.ppt PPT)] &lt;br /&gt;
*The [[ESAPI Swingset|ESAPI Swingset]] sample application demonstrates how to leverage ESAPI to protect a web application. &lt;br /&gt;
*LAMP should be spelled LAMPE ([http://www.owasp.org/images/a/ac/LAMP_Should_be_Spelled_LAMPE.pdf PDF]) &lt;br /&gt;
*ESAPI for Java interface documentation ([http://owasp-esapi-java.googlecode.com/svn/trunk_doc/index.html JavaDocs]) &lt;br /&gt;
*ESAPI for PHP interface documentation ([http://owasp-esapi-php.googlecode.com/svn/trunk_doc/latest/index.html phpdoc])&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Here's what I did with ESAPI  ====&lt;br /&gt;
&lt;br /&gt;
*I used ESAPI for Java with Google AppEngine. I used it for simple validation and encoding. --[mailto:jeff.williams@owasp.org Jeff]&lt;br /&gt;
&lt;br /&gt;
*I used ESAPI for PHP with a custom web 2.0 corporate knowledge management application, made up of many open source and commercial applications integrated to work together. I added an organization- and application-specific &amp;quot;Adapter&amp;quot; control to wrap calls to the other ESAPI controls. --[mailto:mike.boberski@owasp.org Mike]&lt;br /&gt;
&lt;br /&gt;
*I used ESAPI for Java’s &amp;quot;Logger&amp;quot; control to make it easier for a US Government customer to meet C&amp;amp;amp;A requirements. --[mailto:dave.wichers@owasp.org Dave]&lt;br /&gt;
&lt;br /&gt;
*I used ESAPI for Java to build a low risk web application that was over 250,000+ lines of code in size. --[mailto:jim.manico@owasp.org Jim]&lt;br /&gt;
&lt;br /&gt;
*I used ESAPI for Java's &amp;quot;Authenticator&amp;quot; to replace a spaghetti-like mechanism in a legacy financial services web application. In hindsight I should have used the application-specific &amp;quot;Adapter&amp;quot; pattern mentioned by Mike above. The organization also uses the ESAPI Encryptor as an interface to a hardware security module. --[mailto:roman.hustad@yahoo.com Roman]&lt;br /&gt;
&lt;br /&gt;
*I use ESAPI for Java to educate developers about application security principals at several of the world’s largest organizations. --[mailto:jim.manico@owasp.org Jim]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Glossary  ====&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs-letters.jpg]]'''ESAPI Terminology''' &lt;br /&gt;
&lt;br /&gt;
*'''adapter''' - There are optionally your own implementations for each security control. There may be application logic contained in these classes which may be developed by or for your organization. The logic may be organization-specific and/or application-specific. There may be proprietary information or logic contained in these classes which may be developed by or for your organization. &lt;br /&gt;
*'''built-in singleton design pattern''' - The &amp;quot;built-in&amp;quot; singleton design pattern refers to the replacement of security control reference implementations with your own implementations. ESAPI interfaces are otherwise left intact. &lt;br /&gt;
*'''codec''' - ESAPI encoder/decoder reference implementations. &lt;br /&gt;
*'''core''' - The ESAPI interfaces and reference implementations that are not intended to be replaced with enterprise-specific versions are called the ESAPI Core. &lt;br /&gt;
*'''exception''' - ESAPI exception reference implementations. &lt;br /&gt;
*'''extended factory design pattern''' - The &amp;quot;extended&amp;quot; factory design pattern refers to the addition of a new security control interface and corresponding implementation, which in turn calls ESAPI security control reference implementations and/or security control reference implementations that were replaced with your own implementations. The ESAPI locator class would be called in order to retrieve a singleton instance of your new security control, which in turn would call ESAPI security control reference implementations and/or security control reference implementations that were replaced with your own implementations. &lt;br /&gt;
*'''extended singleton design pattern''' - The &amp;quot;extended&amp;quot; singleton pattern refers to the replacement of security control reference implementations with your own implementations and the addition/modification/subtraction of corresponding security control interfaces. &lt;br /&gt;
*'''ES-enable (or ESAPI-enable)''' - Just as web applications and web services can be Public Key Infrastructure (PKI) enabled (PK-enabled) to perform for example certificate-based authentication, applications and services can be OWASP ESAPI-enabled (ES-enabled) to enable applications and services to protect themselves from attackers. &lt;br /&gt;
*'''filter''' - In ESAPI for Java, there is additionally an HTTP filter that can be called separately from the other controls. &lt;br /&gt;
*'''interfaces''' - There is a set of security control interfaces. There is no application logic contained in these interfaces. They define for example types of parameters that are passed to types of security controls. There is no proprietary information or logic contained in these interfaces. &lt;br /&gt;
*'''locator''' - The ESAPI security control interfaces include an &amp;quot;ESAPI&amp;quot; class that is commonly referred to as a &amp;quot;locator&amp;quot; class. The ESAPI locator class is called in order to retrieve singleton instances of individual security controls, which are then called in order to perform security checks (such as performing an access control check) or that result in security effects (such as generating an audit record). &lt;br /&gt;
*'''reference implementation''' - There is a reference implementation for each security control. There is application logic contained in these classes, i.e. contained in these interface implementations. However, the logic is not organization-specific and the logic is not application-specific. There is no proprietary information or logic contained in these reference implementation classes. &lt;br /&gt;
*'''Web Application Firewall (WAF)''' - In ESAPI for Java, there is additionally a Web Application Firewall (WAF) that can be called separately from the other controls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Java EE  ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_Java_EE_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== .NET  ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_.NET_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== Classic ASP  ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_-_Classic_ASP_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== PHP  ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_-_PHP_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== ColdFusion/CFML ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_-_ColdFusion/CFML | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== Python ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_-_Python_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== JavaScript ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_JavaScript_Version  | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== Objective C ====&lt;br /&gt;
&lt;br /&gt;
{{:Projects/OWASP ESAPI Objective - C Project | Project About}}&lt;br /&gt;
&lt;br /&gt;
==== Force.com ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API_-_Force.com_Version | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
&lt;br /&gt;
{{:Projects/Owasp Esapi Ruby | Project About}} &lt;br /&gt;
&lt;br /&gt;
==== Swingset ====&lt;br /&gt;
&lt;br /&gt;
The ESAPI Swingset Project divides itself into sub-projects, i.e., [[Projects/OWASP ESAPI Swingset Interactive Project|Swingset Interactive]] and [[Projects/OWASP ESAPI Swingset Demo Project|Swingset Demo]]. &lt;br /&gt;
&lt;br /&gt;
==== Project Details  ====&lt;br /&gt;
&lt;br /&gt;
{{:GPC_Project_Details/OWASP_Enterprise_Security_API | OWASP Project Identification Tab}} &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{OWASP Builders}}&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112330</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112330"/>
				<updated>2011-06-17T05:41:45Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
The AccessReferenceMap interface is used to map from a set of internal direct object references to a set of indirect references that are safe to disclose publicly. This can be used to help protect database keys, filenames, and other types of direct object references. As a rule, developers should not expose their direct object references as it enables attackers to attempt to manipulate them.&lt;br /&gt;
&lt;br /&gt;
Indirect references are handled as strings, to facilitate their use in HTML. Implementations can generate simple integers or more complicated random character strings as indirect references. Implementations should probably add a constructor that takes a list of direct references.&lt;br /&gt;
&lt;br /&gt;
Note that in addition to defeating all forms of parameter tampering attacks, there is a side benefit of the AccessReferenceMap. Using random strings as indirect object references, as opposed to simple integers makes it impossible for an attacker to guess valid identifiers. So if per-user AccessReferenceMaps are used, then request forgery (CSRF) attacks will also be prevented.&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ====&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== User login() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
==== void logout() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(char c) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== void addCodec(Codec c) ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;Codec&amp;gt; getCodecs() ====&lt;br /&gt;
&lt;br /&gt;
==== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ====&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String seal(String data, Long timestamp) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String sign(String data) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String unseal(String sealedData) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySeal(String sealedData) throws DataIntegrityException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySignature(String signature, String data) throws InvalidSignatureException ====&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
===Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getErrorOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== String getStandardOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getExitValue() ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ''native'' FileHandle getExecutable() ====&lt;br /&gt;
&lt;br /&gt;
==== ''native'' Handle getWorkingDirectory() ====&lt;br /&gt;
&lt;br /&gt;
==== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ====&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addEvent(String eventName, String message) ====&lt;br /&gt;
&lt;br /&gt;
==== void addException(Throwable exception) ====&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== Boolean getRandomBoolean() ====&lt;br /&gt;
&lt;br /&gt;
==== Byte[] getRandomBytes(Integer len) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomFilename(String extension) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomUUID() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getRandomInteger(Integer min, Integer max) ====&lt;br /&gt;
&lt;br /&gt;
==== Long getRandomLong(Long min, Long max) ====&lt;br /&gt;
&lt;br /&gt;
==== Float getRandomReal(Float min, Float max) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomString(Integer len, char[] charSet=) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getAccountID() ====&lt;br /&gt;
&lt;br /&gt;
==== String getAccountName() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getExpirationTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getFailedLoginCount() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastFailedLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLastHostAddress() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastPasswordChangeTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLocale() ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;String&amp;gt; getRoles() ====&lt;br /&gt;
&lt;br /&gt;
==== String getScreenName() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isAnonymous() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isEnabled() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isExpired() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isInRole(String role) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLocked() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLoggedIn() ====&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void assertValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getName() ====&lt;br /&gt;
&lt;br /&gt;
==== void setName(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getValue() ====&lt;br /&gt;
&lt;br /&gt;
==== void setValue(String value) ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getMaxAge() ====&lt;br /&gt;
&lt;br /&gt;
==== void setMaxAge(Integer maxAge) ====&lt;br /&gt;
&lt;br /&gt;
==== String getDomain() ====&lt;br /&gt;
&lt;br /&gt;
==== void setDomain(String domain) ====&lt;br /&gt;
&lt;br /&gt;
==== String getPath() ====&lt;br /&gt;
&lt;br /&gt;
==== void setPath(String path) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isHttpOnly() ====&lt;br /&gt;
&lt;br /&gt;
==== void setHttpOnly(Boolean httpOnly) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isSecure() ====&lt;br /&gt;
&lt;br /&gt;
==== void setSecure(Boolean secure) ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureChannel() ====&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureRequest() ====&lt;br /&gt;
&lt;br /&gt;
==== ClientCookie getCookie(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== List&amp;lt;FileHandle&amp;gt; getFileUploads() ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getHeader(String header) ====&lt;br /&gt;
&lt;br /&gt;
==== String getParameter(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== void sendForward(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void verifyCsrfToken() throws CsrfException ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addCookie(ClientCookie cookie) ====&lt;br /&gt;
&lt;br /&gt;
==== void addHeader(String key, String value) ====&lt;br /&gt;
&lt;br /&gt;
==== void killCookies() ====&lt;br /&gt;
&lt;br /&gt;
==== void sendRedirect(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void setContentType(String contentType) ====&lt;br /&gt;
&lt;br /&gt;
==== void setNoCacheHeaders() ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String key) ====&lt;br /&gt;
&lt;br /&gt;
== URLResource ==&lt;br /&gt;
&lt;br /&gt;
=== Extends ===&lt;br /&gt;
* [[#Resource|Resource]]&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void resetCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void addSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
==== void removeSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112329</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112329"/>
				<updated>2011-06-17T05:41:05Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
The AccessReferenceMap interface is used to map from a set of internal direct object references to a set of indirect references that are safe to disclose publicly. This can be used to help protect database keys, filenames, and other types of direct object references. As a rule, developers should not expose their direct object references as it enables attackers to attempt to manipulate them.&lt;br /&gt;
&lt;br /&gt;
Indirect references are handled as strings, to facilitate their use in HTML. Implementations can generate simple integers or more complicated random character strings as indirect references. Implementations should probably add a constructor that takes a list of direct references.&lt;br /&gt;
&lt;br /&gt;
Note that in addition to defeating all forms of parameter tampering attacks, there is a side benefit of the AccessReferenceMap. Using random strings as indirect object references, as opposed to simple integers makes it impossible for an attacker to guess valid identifiers. So if per-user AccessReferenceMaps are used, then request forgery (CSRF) attacks will also be prevented.&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ====&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== User login() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
==== void logout() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(char c) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== void addCodec(Codec c) ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;Codec&amp;gt; getCodecs() ====&lt;br /&gt;
&lt;br /&gt;
==== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ====&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String seal(String data, Long timestamp) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String sign(String data) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String unseal(String sealedData) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySeal(String sealedData) throws DataIntegrityException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySignature(String signature, String data) throws InvalidSignatureException ====&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
===Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getErrorOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== String getStandardOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getExitValue() ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ''native'' FileHandle getExecutable() ====&lt;br /&gt;
&lt;br /&gt;
==== ''native'' Handle getWorkingDirectory() ====&lt;br /&gt;
&lt;br /&gt;
==== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ====&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addEvent(String eventName, String message) ====&lt;br /&gt;
&lt;br /&gt;
==== void addException(Throwable exception) ====&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== Boolean getRandomBoolean() ====&lt;br /&gt;
&lt;br /&gt;
==== Byte[] getRandomBytes(Integer len) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomFilename(String extension) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomUUID() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getRandomInteger(Integer min, Integer max) ====&lt;br /&gt;
&lt;br /&gt;
==== Long getRandomLong(Long min, Long max) ====&lt;br /&gt;
&lt;br /&gt;
==== Float getRandomReal(Float min, Float max) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomString(Integer len, char[] charSet=) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getAccountID() ====&lt;br /&gt;
&lt;br /&gt;
==== String getAccountName() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getExpirationTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getFailedLoginCount() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastFailedLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLastHostAddress() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastPasswordChangeTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLocale() ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;String&amp;gt; getRoles() ====&lt;br /&gt;
&lt;br /&gt;
==== String getScreenName() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isAnonymous() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isEnabled() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isExpired() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isInRole(String role) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLocked() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLoggedIn() ====&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void assertValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getName() ====&lt;br /&gt;
&lt;br /&gt;
==== void setName(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getValue() ====&lt;br /&gt;
&lt;br /&gt;
==== void setValue(String value) ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getMaxAge() ====&lt;br /&gt;
&lt;br /&gt;
==== void setMaxAge(Integer maxAge) ====&lt;br /&gt;
&lt;br /&gt;
==== String getDomain() ====&lt;br /&gt;
&lt;br /&gt;
==== void setDomain(String domain) ====&lt;br /&gt;
&lt;br /&gt;
==== String getPath() ====&lt;br /&gt;
&lt;br /&gt;
==== void setPath(String path) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isHttpOnly() ====&lt;br /&gt;
&lt;br /&gt;
==== void setHttpOnly(Boolean httpOnly) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isSecure() ====&lt;br /&gt;
&lt;br /&gt;
==== void setSecure(Boolean secure) ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureChannel() ====&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureRequest() ====&lt;br /&gt;
&lt;br /&gt;
==== ClientCookie getCookie(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== List&amp;lt;FileHandle&amp;gt; getFileUploads() ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getHeader(String header) ====&lt;br /&gt;
&lt;br /&gt;
==== String getParameter(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== void sendForward(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void verifyCsrfToken() throws CsrfException ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addCookie(ClientCookie cookie) ====&lt;br /&gt;
&lt;br /&gt;
==== void addHeader(String key, String value) ====&lt;br /&gt;
&lt;br /&gt;
==== void killCookies() ====&lt;br /&gt;
&lt;br /&gt;
==== void sendRedirect(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void setContentType(String contentType) ====&lt;br /&gt;
&lt;br /&gt;
==== void setNoCacheHeaders() ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String key) ====&lt;br /&gt;
&lt;br /&gt;
== URLResource ==&lt;br /&gt;
&lt;br /&gt;
=== Extends ===&lt;br /&gt;
* [[#Resource|Resource]]&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void resetCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void addSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
==== void removeSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;br /&gt;
&lt;br /&gt;
[[Category:ESAPI]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112328</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112328"/>
				<updated>2011-06-17T05:40:42Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
The AccessReferenceMap interface is used to map from a set of internal direct object references to a set of indirect references that are safe to disclose publicly. This can be used to help protect database keys, filenames, and other types of direct object references. As a rule, developers should not expose their direct object references as it enables attackers to attempt to manipulate them.&lt;br /&gt;
&lt;br /&gt;
Indirect references are handled as strings, to facilitate their use in HTML. Implementations can generate simple integers or more complicated random character strings as indirect references. Implementations should probably add a constructor that takes a list of direct references.&lt;br /&gt;
&lt;br /&gt;
Note that in addition to defeating all forms of parameter tampering attacks, there is a side benefit of the AccessReferenceMap. Using random strings as indirect object references, as opposed to simple integers makes it impossible for an attacker to guess valid identifiers. So if per-user AccessReferenceMaps are used, then request forgery (CSRF) attacks will also be prevented.&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ====&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== User login() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
==== void logout() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(char c) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== void addCodec(Codec c) ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;Codec&amp;gt; getCodecs() ====&lt;br /&gt;
&lt;br /&gt;
==== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ====&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String seal(String data, Long timestamp) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String sign(String data) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String unseal(String sealedData) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySeal(String sealedData) throws DataIntegrityException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySignature(String signature, String data) throws InvalidSignatureException ====&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
===Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getErrorOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== String getStandardOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getExitValue() ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ''native'' FileHandle getExecutable() ====&lt;br /&gt;
&lt;br /&gt;
==== ''native'' Handle getWorkingDirectory() ====&lt;br /&gt;
&lt;br /&gt;
==== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ====&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addEvent(String eventName, String message) ====&lt;br /&gt;
&lt;br /&gt;
==== void addException(Throwable exception) ====&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== Boolean getRandomBoolean() ====&lt;br /&gt;
&lt;br /&gt;
==== Byte[] getRandomBytes(Integer len) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomFilename(String extension) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomUUID() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getRandomInteger(Integer min, Integer max) ====&lt;br /&gt;
&lt;br /&gt;
==== Long getRandomLong(Long min, Long max) ====&lt;br /&gt;
&lt;br /&gt;
==== Float getRandomReal(Float min, Float max) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomString(Integer len, char[] charSet=) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getAccountID() ====&lt;br /&gt;
&lt;br /&gt;
==== String getAccountName() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getExpirationTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getFailedLoginCount() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastFailedLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLastHostAddress() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastPasswordChangeTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLocale() ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;String&amp;gt; getRoles() ====&lt;br /&gt;
&lt;br /&gt;
==== String getScreenName() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isAnonymous() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isEnabled() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isExpired() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isInRole(String role) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLocked() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLoggedIn() ====&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void assertValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getName() ====&lt;br /&gt;
&lt;br /&gt;
==== void setName(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getValue() ====&lt;br /&gt;
&lt;br /&gt;
==== void setValue(String value) ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getMaxAge() ====&lt;br /&gt;
&lt;br /&gt;
==== void setMaxAge(Integer maxAge) ====&lt;br /&gt;
&lt;br /&gt;
==== String getDomain() ====&lt;br /&gt;
&lt;br /&gt;
==== void setDomain(String domain) ====&lt;br /&gt;
&lt;br /&gt;
==== String getPath() ====&lt;br /&gt;
&lt;br /&gt;
==== void setPath(String path) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isHttpOnly() ====&lt;br /&gt;
&lt;br /&gt;
==== void setHttpOnly(Boolean httpOnly) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isSecure() ====&lt;br /&gt;
&lt;br /&gt;
==== void setSecure(Boolean secure) ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureChannel() ====&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureRequest() ====&lt;br /&gt;
&lt;br /&gt;
==== ClientCookie getCookie(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== List&amp;lt;FileHandle&amp;gt; getFileUploads() ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getHeader(String header) ====&lt;br /&gt;
&lt;br /&gt;
==== String getParameter(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== void sendForward(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void verifyCsrfToken() throws CsrfException ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addCookie(ClientCookie cookie) ====&lt;br /&gt;
&lt;br /&gt;
==== void addHeader(String key, String value) ====&lt;br /&gt;
&lt;br /&gt;
==== void killCookies() ====&lt;br /&gt;
&lt;br /&gt;
==== void sendRedirect(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void setContentType(String contentType) ====&lt;br /&gt;
&lt;br /&gt;
==== void setNoCacheHeaders() ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String key) ====&lt;br /&gt;
&lt;br /&gt;
== URLResource ==&lt;br /&gt;
&lt;br /&gt;
=== Extends ===&lt;br /&gt;
* [[#Resource|Resource]]&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void resetCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void addSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
==== void removeSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112327</id>
		<title>Talk:ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112327"/>
				<updated>2011-06-17T05:36:14Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code - specifically where it deals with Encoding and Validation. I believe these changes are absolutely necessary however to establish a good cross-platform specification. I also believe the migration path allows for the smoothest transition for end-users (developers) to make the necessary changes without completely breaking their existing implementations. This is similar to the path that Spring-Security took with it's 2.0 -&amp;gt; 2.5 -&amp;gt; 3.0 path where they did a very similar thing and I used their experience as the basis for the proposed roadmap.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:23, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Proposed Roadmap ==&lt;br /&gt;
&lt;br /&gt;
Does this seem like a realistic and smooth approach?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
&lt;br /&gt;
Let's start with discussing the proposed changes to the AccessController. &lt;br /&gt;
&lt;br /&gt;
Summary of proposed changes:&lt;br /&gt;
* Drop deprecated methods isAuthorizedForXXX, assertAuthorizedForXXX&lt;br /&gt;
* Replace (Object) Parameters with strongly typed StereoTypes&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I like the resource approach, I am imaginating there will be, lets say, a FileResource inheritated from Resource, so if a FileResource is passed to the method then only assessments against file resources will be done, am I right?&lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:23, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
That is correct, however you could also have more complex resource types that integrate with a complex context object to create a context-based access control rule as well. This is an API that I have been silently working on (from a design standpoint) for the better part of a year so I am anxious to hear everyone's thoughts. The concept is simple - I want an API that can handle a simple Role-Based Access Control decision, a Data-Access Control Decision, and a Context-Based Access Control decision all with the same signature. I found this solution to be both elegant and simple to implement and use.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 01:36, 17 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Logged in user, from where? ==&lt;br /&gt;
&lt;br /&gt;
where is the logged in user information will come from? how is it going to be available for isAuthorized?&lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:16, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
I personally like the Spring-Security approach - which is similar to the way ESAPI for Java currently does it - in that it uses a threadlocal; however - afaik there is no concept of ThreadLocal variables in PHP or ASP.Net. I think the best way to do this would be to borrow the concept of the SecurityContextHolder from the Spring-Security model and leave the actual implementation of how it is populated up to the implementation. So this would be a new interface called something like AuthenticationHolder or UserContextHolder with a method to getCurrentUser() which would return the currently logged in user. &lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 01:32, 17 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Exceptions ==&lt;br /&gt;
&lt;br /&gt;
The specification looks very &amp;quot;Java&amp;quot;, that is, I am not pretty sure if you can handle structured exceptions in PHP, in Classic ASP is not possible, yet it could be emulated a little. Can we come to a representation that is more language neutral? (this is not a show stopper, just thinking on trying to be the more neutral possible) &lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:21, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
I added this at the very end because it does feel very Java'ish to me as well. However, that being said - all of the languages have a concept of either an Error or an Exception. PHP has Exceptions and as far as I can tell in ASP.Net you can raise an Error event which accomplishes the same task. Unfortunately in modern OO languages the concept of Error has a completely different meaning than an Exception as we are using them. An error is generally a condition that cannot be recovered from whereas an Exception represents a state that can - hence the use of the Exception word. &lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 01:32, 17 June 2011 (EDT)&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112326</id>
		<title>Talk:ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112326"/>
				<updated>2011-06-17T05:32:16Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code - specifically where it deals with Encoding and Validation. I believe these changes are absolutely necessary however to establish a good cross-platform specification. I also believe the migration path allows for the smoothest transition for end-users (developers) to make the necessary changes without completely breaking their existing implementations. This is similar to the path that Spring-Security took with it's 2.0 -&amp;gt; 2.5 -&amp;gt; 3.0 path where they did a very similar thing and I used their experience as the basis for the proposed roadmap.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:23, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Proposed Roadmap ==&lt;br /&gt;
&lt;br /&gt;
Does this seem like a realistic and smooth approach?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
&lt;br /&gt;
Let's start with discussing the proposed changes to the AccessController. &lt;br /&gt;
&lt;br /&gt;
Summary of proposed changes:&lt;br /&gt;
* Drop deprecated methods isAuthorizedForXXX, assertAuthorizedForXXX&lt;br /&gt;
* Replace (Object) Parameters with strongly typed StereoTypes&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I like the resource approach, I am imaginating there will be, lets say, a FileResource inheritated from Resource, so if a FileResource is passed to the method then only assessments against file resources will be done, am I right?&lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:23, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Logged in user, from where? ==&lt;br /&gt;
&lt;br /&gt;
where is the logged in user information will come from? how is it going to be available for isAuthorized?&lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:16, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
I personally like the Spring-Security approach - which is similar to the way ESAPI for Java currently does it - in that it uses a threadlocal; however - afaik there is no concept of ThreadLocal variables in PHP or ASP.Net. I think the best way to do this would be to borrow the concept of the SecurityContextHolder from the Spring-Security model and leave the actual implementation of how it is populated up to the implementation. So this would be a new interface called something like AuthenticationHolder or UserContextHolder with a method to getCurrentUser() which would return the currently logged in user. &lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 01:32, 17 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Exceptions ==&lt;br /&gt;
&lt;br /&gt;
The specification looks very &amp;quot;Java&amp;quot;, that is, I am not pretty sure if you can handle structured exceptions in PHP, in Classic ASP is not possible, yet it could be emulated a little. Can we come to a representation that is more language neutral? (this is not a show stopper, just thinking on trying to be the more neutral possible) &lt;br /&gt;
&lt;br /&gt;
--[[User:jcmax|Juan C Calderon]] 19:21, 16 June 2011 (CDT)&lt;br /&gt;
&lt;br /&gt;
I added this at the very end because it does feel very Java'ish to me as well. However, that being said - all of the languages have a concept of either an Error or an Exception. PHP has Exceptions and as far as I can tell in ASP.Net you can raise an Error event which accomplishes the same task. Unfortunately in modern OO languages the concept of Error has a completely different meaning than an Exception as we are using them. An error is generally a condition that cannot be recovered from whereas an Exception represents a state that can - hence the use of the Exception word. &lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 01:32, 17 June 2011 (EDT)&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112243</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112243"/>
				<updated>2011-06-16T07:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ====&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== User login() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
==== void logout() throws AuthenticationException ====&lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(char c) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String encode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== String decode(String s) ====&lt;br /&gt;
&lt;br /&gt;
==== void addCodec(Codec c) ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;Codec&amp;gt; getCodecs() ====&lt;br /&gt;
&lt;br /&gt;
==== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ====&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String seal(String data, Long timestamp) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String sign(String data) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== String unseal(String sealedData) throws EncryptionException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySeal(String sealedData) throws DataIntegrityException ====&lt;br /&gt;
&lt;br /&gt;
==== void verifySignature(String signature, String data) throws InvalidSignatureException ====&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
===Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getErrorOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== String getStandardOutput() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getExitValue() ====&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== ''native'' FileHandle getExecutable() ====&lt;br /&gt;
&lt;br /&gt;
==== ''native'' Handle getWorkingDirectory() ====&lt;br /&gt;
&lt;br /&gt;
==== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ====&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addEvent(String eventName, String message) ====&lt;br /&gt;
&lt;br /&gt;
==== void addException(Throwable exception) ====&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== Boolean getRandomBoolean() ====&lt;br /&gt;
&lt;br /&gt;
==== Byte[] getRandomBytes(Integer len) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomFilename(String extension) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomUUID() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getRandomInteger(Integer min, Integer max) ====&lt;br /&gt;
&lt;br /&gt;
==== Long getRandomLong(Long min, Long max) ====&lt;br /&gt;
&lt;br /&gt;
==== Float getRandomReal(Float min, Float max) ====&lt;br /&gt;
&lt;br /&gt;
==== String getRandomString(Integer len, char[] charSet=) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Type getAccountID() ====&lt;br /&gt;
&lt;br /&gt;
==== String getAccountName() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getExpirationTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getFailedLoginCount() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastFailedLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLastHostAddress() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastLoginTime() ====&lt;br /&gt;
&lt;br /&gt;
==== Long getLastPasswordChangeTime() ====&lt;br /&gt;
&lt;br /&gt;
==== String getLocale() ====&lt;br /&gt;
&lt;br /&gt;
==== Set&amp;lt;String&amp;gt; getRoles() ====&lt;br /&gt;
&lt;br /&gt;
==== String getScreenName() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isAnonymous() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isEnabled() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isExpired() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isInRole(String role) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLocked() ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isLoggedIn() ====&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;Type&amp;gt; void assertValid(Type data) ====&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getName() ====&lt;br /&gt;
&lt;br /&gt;
==== void setName(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getValue() ====&lt;br /&gt;
&lt;br /&gt;
==== void setValue(String value) ====&lt;br /&gt;
&lt;br /&gt;
==== Integer getMaxAge() ====&lt;br /&gt;
&lt;br /&gt;
==== void setMaxAge(Integer maxAge) ====&lt;br /&gt;
&lt;br /&gt;
==== String getDomain() ====&lt;br /&gt;
&lt;br /&gt;
==== void setDomain(String domain) ====&lt;br /&gt;
&lt;br /&gt;
==== String getPath() ====&lt;br /&gt;
&lt;br /&gt;
==== void setPath(String path) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isHttpOnly() ====&lt;br /&gt;
&lt;br /&gt;
==== void setHttpOnly(Boolean httpOnly) ====&lt;br /&gt;
&lt;br /&gt;
==== Boolean isSecure() ====&lt;br /&gt;
&lt;br /&gt;
==== void setSecure(Boolean secure) ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureChannel() ====&lt;br /&gt;
&lt;br /&gt;
==== void assertSecureRequest() ====&lt;br /&gt;
&lt;br /&gt;
==== ClientCookie getCookie(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== List&amp;lt;FileHandle&amp;gt; getFileUploads() ====&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== String getHeader(String header) ====&lt;br /&gt;
&lt;br /&gt;
==== String getParameter(String name) ====&lt;br /&gt;
&lt;br /&gt;
==== void sendForward(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void verifyCsrfToken() throws CsrfException ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== void addCookie(ClientCookie cookie) ====&lt;br /&gt;
&lt;br /&gt;
==== void addHeader(String key, String value) ====&lt;br /&gt;
&lt;br /&gt;
==== void killCookies() ====&lt;br /&gt;
&lt;br /&gt;
==== void sendRedirect(String url) ====&lt;br /&gt;
&lt;br /&gt;
==== void setContentType(String contentType) ====&lt;br /&gt;
&lt;br /&gt;
==== void setNoCacheHeaders() ====&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;T&amp;gt; T getAttribute(String key) ====&lt;br /&gt;
&lt;br /&gt;
== URLResource ==&lt;br /&gt;
&lt;br /&gt;
=== Extends ===&lt;br /&gt;
* [[#Resource|Resource]]&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== String getCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void resetCsrfToken() ====&lt;br /&gt;
&lt;br /&gt;
==== void addSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
==== void removeSession(SecureHttpSession session) ====&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112242</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112242"/>
				<updated>2011-06-16T07:02:03Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Resource and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== String getName() ===&lt;br /&gt;
&lt;br /&gt;
=== void setName(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getValue() ===&lt;br /&gt;
&lt;br /&gt;
=== void setValue(String value) ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getMaxAge() ===&lt;br /&gt;
&lt;br /&gt;
=== void setMaxAge(Integer maxAge) ===&lt;br /&gt;
&lt;br /&gt;
=== String getDomain() ===&lt;br /&gt;
&lt;br /&gt;
=== void setDomain(String domain) ===&lt;br /&gt;
&lt;br /&gt;
=== String getPath() ===&lt;br /&gt;
&lt;br /&gt;
=== void setPath(String path) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isHttpOnly() ===&lt;br /&gt;
&lt;br /&gt;
=== void setHttpOnly(Boolean httpOnly) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isSecure() ===&lt;br /&gt;
&lt;br /&gt;
=== void setSecure(Boolean secure) ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureChannel() ===&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureRequest() ===&lt;br /&gt;
&lt;br /&gt;
=== ClientCookie getCookie(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== List&amp;lt;FileHandle&amp;gt; getFileUploads() ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getHeader(String header) ===&lt;br /&gt;
&lt;br /&gt;
=== String getParameter(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== void sendForward(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void verifyCsrfToken() throws CsrfException ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== void addCookie(ClientCookie cookie) ===&lt;br /&gt;
&lt;br /&gt;
=== void addHeader(String key, String value) ===&lt;br /&gt;
&lt;br /&gt;
=== void killCookies() ===&lt;br /&gt;
&lt;br /&gt;
=== void sendRedirect(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void setContentType(String contentType) ===&lt;br /&gt;
&lt;br /&gt;
=== void setNoCacheHeaders() ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String key) ===&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== String getCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void resetCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void addSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
=== void removeSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Project_Structure&amp;diff=112240</id>
		<title>ESAPI Project Structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Project_Structure&amp;diff=112240"/>
				<updated>2011-06-16T06:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Created page with &amp;quot;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;  * '''ESAPI-Core-Specification (TLD):''' All forks should &amp;quot;inhe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''ESAPI-Core-Specification (TLD):''' All forks should &amp;quot;inherit&amp;quot; from this specification&lt;br /&gt;
** '''ESAPI-Core:''' This is a language specific artifact (jar,dll,etc.) that contains the API described by the ESAPI Core Specification as well as the Core-API Unit Testing Suite &lt;br /&gt;
*** '''ESAPI-Core-RI:''' This is the &amp;quot;Reference Implementation&amp;quot; of the Core-API. This can be a single artifact or multiple artifacts depending on the preference of the community and project leadership.&lt;br /&gt;
*** '''ESAPI-Web-Specification:''' This is the specification for the ESAPI Web API&lt;br /&gt;
**** '''ESAPI-Web-API:''' This is the language specific artifact that contains the API described by the ESAPI-Web-Specification as well as a set of Unit Tests &lt;br /&gt;
***** '''ESAPI-Web-RI:''' This is the &amp;quot;Reference Implementation&amp;quot; of the Web-API. &lt;br /&gt;
*** '''ESAPI-Mobile-Specification:'''&lt;br /&gt;
**** '''ESAPI-Mobile-API:'''&lt;br /&gt;
***** '''ESAPI-Mobile-RI:'''&lt;br /&gt;
*** '''ESAPI-Desktop-Specification:'''&lt;br /&gt;
**** '''ESAPI-Desktop-API:'''&lt;br /&gt;
***** '''ESAPI-Desktop-RI:'''&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112239</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112239"/>
				<updated>2011-06-16T06:51:08Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;This document is currently under development - Please use the Discussion page for threaded conversation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== String getName() ===&lt;br /&gt;
&lt;br /&gt;
=== void setName(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getValue() ===&lt;br /&gt;
&lt;br /&gt;
=== void setValue(String value) ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getMaxAge() ===&lt;br /&gt;
&lt;br /&gt;
=== void setMaxAge(Integer maxAge) ===&lt;br /&gt;
&lt;br /&gt;
=== String getDomain() ===&lt;br /&gt;
&lt;br /&gt;
=== void setDomain(String domain) ===&lt;br /&gt;
&lt;br /&gt;
=== String getPath() ===&lt;br /&gt;
&lt;br /&gt;
=== void setPath(String path) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isHttpOnly() ===&lt;br /&gt;
&lt;br /&gt;
=== void setHttpOnly(Boolean httpOnly) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isSecure() ===&lt;br /&gt;
&lt;br /&gt;
=== void setSecure(Boolean secure) ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureChannel() ===&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureRequest() ===&lt;br /&gt;
&lt;br /&gt;
=== ClientCookie getCookie(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== List&amp;lt;FileHandle&amp;gt; getFileUploads() ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getHeader(String header) ===&lt;br /&gt;
&lt;br /&gt;
=== String getParameter(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== void sendForward(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void verifyCsrfToken() throws CsrfException ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== void addCookie(ClientCookie cookie) ===&lt;br /&gt;
&lt;br /&gt;
=== void addHeader(String key, String value) ===&lt;br /&gt;
&lt;br /&gt;
=== void killCookies() ===&lt;br /&gt;
&lt;br /&gt;
=== void sendRedirect(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void setContentType(String contentType) ===&lt;br /&gt;
&lt;br /&gt;
=== void setNoCacheHeaders() ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String key) ===&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== String getCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void resetCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void addSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
=== void removeSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112238</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112238"/>
				<updated>2011-06-16T06:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
This API describes the components that can be used in the context of a Web Application. &lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
=== String getName() ===&lt;br /&gt;
&lt;br /&gt;
=== void setName(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getValue() ===&lt;br /&gt;
&lt;br /&gt;
=== void setValue(String value) ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getMaxAge() ===&lt;br /&gt;
&lt;br /&gt;
=== void setMaxAge(Integer maxAge) ===&lt;br /&gt;
&lt;br /&gt;
=== String getDomain() ===&lt;br /&gt;
&lt;br /&gt;
=== void setDomain(String domain) ===&lt;br /&gt;
&lt;br /&gt;
=== String getPath() ===&lt;br /&gt;
&lt;br /&gt;
=== void setPath(String path) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isHttpOnly() ===&lt;br /&gt;
&lt;br /&gt;
=== void setHttpOnly(Boolean httpOnly) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isSecure() ===&lt;br /&gt;
&lt;br /&gt;
=== void setSecure(Boolean secure) ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureChannel() ===&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureRequest() ===&lt;br /&gt;
&lt;br /&gt;
=== ClientCookie getCookie(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== List&amp;lt;FileHandle&amp;gt; getFileUploads() ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getHeader(String header) ===&lt;br /&gt;
&lt;br /&gt;
=== String getParameter(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== void sendForward(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void verifyCsrfToken() throws CsrfException ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== void addCookie(ClientCookie cookie) ===&lt;br /&gt;
&lt;br /&gt;
=== void addHeader(String key, String value) ===&lt;br /&gt;
&lt;br /&gt;
=== void killCookies() ===&lt;br /&gt;
&lt;br /&gt;
=== void sendRedirect(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void setContentType(String contentType) ===&lt;br /&gt;
&lt;br /&gt;
=== void setNoCacheHeaders() ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String key) ===&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== String getCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void resetCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void addSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
=== void removeSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112237</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112237"/>
				<updated>2011-06-16T06:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API Specification =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
== Exceptions == &lt;br /&gt;
&lt;br /&gt;
=== AccessDeniedException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountDisabledException ===&lt;br /&gt;
&lt;br /&gt;
=== AccountLockedException ===&lt;br /&gt;
&lt;br /&gt;
=== AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== EncodingException ===&lt;br /&gt;
&lt;br /&gt;
=== EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityException ===&lt;br /&gt;
&lt;br /&gt;
=== EnterpriseSecurityRuntimeException ===&lt;br /&gt;
&lt;br /&gt;
=== ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
=== IncorrectCredentialsException ===&lt;br /&gt;
&lt;br /&gt;
= Web API Specification =&lt;br /&gt;
&lt;br /&gt;
== ClientCookie ==&lt;br /&gt;
&lt;br /&gt;
== SecureHttpRequest ==&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureChannel() ===&lt;br /&gt;
&lt;br /&gt;
=== void assertSecureRequest() ===&lt;br /&gt;
&lt;br /&gt;
=== ClientCookie getCookie(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== List&amp;lt;FileHandle&amp;gt; getFileUploads() ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== String getHeader(String header) ===&lt;br /&gt;
&lt;br /&gt;
=== String getParameter(String name) ===&lt;br /&gt;
&lt;br /&gt;
=== void sendForward(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void verifyCsrfToken() throws CsrfException ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpResponse ==&lt;br /&gt;
&lt;br /&gt;
=== void addCookie(ClientCookie cookie) ===&lt;br /&gt;
&lt;br /&gt;
=== void addHeader(String key, String value) ===&lt;br /&gt;
&lt;br /&gt;
=== void killCookies() ===&lt;br /&gt;
&lt;br /&gt;
=== void sendRedirect(String url) ===&lt;br /&gt;
&lt;br /&gt;
=== void setContentType(String contentType) ===&lt;br /&gt;
&lt;br /&gt;
=== void setNoCacheHeaders() ===&lt;br /&gt;
&lt;br /&gt;
== SecureHttpSession ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;T&amp;gt; T getAttribute(String key) ===&lt;br /&gt;
&lt;br /&gt;
== WebUser ==&lt;br /&gt;
&lt;br /&gt;
=== String getCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void resetCsrfToken() ===&lt;br /&gt;
&lt;br /&gt;
=== void addSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
=== void removeSession(SecureHttpSession session) ===&lt;br /&gt;
&lt;br /&gt;
= Mobile API Specification =&lt;br /&gt;
&lt;br /&gt;
= Desktop API Specification =&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112235</id>
		<title>Talk:ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112235"/>
				<updated>2011-06-16T06:26:45Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code - specifically where it deals with Encoding and Validation. I believe these changes are absolutely necessary however to establish a good cross-platform specification. I also believe the migration path allows for the smoothest transition for end-users (developers) to make the necessary changes without completely breaking their existing implementations. This is similar to the path that Spring-Security took with it's 2.0 -&amp;gt; 2.5 -&amp;gt; 3.0 path where they did a very similar thing and I used their experience as the basis for the proposed roadmap.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:23, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Proposed Roadmap ==&lt;br /&gt;
&lt;br /&gt;
Does this seem like a realistic and smooth approach?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
&lt;br /&gt;
Let's start with discussing the proposed changes to the AccessController. &lt;br /&gt;
&lt;br /&gt;
Summary of proposed changes:&lt;br /&gt;
* Drop deprecated methods isAuthorizedForXXX, assertAuthorizedForXXX&lt;br /&gt;
* Replace (Object) Parameters with strongly typed StereoTypes&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:26, 16 June 2011 (EDT)&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112234</id>
		<title>Talk:ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112234"/>
				<updated>2011-06-16T06:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: /* AccessController */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code - specifically where it deals with Encoding and Validation. I believe these changes are absolutely necessary however to establish a good cross-platform specification. I also believe the migration path allows for the smoothest transition for end-users (developers) to make the necessary changes without completely breaking their existing implementations. This is similar to the path that Spring-Security took with it's 2.0 -&amp;gt; 2.5 -&amp;gt; 3.0 path where they did a very similar thing and I used their experience as the basis for the proposed roadmap.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:23, 16 June 2011 (EDT)&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
&lt;br /&gt;
Let's start with discussing the proposed changes to the AccessController. &lt;br /&gt;
&lt;br /&gt;
Summary of proposed changes:&lt;br /&gt;
* Drop deprecated methods isAuthorizedForXXX, assertAuthorizedForXXX&lt;br /&gt;
* Replace (Object) Parameters with strongly typed StereoTypes&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112233</id>
		<title>Talk:ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:ESAPI_Specification&amp;diff=112233"/>
				<updated>2011-06-16T06:23:59Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Created page with &amp;quot;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code -...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I tried to keep the specification as compatible as I can with the existing APIs, however there are definately places where existing users are going to have to modify their code - specifically where it deals with Encoding and Validation. I believe these changes are absolutely necessary however to establish a good cross-platform specification. I also believe the migration path allows for the smoothest transition for end-users (developers) to make the necessary changes without completely breaking their existing implementations. This is similar to the path that Spring-Security took with it's 2.0 -&amp;gt; 2.5 -&amp;gt; 3.0 path where they did a very similar thing and I used their experience as the basis for the proposed roadmap.&lt;br /&gt;
&lt;br /&gt;
--[[User:Chris Schmidt|Chris Schmidt]] 02:23, 16 June 2011 (EDT)&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112232</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112232"/>
				<updated>2011-06-16T06:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[#AccessDeniedException|AccessDeniedException]]&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
= Exceptions = &lt;br /&gt;
&lt;br /&gt;
== AccessDeniedException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== AccountDisabledException extends AuthenticationException ==&lt;br /&gt;
&lt;br /&gt;
== AccountLockedException extends AuthenticationException ==&lt;br /&gt;
&lt;br /&gt;
== AuthenticationException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== EncodingException extends EnterpriseSecurityRuntimeException ==&lt;br /&gt;
&lt;br /&gt;
== EncryptionException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== EnterpriseSecurityException extends Exception ==&lt;br /&gt;
&lt;br /&gt;
== EnterpriseSecurityRuntimeException extends RuntimeException ==&lt;br /&gt;
&lt;br /&gt;
== ExecutionException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== IncorrectCredentialsException extends AuthenticationException ==&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112231</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112231"/>
				<updated>2011-06-16T06:11:06Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| AccessDeniedException&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
= Exceptions = &lt;br /&gt;
&lt;br /&gt;
== AccessDeniedException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== AuthenticationException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== EncodingException extends EnterpriseSecurityRuntimeException ==&lt;br /&gt;
&lt;br /&gt;
== EncryptionException extends EnterpriseSecurityException ==&lt;br /&gt;
&lt;br /&gt;
== EnterpriseSecurityException extends Exception ==&lt;br /&gt;
&lt;br /&gt;
== EnterpriseSecurityRuntimeException extends RuntimeException ==&lt;br /&gt;
&lt;br /&gt;
== ExecutionException extends EnterpriseSecurityException ==&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112230</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112230"/>
				<updated>2011-06-16T05:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| AccessDeniedException&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112229</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112229"/>
				<updated>2011-06-16T05:59:07Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposed Migration Roadmap =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
** &lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| AccessDeniedException&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112227</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112227"/>
				<updated>2011-06-16T05:58:20Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration Strategy =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
** &lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| AccessDeniedException&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== ''native'' FileHandle getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== ''native'' Handle getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
Marker Interface for Resources that a user can request access to.&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112223</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112223"/>
				<updated>2011-06-16T05:55:31Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration Strategy =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
** &lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
The AccessController is responsible for determining if the currently logged in user has access to a given resource. The resource can be anything that implements the [[#Resource|Resource]] Interface.&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== StereoTypes ===&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| R &lt;br /&gt;
| A class that implements the [[#Resource|Resource]] Interface and represents the [[#Resource|Resource]] the user is requesting access to &lt;br /&gt;
|-&lt;br /&gt;
| Context &lt;br /&gt;
| Any object that represents the current context of the Authorization request - this is generally a Key-Value map &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; void assertAuthorized(Resource resource, Context context) throws AccessDeniedException ====&lt;br /&gt;
Assert that the currently logged in user can access the given [[#Resource|Resource]] with the given Context parameters&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Exception&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| AccessDeniedException&lt;br /&gt;
| If the assertion evaluates to false, an AccessControlException will be thrown with contextual information as to the reason for the failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;R extends Resource,Context&amp;gt; boolean isAuthorized(Resource resource, Context context) ====&lt;br /&gt;
Determine if the given resource is accessible by the currently logged in [[#User|User]]&lt;br /&gt;
&lt;br /&gt;
===== Parameters =====&lt;br /&gt;
{| style=&amp;quot;background-color: #9AD7F5; border: 1px solid black; text-align: left;&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Default Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| resource&lt;br /&gt;
| &lt;br /&gt;
| The resource that the user is attempting to access&lt;br /&gt;
|-&lt;br /&gt;
| context&lt;br /&gt;
| &lt;br /&gt;
| The context of the request. This could be any type of object - for instance if requesting access to data, the context may be the resource identifier for the identified resource.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Return =====&lt;br /&gt;
Returns true if the resource is accessible to the currently logged in user and false if it is not.&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Resource getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== Resource getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Native&amp;gt; FileHandle getHandle() ===&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112221</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112221"/>
				<updated>2011-06-16T05:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration Strategy =&lt;br /&gt;
* ESAPI 2.1&lt;br /&gt;
** Create new package '''org.owasp.esapi.core'''&lt;br /&gt;
** Create new set of Interfaces in new package with each extending it's '''org.owasp.esapi''' counterpart&lt;br /&gt;
** Deprecate methods in '''org.owasp.esapi''' Interfaces&lt;br /&gt;
* ESAPI 2.5&lt;br /&gt;
** Remove deprecated methods that were deprecated at or before ESAPI 2.0&lt;br /&gt;
** Introduce new ServiceLocator API&lt;br /&gt;
** &lt;br /&gt;
* ESAPI 3.0&lt;br /&gt;
** Seperate Core API into it's own artifact/project called ESAPI-Core&lt;br /&gt;
** Create new set of artifacts as outlined in [[ESAPI_Project_Structure]]&lt;br /&gt;
** Introduce Core API Testing Suite&lt;br /&gt;
&lt;br /&gt;
= Core API =&lt;br /&gt;
&lt;br /&gt;
== AccessController ==&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; void assertAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; boolean isAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Resource getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== Resource getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Native&amp;gt; FileHandle getHandle() ===&lt;br /&gt;
&lt;br /&gt;
== ServiceLocator ==&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112220</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112220"/>
				<updated>2011-06-16T05:22:56Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AccessController ==&lt;br /&gt;
&lt;br /&gt;
=== Changes from ESAPI 2.0 ===&lt;br /&gt;
* Removed deprecated methods&lt;br /&gt;
* Added Generic Stereotypes to the Key and Context parameters)&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; void assertAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; boolean isAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Resource getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== Resource getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== LogFactory ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Logger ==&lt;br /&gt;
Still thinking this one through&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Native&amp;gt; FileHandle getHandle() ===&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112219</id>
		<title>ESAPI Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Specification&amp;diff=112219"/>
				<updated>2011-06-16T05:20:03Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Created page with &amp;quot;== AccessController ==  === &amp;lt;Key,Context&amp;gt; void assertAuthorized(Key key, Context context) ===  === &amp;lt;Key,Context&amp;gt; boolean isAuthorized(Key key, Context context) ===  == AccessRefe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AccessController ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; void assertAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Key,Context&amp;gt; boolean isAuthorized(Key key, Context context) ===&lt;br /&gt;
&lt;br /&gt;
== AccessReferenceMap&amp;lt;Key&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key addDirectReference(Type direct) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getDirectReference(Key key) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key getIndirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Key removeDirectReference(Type directReference) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void update(Set&amp;lt;Type&amp;gt; directReferences)  ===&lt;br /&gt;
&lt;br /&gt;
== Authenticator ==&lt;br /&gt;
&lt;br /&gt;
=== User login() throws AuthenticationException ===&lt;br /&gt;
&lt;br /&gt;
=== void logout() throws AuthenticationException === &lt;br /&gt;
&lt;br /&gt;
== Codec ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(char c) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
== Encoder ==&lt;br /&gt;
&lt;br /&gt;
=== String encode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== String decode(String s) ===&lt;br /&gt;
&lt;br /&gt;
=== void addCodec(Codec c) ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;Codec&amp;gt; getCodecs() ===&lt;br /&gt;
&lt;br /&gt;
=== void setCodecs(Set&amp;lt;Codec&amp;gt; codecs) ===&lt;br /&gt;
&lt;br /&gt;
== Encryptor ==&lt;br /&gt;
&lt;br /&gt;
=== PlainText decrypt(CipherText cipherText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== CipherText encrypt(PlainText plainText, SecretKey secretKey) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== MessageDigest hash(PlainText plainText, Salt salt, Integer iterations) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String seal(String data, Long timestamp) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String sign(String data) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== String unseal(String sealedData) throws EncryptionException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySeal(String sealedData) throws DataIntegrityException ===&lt;br /&gt;
&lt;br /&gt;
=== void verifySignature(String signature, String data) throws InvalidSignatureException ===&lt;br /&gt;
&lt;br /&gt;
== Executor ==&lt;br /&gt;
&lt;br /&gt;
=== ExecutorResult executeSystemCommand(ExecutorTarget target, Encoder encoder) throws ExecutionException ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorResult ==&lt;br /&gt;
&lt;br /&gt;
=== String getErrorOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== String getStandardOutput() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getExitValue() ===&lt;br /&gt;
&lt;br /&gt;
== ExecutorTarget ==&lt;br /&gt;
&lt;br /&gt;
=== Resource getExecutable() ===&lt;br /&gt;
&lt;br /&gt;
=== Resource getWorkingDirectory() ===&lt;br /&gt;
&lt;br /&gt;
=== OrderedMap&amp;lt;String,String&amp;gt; getParameters() ===&lt;br /&gt;
&lt;br /&gt;
== IntrusionDetector ==&lt;br /&gt;
&lt;br /&gt;
=== void addEvent(String eventName, String message) ===&lt;br /&gt;
&lt;br /&gt;
=== void addException(Throwable exception) ===&lt;br /&gt;
&lt;br /&gt;
== Randomizer ==&lt;br /&gt;
&lt;br /&gt;
=== Boolean getRandomBoolean() ===&lt;br /&gt;
&lt;br /&gt;
=== Byte[] getRandomBytes(Integer len) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomFilename(String extension) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomUUID() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getRandomInteger(Integer min, Integer max) ===&lt;br /&gt;
&lt;br /&gt;
=== Long getRandomLong(Long min, Long max) ===&lt;br /&gt;
&lt;br /&gt;
=== Float getRandomReal(Float min, Float max) ===&lt;br /&gt;
&lt;br /&gt;
=== String getRandomString(Integer len, char[] charSet) ===&lt;br /&gt;
&lt;br /&gt;
== Resource ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Native&amp;gt; FileHandle getHandle() ===&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Type getAccountID() ===&lt;br /&gt;
&lt;br /&gt;
=== String getAccountName() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getExpirationTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Integer getFailedLoginCount() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastFailedLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLastHostAddress() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastLoginTime() ===&lt;br /&gt;
&lt;br /&gt;
=== Long getLastPasswordChangeTime() ===&lt;br /&gt;
&lt;br /&gt;
=== String getLocale() ===&lt;br /&gt;
&lt;br /&gt;
=== Set&amp;lt;String&amp;gt; getRoles() ===&lt;br /&gt;
&lt;br /&gt;
=== String getScreenName() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isAnonymous() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isEnabled() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isExpired() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isInRole(String role) ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLocked() ===&lt;br /&gt;
&lt;br /&gt;
=== Boolean isLoggedIn() ===&lt;br /&gt;
&lt;br /&gt;
== Validator ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; Boolean isValid(Type data) ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Type&amp;gt; void assertValid(Type data) ===&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=112085</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=112085"/>
				<updated>2011-06-13T18:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on September 20th at AppSecUSA&lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
* 09:00 - 09:30 Mission Briefing&lt;br /&gt;
** Review Project Definition and Mission Statement (update if necc.)&lt;br /&gt;
* 09:30 - 10:30 Brain Dump&lt;br /&gt;
** Get everyones &amp;quot;big-picture&amp;quot; ideas up on the board&lt;br /&gt;
** Brief statement about each, this should be a fast-paced Mind-Mapping Exercise aimed to get as many ideas as we can on the board as quickly as possible&lt;br /&gt;
* 10:30 - 10:45 Break time&lt;br /&gt;
** Good job, get some coffee and some air and get prepared for the real work.&lt;br /&gt;
* 10:45 - 12:00 Bug Hunt&lt;br /&gt;
** Review the list of existing ESAPI Bugs, assign a champion to them, and prioritize per champion&lt;br /&gt;
* 12:00 - 13:00 Lunch - Open Conversation&lt;br /&gt;
** Lunch to be provided by OWASP/ESAPI &lt;br /&gt;
* 13:00 - 15:00 Where do we go now?&lt;br /&gt;
** Now that the bugs are fresh in our heads, let's revisit our master wish-list from earlier and prioritize future enhancements, lay them out into a version roadmap (not a calendar roadmap). Some of these enhancements will likely jump out as high-priority and others as nice-to-haves. It should also be remembered, that a version roadmap is a organic document, it will constantly change and evolve to meet the demands of our users. This is just a first step in getting such a roadmap in place. &lt;br /&gt;
* 15:00 - 15:15 Break time&lt;br /&gt;
** Get some air, there is sure to be some great debate to reflect on&lt;br /&gt;
* 15:15 - 16:00 Formally define the following policies&lt;br /&gt;
** Becoming a Committer&lt;br /&gt;
** Submitting Contributed Components&lt;br /&gt;
** Reporting Security Vulnerabilities&lt;br /&gt;
* 16:00 - 18:00 Aligning the ESAPI Projects&lt;br /&gt;
** How do we bring all of the implementations into alignment as far as the API is concerned&lt;br /&gt;
** How do we ensure that all implements adhere to the contract of the API&lt;br /&gt;
** What level of adherement to the specification do we enforce to &amp;quot;sign off&amp;quot; on various implementations&lt;br /&gt;
&lt;br /&gt;
=== Deliverables ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[How to become a committer]]&lt;br /&gt;
* [[How to submit contributions]]&lt;br /&gt;
* [[How to report security vulnerabilities]]&lt;br /&gt;
* [[ESAPI Cross Platform Specification]]&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
* [[User:jmanico|Jim Manico]] - ESAPI Project Manager&lt;br /&gt;
* [[User:John Steven|jOHN Steven]] - Cigital Principal, ESAPI Malcontent&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Web_Testing_Environment_Project&amp;diff=111880</id>
		<title>OWASP Web Testing Environment Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Web_Testing_Environment_Project&amp;diff=111880"/>
				<updated>2011-06-07T12:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: Redirected page to Category:OWASP Live CD Project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Category:OWASP_Live_CD_Project]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111560</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111560"/>
				<updated>2011-06-02T16:34:40Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on &lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
* 09:00 - 09:30 Mission Briefing&lt;br /&gt;
** Review Project Definition and Mission Statement (update if necc.)&lt;br /&gt;
* 09:30 - 10:30 Brain Dump&lt;br /&gt;
** Get everyones &amp;quot;big-picture&amp;quot; ideas up on the board&lt;br /&gt;
** Brief statement about each, this should be a fast-paced Mind-Mapping Exercise aimed to get as many ideas as we can on the board as quickly as possible&lt;br /&gt;
* 10:30 - 10:45 Break time&lt;br /&gt;
** Good job, get some coffee and some air and get prepared for the real work.&lt;br /&gt;
* 10:45 - 12:00 Bug Hunt&lt;br /&gt;
** Review the list of existing ESAPI Bugs, assign a champion to them, and prioritize per champion&lt;br /&gt;
* 12:00 - 13:00 Lunch - Open Conversation&lt;br /&gt;
** Lunch to be provided by OWASP/ESAPI &lt;br /&gt;
* 13:00 - 15:00 Where do we go now?&lt;br /&gt;
** Now that the bugs are fresh in our heads, let's revisit our master wish-list from earlier and prioritize future enhancements, lay them out into a version roadmap (not a calendar roadmap). Some of these enhancements will likely jump out as high-priority and others as nice-to-haves. It should also be remembered, that a version roadmap is a organic document, it will constantly change and evolve to meet the demands of our users. This is just a first step in getting such a roadmap in place. &lt;br /&gt;
* 15:00 - 15:15 Break time&lt;br /&gt;
** Get some air, there is sure to be some great debate to reflect on&lt;br /&gt;
* 15:15 - 16:00 Formally define the following policies&lt;br /&gt;
** Becoming a Committer&lt;br /&gt;
** Submitting Contributed Components&lt;br /&gt;
** Reporting Security Vulnerabilities&lt;br /&gt;
* 16:00 - 18:00 Aligning the ESAPI Projects&lt;br /&gt;
** How do we bring all of the implementations into alignment as far as the API is concerned&lt;br /&gt;
** How do we ensure that all implements adhere to the contract of the API&lt;br /&gt;
** What level of adherement to the specification do we enforce to &amp;quot;sign off&amp;quot; on various implementations&lt;br /&gt;
&lt;br /&gt;
=== Deliverables ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[How to become a committer]]&lt;br /&gt;
* [[How to submit contributions]]&lt;br /&gt;
* [[How to report security vulnerabilities]]&lt;br /&gt;
* [[ESAPI Cross Platform Specification]]&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111557</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111557"/>
				<updated>2011-06-02T16:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on &lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
* 09:00 - 09:30 Mission Briefing&lt;br /&gt;
** Review Project Definition and Mission Statement (update if necc.)&lt;br /&gt;
* 09:30 - 10:30 Brain Dump&lt;br /&gt;
** Get everyones &amp;quot;big-picture&amp;quot; ideas up on the board&lt;br /&gt;
** Brief statement about each, this should be a fast-paced Mind-Mapping Exercise aimed to get as many ideas as we can on the board as quickly as possible&lt;br /&gt;
* 10:30 - 10:45 Break time&lt;br /&gt;
** Good job, get some coffee and some air and get prepared for the real work.&lt;br /&gt;
* 10:45 - 12:00 Bug Hunt&lt;br /&gt;
** Review the list of existing ESAPI Bugs, assign a champion to them, and prioritize per champion&lt;br /&gt;
* 12:00 - 13:00 Lunch - Open Conversation&lt;br /&gt;
** Lunch to be provided by OWASP/ESAPI &lt;br /&gt;
* 13:00 - 15:00 Where do we go now?&lt;br /&gt;
** Now that the bugs are fresh in our heads, let's revisit our master wish-list from earlier and prioritize future enhancements, lay them out into a version roadmap (not a calendar roadmap). Some of these enhancements will likely jump out as high-priority and others as nice-to-haves. It should also be remembered, that a version roadmap is a organic document, it will constantly change and evolve to meet the demands of our users. This is just a first step in getting such a roadmap in place. &lt;br /&gt;
* 15:00 - 15:15 Break time&lt;br /&gt;
** Get some air, there is sure to be some great debate to reflect on&lt;br /&gt;
* 15:15 - 16:00 Formally define the following policies&lt;br /&gt;
** Becoming a Committer&lt;br /&gt;
** Submitting Contributed Components&lt;br /&gt;
** Reporting Security Vulnerabilities&lt;br /&gt;
* 16:00 - 18:00 Aligning the ESAPI Projects&lt;br /&gt;
** How do we bring all of the implementations into alignment as far as the API is concerned&lt;br /&gt;
** How do we ensure that all implements adhere to the contract of the API&lt;br /&gt;
** What level of adherement to the specification do we enforce to &amp;quot;sign off&amp;quot; on various implementations&lt;br /&gt;
&lt;br /&gt;
=== Deliverables ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[How to become a committer]]&lt;br /&gt;
* [[How to submit contributions]]&lt;br /&gt;
* [[How to report security vulnerabilities]]&lt;br /&gt;
* [[ESAPI Cross Platform Specification]]&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
[[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111555</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111555"/>
				<updated>2011-06-02T16:31:52Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on &lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
* 09:00 - 09:30 Mission Briefing&lt;br /&gt;
** Review Project Definition and Mission Statement (update if necc.)&lt;br /&gt;
* 09:30 - 10:30 Brain Dump&lt;br /&gt;
** Get everyones &amp;quot;big-picture&amp;quot; ideas up on the board&lt;br /&gt;
** Brief statement about each, this should be a fast-paced Mind-Mapping Exercise aimed to get as many ideas as we can on the board as quickly as possible&lt;br /&gt;
* 10:30 - 10:45 Break time&lt;br /&gt;
** Good job, get some coffee and some air and get prepared for the real work.&lt;br /&gt;
* 10:45 - 12:00 Bug Hunt&lt;br /&gt;
** Review the list of existing ESAPI Bugs, assign a champion to them, and prioritize per champion&lt;br /&gt;
* 12:00 - 13:00 Lunch - Open Conversation&lt;br /&gt;
** Lunch to be provided by OWASP/ESAPI &lt;br /&gt;
* 13:00 - 15:00 Where do we go now?&lt;br /&gt;
** Now that the bugs are fresh in our heads, let's revisit our master wish-list from earlier and prioritize future enhancements, lay them out into a version roadmap (not a calendar roadmap). Some of these enhancements will likely jump out as high-priority and others as nice-to-haves. It should also be remembered, that a version roadmap is a organic document, it will constantly change and evolve to meet the demands of our users. This is just a first step in getting such a roadmap in place. &lt;br /&gt;
* 15:00 - 15:15 Break time&lt;br /&gt;
** Get some air, there is sure to be some great debate to reflect on&lt;br /&gt;
* 15:15 - 16:00 Formally define the following policies&lt;br /&gt;
** Becoming a Committer&lt;br /&gt;
** Submitting Contributed Components&lt;br /&gt;
** Reporting Security Vulnerabilities&lt;br /&gt;
* 16:00 - 18:00 Aligning the ESAPI Projects&lt;br /&gt;
** How do we bring all of the implementations into alignment as far as the API is concerned&lt;br /&gt;
** How do we ensure that all implements adhere to the contract of the API&lt;br /&gt;
** What level of adherement to the specification do we enforce to &amp;quot;sign off&amp;quot; on various implementations&lt;br /&gt;
&lt;br /&gt;
=== Deliverables ===&lt;br /&gt;
&lt;br /&gt;
[[ESAPI Roadmap]]&lt;br /&gt;
[[How to become a committer]]&lt;br /&gt;
[[How to submit contributions]]&lt;br /&gt;
[[How to report security vulnerabilities]]&lt;br /&gt;
[[ESAPI Cross Platform Specification]]&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
[[User:Chris Schmidt|Chris Schmidt]] - Meeting Leader&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111548</id>
		<title>ESAPI Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=ESAPI_Summit&amp;diff=111548"/>
				<updated>2011-06-02T16:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;Chris Schmidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summit 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The ESAPI Summit will be held on &lt;br /&gt;
&lt;br /&gt;
=== Agenda ===&lt;br /&gt;
&lt;br /&gt;
* 09:00 - 09:30 Mission Briefing&lt;br /&gt;
** Review Project Definition and Mission Statement (update if necc.)&lt;br /&gt;
* 09:30 - 10:30 Brain Dump&lt;br /&gt;
** Get everyones &amp;quot;big-picture&amp;quot; ideas up on the board&lt;br /&gt;
** Brief statement about each, this should be a fast-paced Mind-Mapping Exercise aimed to get as many ideas as we can on the board as quickly as possible&lt;br /&gt;
* 10:30 - 10:45 Break time&lt;br /&gt;
** Good job, get some coffee and some air and get prepared for the real work.&lt;br /&gt;
* 10:45 - 12:00 Bug Hunt&lt;br /&gt;
** Review the list of existing ESAPI Bugs, assign a champion to them, and prioritize per champion&lt;br /&gt;
* 12:00 - 13:00 Lunch - Open Conversation&lt;br /&gt;
** Lunch to be provided by OWASP/ESAPI &lt;br /&gt;
* 13:00 - 15:00 Where do we go now?&lt;br /&gt;
** Now that the bugs are fresh in our heads, let's revisit our master wish-list from earlier and prioritize future enhancements, lay them out into a version roadmap (not a calendar roadmap). Some of these enhancements will likely jump out as high-priority and others as nice-to-haves. It should also be remembered, that a version roadmap is a organic document, it will constantly change and evolve to meet the demands of our users. This is just a first step in getting such a roadmap in place. &lt;br /&gt;
* 15:00 - 15:15 Break time&lt;br /&gt;
** Get some air, there is sure to be some great debate to reflect on&lt;br /&gt;
* 15:15 - 16:00 Formally define the following policies&lt;br /&gt;
** Becoming a Committer&lt;br /&gt;
** Submitting Contributed Components&lt;br /&gt;
** Reporting Security Vulnerabilities&lt;br /&gt;
* 16:00 - 18:00 Aligning the ESAPI Projects&lt;br /&gt;
** How do we bring all of the implementations into alignment as far as the API is concerned&lt;br /&gt;
** How do we ensure that all implements adhere to the contract of the API&lt;br /&gt;
** What level of adherement to the specification do we enforce to &amp;quot;sign off&amp;quot; on various implementations&lt;br /&gt;
&lt;br /&gt;
=== Attending the ESAPI Summit ===&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend this summit, please list your name below so that we can ensure that we have adequate space and materials for everyone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summit 2008 ==&lt;br /&gt;
&lt;br /&gt;
=== Summit Overview ===&lt;br /&gt;
&lt;br /&gt;
The first OWASP ESAPI Summit was held December 9-11, 2008. It was hosted by Aspect Security in their Columbia, MD office.&lt;br /&gt;
&lt;br /&gt;
The following were the attendees of the Summit:&lt;br /&gt;
&lt;br /&gt;
*[[User:Jeff Williams|Jeff Williams]], Aspect Security - [[ESAPI|ESAPI Project Lead]]&lt;br /&gt;
*[[User:Wichers|Dave Wichers]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Ron Monzillo, Sun Microsystems - [http://java.sun.com/javaee/security/ Java EE Security Architect] &lt;br /&gt;
*[[User:Arshan|Arshan Dabirsiaghi]], Aspect Security - [[:Category:Intrinsic_Security_Working_Group|OWASP Intrisic Security Working Group Chair]]&lt;br /&gt;
*[[User:Jerryhoff|Jerry Hoff]], Aspect Security&lt;br /&gt;
*[[User:Mikehfauzy|Mike Fauzy]], Aspect Security&lt;br /&gt;
*[[User:Kevin.Fealey|Kevin Fealey]], Aspect Security - [[ESAPI Swingset|ESAPI Swingset Lead]]&lt;br /&gt;
*[[User:Jmanico|Jim Manico]], Aspect Security - [http://code.google.com/p/owasp-esapi-java/ ESAPI Java Committer]&lt;br /&gt;
*Steve Lavenhar, Booz Allen Hamilton&lt;br /&gt;
*Lian Jin, Booz Allen Hamilton&lt;br /&gt;
*John Steven, Cigital, Technical Director&lt;br /&gt;
*Joel Winstead, Cigital&lt;br /&gt;
*Alex Smolen, Foundstone - [[.NET ESAPI | ESAPI .NET Lead]]&lt;br /&gt;
*Andy Miller, Lockheed Martin&lt;br /&gt;
*John Munsch, Lockheed Martin&lt;br /&gt;
*Steve Christey, MITRE - [http://cve.mitre.org CVE]/[http://cwe.mitre.org CWE] Project Lead&lt;br /&gt;
&lt;br /&gt;
The following pages contain our thoughts/results from the summit.&lt;br /&gt;
&lt;br /&gt;
Summary: TODO&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Charter]]&lt;br /&gt;
* [[ESAPI Roadmap]]&lt;br /&gt;
* [[ESAPI Adoption Strategy]]&lt;br /&gt;
* [[ESAPI Framework Strategy]]&lt;br /&gt;
* [[ESAPI Assurance]]&lt;br /&gt;
* [[ESAPI Documentation]]&lt;br /&gt;
* [[ESAPI Marketing]]&lt;br /&gt;
* [[ESAPI Tooling]]&lt;br /&gt;
* [[ESAPI Static Analysis Support]]&lt;br /&gt;
* [[ESAPI Performance]]&lt;br /&gt;
* [[ESAPI Internationalization]]&lt;br /&gt;
* [[ESAPI Installation]]&lt;br /&gt;
&lt;br /&gt;
=== Design ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI API]]&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* [[ESAPI Validation]]&lt;br /&gt;
* [[ESAPI Canonicalization]]&lt;br /&gt;
* [[ESAPI Encoding]]&lt;br /&gt;
* [[ESAPI Authentication]]&lt;br /&gt;
* [[ESAPI Session Management]]&lt;br /&gt;
* [[ESAPI Access Control]]&lt;br /&gt;
* [[ESAPI Encryption]]&lt;br /&gt;
* [[ESAPI Randomizer]]&lt;br /&gt;
* [[ESAPI Error Handling]]&lt;br /&gt;
* [[ESAPI Logging]]&lt;br /&gt;
* [[ESAPI Intrusion Detection]]&lt;br /&gt;
* [[ESAPI HTTP Protection]]&lt;br /&gt;
* [[ESAPI Utilities]]&lt;br /&gt;
* [[ESAPI Filters]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:OWASP Enterprise Security API]]&lt;/div&gt;</summary>
		<author><name>Chris Schmidt</name></author>	</entry>

	</feed>