<?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=RoganDawes</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=RoganDawes"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/RoganDawes"/>
		<updated>2026-04-28T12:48:10Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:RoganDawes&amp;diff=156129</id>
		<title>User:RoganDawes</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:RoganDawes&amp;diff=156129"/>
				<updated>2013-07-28T13:05:05Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about Rogan Dawes&lt;br /&gt;
&lt;br /&gt;
=== OWASP Projects ===&lt;br /&gt;
&lt;br /&gt;
Rogan is the lead developer of the OWASP WebScarab, WebScarab-NG and OWASP Proxy projects. &lt;br /&gt;
He is also a contributor to the OWASP ESAPI project.&lt;br /&gt;
He has made substantial contributions to the OWASP WebGoat project.&lt;br /&gt;
Rogan can be contacted at rogan@dawes.za.net&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=147576</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=147576"/>
				<updated>2013-03-11T21:16:48Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Update canonical source for WebScarab&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
{{OWASP Breakers}}&lt;br /&gt;
= Main  =&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
The canonical source repository for WebScarab is at [https://github.com/OWASP/OWASP-WebScarab GitHub]. A zip archive of the tip of tree can be downloaded [https://github.com/OWASP/OWASP-WebScarab/archive/master.zip here].&lt;br /&gt;
&lt;br /&gt;
Historical Versions:&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download older builds of WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file [http://www.acsac.org/2007/downloads/t5-webscarab-instructions.pdf (complete installation instructions)])&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyzes a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies which can be found [http://yehg.net/lab/pr0js/training/webscarab.php here].&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Uncovering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here].&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
= Project About  =&lt;br /&gt;
&lt;br /&gt;
{{:Projects/OWASP WebScarab Project | Project About}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Project|WebScarab Project]] [[Category:OWASP_Tool]] [[Category:OWASP_Download]] [[Category:OWASP Release Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=112558</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=112558"/>
				<updated>2011-06-21T06:59:49Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Project Contributors */ Remove employer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
A quick explanation of the classes referenced is warranted.&lt;br /&gt;
&lt;br /&gt;
'''Server''' is a mostly trivial class that listens to an '''InetSocketAddress''', accepts connections and passes the accepted '''Socket''' on to implementations of the '''ConnectionHandler''' interface.&lt;br /&gt;
&lt;br /&gt;
'''HttpProxyConnectionHandler''' is a '''ConnectionHandler''' implementation that implements an HTTP Proxy, reading HTTP requests from a client, passes those on to an '''HttpRequestHandler''' to fetch the '''Response''', then relays that '''Response''' back to the client.&lt;br /&gt;
&lt;br /&gt;
'''DefaultHttpRequestHandler''' is just a simple implementation of the '''HttpRequestHandler''' interface, which makes use of the built-in custom HTTP Client to send the '''Request''' to the server, and obtain the '''Response'''. &lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses, without doing anything with them.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : &amp;quot; + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(&amp;quot;server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Constructing a reverse proxy==&lt;br /&gt;
&lt;br /&gt;
In essence, a proxy is just a server that already has a target. i.e. an InetSocketAddress that is automatically associated with all requests that it receives.&lt;br /&gt;
&lt;br /&gt;
 TargetedConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(&amp;quot;example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, httpProxy, target);&lt;br /&gt;
&lt;br /&gt;
===and adding SSL===&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(&amp;quot;example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, ssl, target);&lt;br /&gt;
&lt;br /&gt;
==SOCKS Proxies ROCK!==&lt;br /&gt;
&lt;br /&gt;
While HTTP proxies are the most commonly encountered, SOCKS proxies are better in many ways. For one, SOCKS proxies are expected to simply relay data from client to server, and are not expected to understand the data being proxied. This means that the client doesn't have to add any proxy-specific message headers, and the behaviour of the client is exactly the same as if there was no proxy involved at all. The server should find a browser connecting through a SOCKS proxy indistinguishable from one that is connecting directly without any proxy at all.&lt;br /&gt;
&lt;br /&gt;
This all means that if we want to be as transparent as possible in our interception, operating as a SOCKS proxy is the ideal approach. And it is trivial to do so:&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(httpProxy, true); // true -&amp;gt; autodetect SOCKS&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
==Putting it all together==&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(ssl, true);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
This constructs a SOCKS server, that will autodetect the SOCKS protocol, identify the target of the connection, autodetect an SSL connection, generate a suitable X.509 keypair and certificate, read HTTP messages from the client, relay them on to the targeted server, and return the responses to the client.&lt;br /&gt;
&lt;br /&gt;
All in just a few lines of code! WOW!&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Proyecto_WebScarab_OWASP&amp;diff=112557</id>
		<title>Proyecto WebScarab OWASP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Proyecto_WebScarab_OWASP&amp;diff=112557"/>
				<updated>2011-06-21T06:58:11Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Contribuyentes del proyecto */ Remove employer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
'''Bienvenido al proyecto WebScarab'''&lt;br /&gt;
&lt;br /&gt;
Webscarab es un marco de trabajo para analizar aplicaciónes web que se comunica usando los protocolos HTTP y HTTPS. Esta escrito en Java, por lo que es portable a muchas plataformas. WebScarac tiene muchos modos de operación, implementados por varios plugins. Su uso mas común es operar WebScarab como un proxy de intercepción, que permite al operador revisar y modificar las peticiones creadas por el navegador antes de que sean enviados al servidor, y para revisar y modificar respuestas enviadas por el servidor antes de que sean recividas por el navegador. Webscarab es capaz de interceptar comunicacion en HTTP y HTTPS. El operador puede tambien revisar las conversaciones (peticiones y respuestas) que hayan pasado por WebScarab.&lt;br /&gt;
&lt;br /&gt;
Usted puede tambien estar interesado en probar la [[OWASP WebScarab NG Project | nueva generación de WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Imagenes==&lt;br /&gt;
&lt;br /&gt;
Aqui está la ventana principal de WebScarab. Vea la guía de [[WebScarab Getting Started | inicio en WebScarab]] para mas imagenes de WebScarab en acción.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Introducción==&lt;br /&gt;
&lt;br /&gt;
No hay ningun gran boton rojo en WebScarab, es una herramienta diseñada principalmente para ser usada por personas que pueden escribir codigo por ellos mismos, or al menos tienen un muy buen conocimiento el protocolo HTTP. Si eso suena como a usted, Bienvenido! baje WebScarab, unase a la lista de distribución en la [http://lists.owasp.org/mailman/listinfo/owasp-webscarab pagina de suscripción de OWASP] y a disfrutar!. Puede leer este [[WebScarab Tutorial | pequeño tutorial ]] que explica la funcionalidad básica.&lt;br /&gt;
&lt;br /&gt;
WebScarab está diseñado para ser una herramienta que cualquiera que necesite exponer la funcionalidad de una aplicación basada en HTTP(S), ya sea para permitir al desarrollador depurar problemas difíciles o permitir a un especialista en seguridad identificar vulnerabilidades mientras la aplicacion está siendo diseñada o implementada.&lt;br /&gt;
&lt;br /&gt;
==Archivos==&lt;br /&gt;
&lt;br /&gt;
Puede bajar WebScarab desde el [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 centro de código fuente de OWASP en Sourceforge].  Luego instalelo como sigue:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: de doble clic al archivo Jar de instalación&lt;br /&gt;
&lt;br /&gt;
Puede encontrar un paquete de Mac OS X de la ultima version en la [http://research.corsaire.com/tools/ página de Corsaire].&lt;br /&gt;
&lt;br /&gt;
Puede probar también [http://dawes.za.net/rogan/webscarab/WebScarab.jnlp la version de Java Web Start], la cual ha sido firmada por Rogan Dawes.&lt;br /&gt;
&lt;br /&gt;
==Características==&lt;br /&gt;
&lt;br /&gt;
Un marco de trabajo sin ninguna función que no valga la pena, por supuesto, WebScarab provee un numero de plugins, cuyo objetivo principal, por el momento, es agregar funcionalidad de seguridad. Estos plugins incluyen:&lt;br /&gt;
&lt;br /&gt;
* Fragmentos - extraer los scripts y comentarios de las páginas HTML en el momento en que son vistar por el proxy y otros plugins.&lt;br /&gt;
&lt;br /&gt;
* Proxy - Observa el trafico entre el navegador y el servidor Web. El proxy de WebScarab es capaz de observar tanto HTTP como trafico HTTPS cifrado al negociar una conexión SSL entre WebScarab y el navegador en ves de simplemente conectar el navegador a el sevidor y permitir que un flujo de datos cifrado pase por él. Varios plugins del proxy has sido tambien desarrollados para permitir al operador controlar las peticiones y respuestas que pasan por el proxy.&lt;br /&gt;
&lt;br /&gt;
* Intercepción Manual - permite al usuario modificar peticiones y respuestas HTTP y HTTPS &amp;quot;al vuelo&amp;quot;, antes de que ellas alcancen el servidor o el navegador.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - permite la ejecucion de operaciones arbitrarias complejas en las peticiones y respuestas. Cualquier cosas que pueda ser expresada en Java puede ser ejecutada.&lt;br /&gt;
&lt;br /&gt;
* Revelar campos ocultos - algunas veces es mas fácil modificar un campo oculto en la página misma, mas que interceptar la peticion despues que ha sido enviada. Este plugin cambia todos los campos ocultos  encontrados en las páginas HTML a campos de texto, haciéndolos visibles y editables.&lt;br /&gt;
&lt;br /&gt;
* Simulador de ancho de banda - permite al usuario emular una red mas lenta, de manera que observe como se desempeña su sitio con es accedido, por ejemplo, desde un modem.&lt;br /&gt;
&lt;br /&gt;
* Araña (Spider) - identifica nuevas URLs en el sitio objetivo y obtiene e contenido cuando se le indica.&lt;br /&gt;
&lt;br /&gt;
* Peticiones manuales - permite editar y reenviar peticiones anteriores o la creación de peticiones nuevas completas.&lt;br /&gt;
&lt;br /&gt;
* Análisis de identificadores de sesión - recolecta y analiza un número de cookies (y eventualmente parametros en el URL tambien) para determinar visualmente el grado de aleatoriedad y predecibilidad.&lt;br /&gt;
&lt;br /&gt;
* Scripted - los operadores pueden usar BeanShell para escribir un script para create peticiones y obtenerlas del servidor. El script puede entonses realizar algunos análisis en las peticiones, con todo el poder del modelo de objetos de peticiones y respuestas de WebScarab para simplificar las cosas.&lt;br /&gt;
&lt;br /&gt;
* Ofuscador de parámetros - realiza la sustitución automatizada de valores en los parametros que es probable que muestre una validación incompleta de parámetros. que lleve a vulnerabilidades como Secuencia de comandos en sitios cruzados(XSS) o inyección de SQL.&lt;br /&gt;
&lt;br /&gt;
* Búsqueda - permite al usuario crear expresiones arbitrarias de BeanShell para identificar conversaciones que deben ser mostradas en la lista.&lt;br /&gt;
&lt;br /&gt;
* Comparación - calcula la distacia de edición en el cuerpo de la respuesta de la conversación observada y una conversación predeterminada. La distacia de edicion es &amp;quot;el número de ediciones requeridad para transformar un documento en otro&amp;quot;. Por razones de desempeño, las ediciones son calculadas usando testigos de palabras, mas que byte por byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - hay un plucing que interpreta WSDL, y presenta las varias funciones y los parámetros requeridas, permitiendo que sean editadas antes de que sean enviadas a el servidor.&lt;br /&gt;
&lt;br /&gt;
* Extensiones - automatiza las revisiones de archivos que fueron dejados por error en el directorio raiz del servidor (e.g. .bak, ~, etc). Las revisiones son realizadas en archivos y directorios (por ejemplo para /app/login.jsp se revisará /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Las extensiones para archivos y directorios pueden ser editados por el usuario.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - este plugin de análisis pasivo busca datos controlados por el usuario en los encabezados y cuerpo de las respuestas HTTP para identificar posibles inyecciones CRLF (partición de respuesta HTTP) y vulnerabilidades de secuencia de comandos en sitios cruzados (XSS).&lt;br /&gt;
&lt;br /&gt;
==Desarrollo futuro==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
Las características probablemente incluirán:&lt;br /&gt;
&lt;br /&gt;
* Un plugin de SOAP mejorado, mejorando el soporte para esquemas complejos y diferentes codificaciones&lt;br /&gt;
&lt;br /&gt;
* Combinar los plugins de búsqueda y comparación, de manera que podamos comparar solo respuestas específicas.&lt;br /&gt;
&lt;br /&gt;
==Estensibilidad==&lt;br /&gt;
&lt;br /&gt;
Dado que es un marco de trabajo, WebScarab es extendible. Cada característica arriba es implementada como un plugin y puede ser removido o remplazado. Las nuevas características pueden ser fácilmente implementados también. El cielo es el límite! Si tiene una buena idea para un plugin, por favor déjenos saber sobre ello en la lista.&lt;br /&gt;
&lt;br /&gt;
==Contribuyentes del proyecto==&lt;br /&gt;
&lt;br /&gt;
el proyecto WebScarab es administrado por Rogan Dawes. Él puede ser contactado en rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|WebScarab Proyecto]]&lt;br /&gt;
[[Category:OWASP Tool|Herramienta OWASP]]&lt;br /&gt;
[[Category:OWASP Download|Archivos OWASP]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=112556</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=112556"/>
				<updated>2011-06-21T06:56:43Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Project Contributors */ Remove employer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
A ZIP containing an up to date build of the master branch of the [http://dawes.za.net/gitweb.cgi?p=webscarab.git webscarab git tree] can be found [http://dawes.za.net/rogan/webscarab/#current here]. This file is rebuilt whenever new commits are pushed to the repository, and will always be the most up to date build of WebScarab available.&lt;br /&gt;
&lt;br /&gt;
A Mac OS X package of the latest version can usually be found on [http://research.corsaire.com/tools/ Corsaire's download page].&lt;br /&gt;
&lt;br /&gt;
Historical Versions:&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download older builds of WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file [http://www.acsac.org/2007/downloads/t5-webscarab-instructions.pdf (complete installation instructions)])&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyzes a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies which can be found [http://yehg.net/lab/pr0js/training/webscarab.php here].&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Uncovering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here].&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|WebScarab Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Release Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=88082</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=88082"/>
				<updated>2010-08-27T16:44:19Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Correct link to current build. Remove link to webstart version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
A ZIP containing an up to date build of the master branch of the [http://dawes.za.net/gitweb.cgi?p=webscarab.git webscarab git tree] can be found [http://dawes.za.net/rogan/webscarab/#current here]. This file is rebuilt whenever new commits are pushed to the repository, and will always be the most up to date build of WebScarab available.&lt;br /&gt;
&lt;br /&gt;
A Mac OS X package of the latest version can usually be found on [http://research.corsaire.com/tools/ Corsaire's download page].&lt;br /&gt;
&lt;br /&gt;
Historical Versions:&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download older builds of WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file [http://www.acsac.org/2007/downloads/t5-webscarab-instructions.pdf (complete installation instructions)])&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyzes a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies which can be found [http://yehg.net/lab/pr0js/training/webscarab.php here].&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Uncovering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here].&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|WebScarab Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Release Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80146</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80146"/>
				<updated>2010-03-18T20:25:30Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Putting it all together&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
A quick explanation of the classes referenced is warranted.&lt;br /&gt;
&lt;br /&gt;
'''Server''' is a mostly trivial class that listens to an '''InetSocketAddress''', accepts connections and passes the accepted '''Socket''' on to implementations of the '''ConnectionHandler''' interface.&lt;br /&gt;
&lt;br /&gt;
'''HttpProxyConnectionHandler''' is a '''ConnectionHandler''' implementation that implements an HTTP Proxy, reading HTTP requests from a client, passes those on to an '''HttpRequestHandler''' to fetch the '''Response''', then relays that '''Response''' back to the client.&lt;br /&gt;
&lt;br /&gt;
'''DefaultHttpRequestHandler''' is just a simple implementation of the '''HttpRequestHandler''' interface, which makes use of the built-in custom HTTP Client to send the '''Request''' to the server, and obtain the '''Response'''. &lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses, without doing anything with them.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(“server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Constructing a reverse proxy==&lt;br /&gt;
&lt;br /&gt;
In essence, a proxy is just a server that already has a target. i.e. an InetSocketAddress that is automatically associated with all requests that it receives.&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(“example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, httpProxy, target);&lt;br /&gt;
&lt;br /&gt;
===and adding SSL===&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(“example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, ssl, target);&lt;br /&gt;
&lt;br /&gt;
==SOCKS Proxies ROCK!==&lt;br /&gt;
&lt;br /&gt;
While HTTP proxies are the most commonly encountered, SOCKS proxies are better in many ways. For one, SOCKS proxies are expected to simply relay data from client to server, and are not expected to understand the data being proxied. This means that the client doesn't have to add any proxy-specific message headers, and the behaviour of the client is exactly the same as if there was no proxy involved at all. The server should find a browser connecting through a SOCKS proxy indistinguishable from one that is connecting directly without any proxy at all.&lt;br /&gt;
&lt;br /&gt;
This all means that if we want to be as transparent as possible in our interception, operating as a SOCKS proxy is the ideal approach. And it is trivial to do so:&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(httpProxy, true); // true -&amp;gt; autodetect SOCKS&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
==Putting it all together==&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(ssl, true);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
This constructs a SOCKS server, that will autodetect the SOCKS protocol, identify the target of the connection, autodetect an SSL connection, generate a suitable X.509 keypair and certificate, read HTTP messages from the client, relay them on to the targeted server, and return the responses to the client.&lt;br /&gt;
&lt;br /&gt;
All in just a few lines of code! WOW!&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80145</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80145"/>
				<updated>2010-03-18T20:24:23Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Put it all together&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
A quick explanation of the classes referenced is warranted.&lt;br /&gt;
&lt;br /&gt;
'''Server''' is a mostly trivial class that listens to an '''InetSocketAddress''', accepts connections and passes the accepted '''Socket''' on to implementations of the '''ConnectionHandler''' interface.&lt;br /&gt;
&lt;br /&gt;
'''HttpProxyConnectionHandler''' is a '''ConnectionHandler''' implementation that implements an HTTP Proxy, reading HTTP requests from a client, passes those on to an '''HttpRequestHandler''' to fetch the '''Response''', then relays that '''Response''' back to the client.&lt;br /&gt;
&lt;br /&gt;
'''DefaultHttpRequestHandler''' is just a simple implementation of the '''HttpRequestHandler''' interface, which makes use of the built-in custom HTTP Client to send the '''Request''' to the server, and obtain the '''Response'''. &lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses, without doing anything with them.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(“server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Constructing a reverse proxy==&lt;br /&gt;
&lt;br /&gt;
In essence, a proxy is just a server that already has a target. i.e. an InetSocketAddress that is automatically associated with all requests that it receives.&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(“example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, httpProxy, target);&lt;br /&gt;
&lt;br /&gt;
===and adding SSL===&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 InetSocketAddress target = new InetSocketAddress(“example.com&amp;quot;, 80);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Proxy proxy = new Proxy(listen, ssl, target);&lt;br /&gt;
&lt;br /&gt;
==SOCKS Proxies ROCK!==&lt;br /&gt;
&lt;br /&gt;
While HTTP proxies are the most commonly encountered, SOCKS proxies are better in many ways. For one, SOCKS proxies are expected to simply relay data from client to server, and are not expected to understand the data being proxied. This means that the client doesn't have to add any proxy-specific message headers, and the behaviour of the client is exactly the same as if there was no proxy involved at all. The server should find a browser connecting through a SOCKS proxy indistinguishable from one that is connecting directly without any proxy at all.&lt;br /&gt;
&lt;br /&gt;
This all means that if we want to be as transparent as possible in our interception, operating as a SOCKS proxy is the ideal approach. And it is trivial to do so:&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(httpProxy, true); // true -&amp;gt; autodetect SOCKS&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
Of course, adding SSL into the mix again is also trivial:&lt;br /&gt;
&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 ConnectionHandler socks = new SocksConnectionHandler(ssl, true);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 80);&lt;br /&gt;
 Server proxy = new Server(listen, socks);&lt;br /&gt;
&lt;br /&gt;
This constructs a SOCKS server, that will autodetect the SOCKS protocol, identify the target of the connection, autodetect an SSL connection, generate a suitable X.509 keypair and certificate, read HTTP messages from the client, relay them on to the targeted server, and return the responses to the client.&lt;br /&gt;
&lt;br /&gt;
All in just a few lines of code! WOW!&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80144</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80144"/>
				<updated>2010-03-18T20:07:39Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add some highlights&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
A quick explanation of the classes referenced is warranted.&lt;br /&gt;
&lt;br /&gt;
'''Server''' is a mostly trivial class that listens to an '''InetSocketAddress''', accepts connections and passes the accepted '''Socket''' on to implementations of the '''ConnectionHandler''' interface.&lt;br /&gt;
&lt;br /&gt;
'''HttpProxyConnectionHandler''' is a '''ConnectionHandler''' implementation that implements an HTTP Proxy, reading HTTP requests from a client, passes those on to an '''HttpRequestHandler''' to fetch the '''Response''', then relays that '''Response''' back to the client.&lt;br /&gt;
&lt;br /&gt;
'''DefaultHttpRequestHandler''' is just a simple implementation of the '''HttpRequestHandler''' interface, which makes use of the built-in custom HTTP Client to send the '''Request''' to the server, and obtain the '''Response'''. &lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses, without doing anything with them.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(“server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80143</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80143"/>
				<updated>2010-03-18T20:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Explain the classes involved&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
A quick explanation of the classes referenced is warranted.&lt;br /&gt;
&lt;br /&gt;
Server is a mostly trivial class that listens to an InetSocketAddress, accepts connections and passes the accepted Socket on to implementations of the ConnectionHandler interface.&lt;br /&gt;
&lt;br /&gt;
HttpProxyConnectionHandler is a ConnectionHandler implementation that implements an HTTP Proxy, reading HTTP requests from a client, passes those on to an HttpRequestHandler to fetch the Response, then relays that response back to the client.&lt;br /&gt;
&lt;br /&gt;
DefaultHttpRequestHandler is just a simple implementation of the HttpRequestHandler interface, which makes use of the built-in custom HTTP Client to send the Request to the server, and obtain the Response. &lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses, without doing anything with them.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(“server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80142</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80142"/>
				<updated>2010-03-18T19:59:44Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Adding SSL to a proxy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
This constructs a very simple interceptor that just prints out the resource path, and the size of the decoded content.&lt;br /&gt;
&lt;br /&gt;
==Can we add SSL intercept?==&lt;br /&gt;
&lt;br /&gt;
Absolutely!&lt;br /&gt;
&lt;br /&gt;
 char[] password = &amp;quot;password&amp;quot;.toCharArray();&lt;br /&gt;
 HttpConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 SSLContextSelector contextSelector = new DefaultServerContextSelector(“server.p12&amp;quot;, password, password);&lt;br /&gt;
 SSLConnectionHandler ssl = new SSLConnectionHandler(contextSelector, true, httpProxy);             // true -&amp;gt; autodetect SSL&lt;br /&gt;
 httpProxy.setConnectHandler(ssl);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
&lt;br /&gt;
This constructs an SSLConnectionHandler that automatically detects an incoming SSL connection based on the first few bytes read from the connection, negotiates an SSL Server connection with the client using the supplied certificate in the &amp;quot;server.p12&amp;quot; PKCS#12 file, then passes the decrypted connection on to the HttpProxyConnectionHandler. It also installs that same SSLConnectionHandler as the ConnectHandler of the HttpProxyConnectionHandler. i.e. when the HTTP Proxy receives a CONNECT request, after it is permitted, the raw byte stream is then passed back to the SSLConnectionHandler.&lt;br /&gt;
&lt;br /&gt;
===How can we avoid browser warnings about untrusted connections?===&lt;br /&gt;
&lt;br /&gt;
One problem with intercepting proxies that manifests when intercepting SSL connections is that traditionally the browser will present a warning to the user that the certificate used is invalid, and thus the connection is untrusted. In many cases, this is easily worked around by accepting the untrusted connection, and continuing, but for AJAX-y connections, there is no opportunity to accept that warning, and the site just ends up being non-functional.&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy includes a Sun JRE-specific class that uses Sun-internal classes to generate and sign a CA keypair and certificate, and then uses that to sign server-specific certificates. This means that if the CA certificate is imported into the browser, any further certificates signed by that CA certificate will automatically be trusted.&lt;br /&gt;
&lt;br /&gt;
 SSLContextSelector contextSelector = new AutoGeneratingContextSelector(&amp;quot;keystore&amp;quot;, &amp;quot;JKS&amp;quot;, password);&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80141</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80141"/>
				<updated>2010-03-18T19:38:12Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Provide up to date examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Using the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
===The Simplest Proxy===&lt;br /&gt;
&lt;br /&gt;
About the simplest proxy that you can write is as follows:&lt;br /&gt;
&lt;br /&gt;
 RequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
Of course, it is not terribly useful. All it does is forward requests and responses.&lt;br /&gt;
&lt;br /&gt;
===The Message Object Model===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the message object model, before we try to do something more complex.&lt;br /&gt;
&lt;br /&gt;
 public interface MessageHeader {&lt;br /&gt;
     byte[] getHeader();&lt;br /&gt;
     String getStartLine() throws MessageFormatException;&lt;br /&gt;
     NamedValue[] getHeaders() throws MessageFormatException;&lt;br /&gt;
     String getHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableMessageHeader {&lt;br /&gt;
     void setHeader(byte[] header);&lt;br /&gt;
     void setStartLine(String line) throws MessageFormatException;&lt;br /&gt;
     void setHeaders(NamedValue[] headers) throws MessageFormatException;&lt;br /&gt;
     void setHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     void addHeader(String name, String value) throws MessageFormatException;&lt;br /&gt;
     String deleteHeader(String name) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This shows the interface for a MessageHeader, and a mutable MessageHeader. These are the foundations for the other message classes. Everything is represented in a single byte[]. If you want to create a message header that uses a plain CR as a line separator, go ahead and construct a byte[] that has the lines separated by CR's, and call setHeader(). Of course, the convenience methods are configured to expect CRLF, and so if you call any of those methods, you should expect to receive a MessageFormatException, and be prepared to parse the header manually.&lt;br /&gt;
&lt;br /&gt;
===Message Content===&lt;br /&gt;
&lt;br /&gt;
 public interface StreamingMessage extends MutableMessageHeader {&lt;br /&gt;
     InputStream getContent();&lt;br /&gt;
     InputStream getDecodedContent() throws MessageFormatException;&lt;br /&gt;
     void setContent(InputStream content);&lt;br /&gt;
     void setDecodedContent(InputStream content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface BufferedMessage extends MessageHeader {&lt;br /&gt;
     byte[] getContent();&lt;br /&gt;
     byte[] getDecodedContent() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableBufferedMessage extends BufferedMessage, MutableMessageHeader {&lt;br /&gt;
     void setContent(byte[] content);&lt;br /&gt;
     void setDecodedContent(byte[] content) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above interfaces represent the content of an HTTP message, either in a streaming or buffered state. Streaming messages are useful if you only really want to look at the message header, and not do anything with the message body, or if you can process the message body in a streaming fashion. &lt;br /&gt;
&lt;br /&gt;
For example, you may want to compress a message transferred without gzip encoding. Update the message header to reflect the new encoding, wrap the content stream with a suitable GzipInputStream, and pass the message on to the next layer.&lt;br /&gt;
&lt;br /&gt;
Of course, if you want to do something complex with the message body, you probably want to work with the buffered content. In that case, the BufferedMessage and MutableBufferedMessage interfaces are appropriate.&lt;br /&gt;
&lt;br /&gt;
Note: There is a distinction between BufferedMessage and MutableBufferedMessage mainly as documentation indicating whether they should be modified or not in a particular method. See BufferedMessageInterceptor, for example.&lt;br /&gt;
&lt;br /&gt;
===Requests and Responses===&lt;br /&gt;
&lt;br /&gt;
This is what a Request header looks like. Again, there are convenience methods to obtain specific portions of the request, but underneath it all is that byte[] containing the entire header.&lt;br /&gt;
&lt;br /&gt;
 public interface RequestHeader extends MessageHeader {&lt;br /&gt;
     InetSocketAddress getTarget();&lt;br /&gt;
     boolean isSsl();&lt;br /&gt;
     String getMethod() throws MessageFormatException;&lt;br /&gt;
     String getResource() throws MessageFormatException;&lt;br /&gt;
     String getVersion() throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public interface MutableRequestHeader extends RequestHeader, MutableMessageHeader {&lt;br /&gt;
     void setTarget(InetSocketAddress target);&lt;br /&gt;
     void setSsl(boolean ssl);&lt;br /&gt;
     void setMethod(String method) throws MessageFormatException;&lt;br /&gt;
     void setResource(String resource) throws MessageFormatException;&lt;br /&gt;
     void setVersion(String version) throws MessageFormatException;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note that the target server and whether the message should be encrypted or not is external to the message header itself. In most cases, where no upstream proxy is involved, sending the request is as simple as opening a socket to the target InetSocketAddress, and calling write(message.getHeader()); Again, the minimum of parsing is performed, to allow for sending non-RFC compliant messages to a server.&lt;br /&gt;
&lt;br /&gt;
There are similar interfaces for Responses, although they do not have an associated target.&lt;br /&gt;
&lt;br /&gt;
==Intercepting HTTP Messages==&lt;br /&gt;
&lt;br /&gt;
OWASP Proxy provides a BufferingHttpRequestHandler class which interacts with implementations of the BufferedMessageInterceptor interface to facilitate manipulation of the request and response.&lt;br /&gt;
&lt;br /&gt;
This is what the BufferedMessageInterceptor interface looks like:&lt;br /&gt;
&lt;br /&gt;
 public interface BufferedMessageInterceptor {&lt;br /&gt;
 &lt;br /&gt;
     enum Action { BUFFER, STREAM, IGNORE};&lt;br /&gt;
 &lt;br /&gt;
     Action directRequest(MutableRequestHeader request);&lt;br /&gt;
     void processRequest(MutableBufferedRequest request);&lt;br /&gt;
     void requestContentSizeExceeded(BufferedRequest request, int size);&lt;br /&gt;
     void requestStreamed(BufferedRequest request);&lt;br /&gt;
 &lt;br /&gt;
     Action directResponse(RequestHeader request, MutableResponseHeader response)&lt;br /&gt;
     void processResponse(RequestHeader request, MutableBufferedResponse response)&lt;br /&gt;
     void responseContentSizeExceeded(RequestHeader request, ResponseHeader response, int size);&lt;br /&gt;
     void responseStreamed(final RequestHeader request, BufferedResponse response);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: BufferedMessageInterceptor is actually an abstract class, to save implementation of methods that you have no interest in.&lt;br /&gt;
&lt;br /&gt;
The first thing to do is decide which requests and responses your implementation is interested in. The &amp;quot;directRequest()&amp;quot; method is called first, with the RequestHeader as a parameter. Examine the request header to determine if the request is &amp;quot;interesting&amp;quot; or not. If you want the request content to be buffered, return Action.BUFFER. If you want the request content to be streamed to the server, return Action.STREAM. If you are not interested in any part of the request, you can return Action.IGNORE, and no further methods will be called for that particular Request/Response.&lt;br /&gt;
&lt;br /&gt;
Note that the RequestHeader is actually Mutable, so if you are only interested in the header, you can make any changes you like in this method, and then return either Action.STREAM or Action.IGNORE, and forget about it.&lt;br /&gt;
&lt;br /&gt;
The methods that will be invoked next depend on the Action that was returned. &lt;br /&gt;
&lt;br /&gt;
If the Action was BUFFER, the processRequest(MutableBufferedRequest) method will be called, with the buffered request as a parameter. You can then modify it to suit, and when you return from this method, the buffered request will be sent to the server.&lt;br /&gt;
&lt;br /&gt;
If the action was STREAM, the requestStreamed(BufferedRequest) method will be called. Note that this request is no longer mutable, as it is only invoked AFTER the entire request body has been streamed to the server.&lt;br /&gt;
&lt;br /&gt;
Note: BufferingHttpRequestHandler takes a &amp;quot;max content size&amp;quot; parameter, to avoid buffering excessively large messages, and potentially running out of memory. If the limit is reached, the requestContentSizeExceeded(BufferedRequest, size) method is invoked, with the BufferedRequest containing the bytes buffered up to the size limit, and the size parameter containing the ultimate size of the message.&lt;br /&gt;
&lt;br /&gt;
The same process is followed for the Response cycle. Determine if you are interested in the response, return a suitable Action, and handle the response in the appropriate methods thereafter.&lt;br /&gt;
&lt;br /&gt;
==Putting an intercepting proxy together==&lt;br /&gt;
&lt;br /&gt;
 HttpRequestHandler requestHandler = new DefaultHttpRequestHandler();&lt;br /&gt;
 BufferedMessageInterceptor interceptor = new BufferedMessageInterceptor() {&lt;br /&gt;
     public Action directResponse(RequestHeader request, MutableResponseHeader response) {&lt;br /&gt;
         return Action.BUFFER;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public void processResponse(RequestHeader request, MutableBufferedResponse response) {&lt;br /&gt;
         try {&lt;br /&gt;
             System.out.println(request.getResource() + &amp;quot; : “ + response.getDecodedContent().length);&lt;br /&gt;
         } catch (MessageFormatException mfe) {&lt;br /&gt;
             mfe.printStackTrace();&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 int maxContentSize = 10240;&lt;br /&gt;
 requestHandler = new BufferingHttpRequestHandler(requestHandler, interceptor, maxContentSize);&lt;br /&gt;
 ConnectionHandler httpProxy = new HttpProxyConnectionHandler(requestHandler);&lt;br /&gt;
 InetSocketAddress listen = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 8008);&lt;br /&gt;
 Server proxy = new Server(listen, httpProxy);&lt;br /&gt;
 proxy.start();&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80138</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=80138"/>
				<updated>2010-03-18T18:52:08Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Implementation details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Project Information:OWASP Proxy Project}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message header is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is represented as either a byte[] for the header, and an InputStream for the content, or a byte[] for the header, and a (possibly null) byte[] for the message content.&lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding performed.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Extending the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
The basic classes are Listener and SocksListener, which can be customised to add your own functionality. If you just create an instance of Listener (or SocksListener), it will accept connections on the specified port, and relay them to the requested destination.&lt;br /&gt;
&lt;br /&gt;
    Listener l = new Listener(8008); // listens to localhost by default&lt;br /&gt;
    Listener sl = new SocksListener(1080);&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
    Listener l = new Listener(InetAddress.getByAddress(new byte[] { 127, 0,&lt;br /&gt;
                    0, 1 }), 8008);&lt;br /&gt;
    Listener sl = new SocksListener(InetAddress.getByAddress(new byte[] { 127, 0,&lt;br /&gt;
                    0, 1 }), 1080);&lt;br /&gt;
&lt;br /&gt;
The first thing a developer might want to do is make some changes to the request or response. This is done by means of a ProxyMonitor. This is an abstract class that can be extended to provide the specific functionality required. I'll show it here as an interface, just to reduce verbosity.&lt;br /&gt;
&lt;br /&gt;
    Response requestReceived(Request request)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorReadingRequest(Request request, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    boolean responseHeaderReceived(Conversation conversation)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void responseContentReceived(Conversation conversation, boolean streamed)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorFetchingResponseHeader(Request request, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorFetchingResponseContent(Conversation conversation, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void wroteResponseToBrowser(Conversation conversation)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void errorWritingResponseToBrowser(Conversation conversation,&lt;br /&gt;
        Exception e) throws MessageFormatException;&lt;br /&gt;
&lt;br /&gt;
These methods are called at various stages of a request's lifecycle, if appropriate. Obviously error methods won't be called if there are no errors! Each method that returns a Response object can be customized to return a custom Response to the browser. e.g. overriding requestReceived(Request) can allow a developer to provide a browser-based interface to their program, by returning Response objects for specific requests, e.g. to a host called &amp;quot;proxy&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    public Response requestReceived(Request request)&lt;br /&gt;
        throws MessageFormatException {&lt;br /&gt;
        if (request.getHost().equals(&amp;quot;proxy&amp;quot;)) {&lt;br /&gt;
            return handleRequest(request);&lt;br /&gt;
        }&lt;br /&gt;
        return super.requestReceived(request);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
The library provides a LoggingProxyMonitor class, which simply logs the Requests and Responses that pass through. It also prints out any exceptions that may occur (not shown).&lt;br /&gt;
&lt;br /&gt;
    class LoggingProxyMonitor extends ProxyMonitor {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public void wroteResponseToBrowser(Conversation conversation)&lt;br /&gt;
                throws MessageFormatException {&lt;br /&gt;
            try {&lt;br /&gt;
                int resp = conversation.getResponse().getMessage().length;&lt;br /&gt;
                long time = conversation.getResponseBodyTime()&lt;br /&gt;
                        - conversation.getRequestTime();&lt;br /&gt;
    &lt;br /&gt;
                Request request = conversation.getRequest();&lt;br /&gt;
                StringBuilder buff = new StringBuilder();&lt;br /&gt;
                buff.append(request.getMethod()).append(&amp;quot; &amp;quot;);&lt;br /&gt;
                buff.append(request.isSsl() ? &amp;quot;ssl &amp;quot; : &amp;quot;&amp;quot;);&lt;br /&gt;
                buff.append(request.getHost()).append(&amp;quot;:&amp;quot;)&lt;br /&gt;
                        .append(request.getPort());&lt;br /&gt;
                buff.append(request.getResource()).append(&amp;quot; &amp;quot;);&lt;br /&gt;
                buff.append(conversation.getResponse().getStatus()).append(&amp;quot; - &amp;quot;)&lt;br /&gt;
                        .append(resp);&lt;br /&gt;
                buff.append(&amp;quot; bytes in &amp;quot;).append(time).append(&amp;quot;(&amp;quot;).append(&lt;br /&gt;
                        resp / (time * 1000));&lt;br /&gt;
                buff.append(&amp;quot; bps)&amp;quot;);&lt;br /&gt;
                System.out.println(buff.toString());&lt;br /&gt;
            } catch (MessageFormatException mfe) {&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
One thing that a developer might want to do is teach the proxy how to use an upstream proxy to reach the target. OWASP Proxy uses the standard Java ProxySelector mechanism for this:&lt;br /&gt;
&lt;br /&gt;
    final Proxy upstream = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port);&lt;br /&gt;
    &lt;br /&gt;
    final ProxySelector ps = new ProxySelector() {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {&lt;br /&gt;
            System.err.println(&amp;quot;Proxy connection failed! &amp;quot;&lt;br /&gt;
                    + ioe.getLocalizedMessage());&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public List&amp;lt;Proxy&amp;gt; select(URI uri) {&lt;br /&gt;
            return Arrays.asList(upstream);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
Having created the ProxySelector, we need to make use of it. OWASP Proxy has its own Http Client implementation, that specifically makes NO unnecessary changes to the requests or responses. Some libraries try to make sure that the requests it sends are well-formed, for instance, but for a security tool, sometimes it is interesting to send malformed requests.&lt;br /&gt;
&lt;br /&gt;
So, we can tell the Listener how to configure its HttpClient implementations, by providing a customised HttpClientFactory:&lt;br /&gt;
&lt;br /&gt;
    HttpClientFactory hcf = new DefaultHttpClientFactory() {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public HttpClient createHttpClient() {&lt;br /&gt;
            HttpClient client = super.createHttpClient();&lt;br /&gt;
            client.setProxySelector(ps);&lt;br /&gt;
            return client;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    listener.setHttpClientFactory(hcf);&lt;br /&gt;
&lt;br /&gt;
By default, OWASP Proxy does not intercept SSL connections (HTTP CONNECT verb), and if it encounters an SSL encrypted channel, it simply refuses to continue. Developers can enable SSL interception by providing a CertificateProvider implementation.&lt;br /&gt;
&lt;br /&gt;
This is what the interface looks like:&lt;br /&gt;
&lt;br /&gt;
    public interface CertificateProvider {&lt;br /&gt;
    &lt;br /&gt;
        SSLSocketFactory getSocketFactory(String host, int port) throws IOException;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
A simple implementation is provided in DefaultCertificateProvider that makes use of a single certificate for all connection attempts. A certificate location and passwords can be provided; alternatively, OWASP Proxy's default certificate can be used.&lt;br /&gt;
&lt;br /&gt;
    listener.setCertificateProvider(new DefaultCertificateProvider());&lt;br /&gt;
&lt;br /&gt;
Developers may wish to make use of something like the CyberVillains CA library to automatically generate certificates on the fly for each site visited.&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|Proxy Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Alpha Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_WebScarab_Project&amp;diff=73753</id>
		<title>GPC Project Details/OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GPC_Project_Details/OWASP_WebScarab_Project&amp;diff=73753"/>
				<updated>2009-11-20T13:12:10Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Filled in a couple of details&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 WebScarab Project &lt;br /&gt;
| project_description = WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms.&lt;br /&gt;
| project_license = GPL&lt;br /&gt;
| leader_name = Rogan Dawes&lt;br /&gt;
| leader_email = rogan@dawes.za.net&lt;br /&gt;
| leader_username = RoganDawes&lt;br /&gt;
| past_leaders_special_contributions = &lt;br /&gt;
| maintainer_name = &lt;br /&gt;
| maintainer_email = &lt;br /&gt;
| maintainer_username =  &lt;br /&gt;
| contributor_name1 = &lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 =  &lt;br /&gt;
| contributor_name2 = &lt;br /&gt;
| contributor_email2 = &lt;br /&gt;
| contributor_username2 = &lt;br /&gt;
| contributor_name3 = &lt;br /&gt;
| contributor_email3 = &lt;br /&gt;
| contributor_username3 = &lt;br /&gt;
| contributor_name4 = &lt;br /&gt;
| contributor_email4 = &lt;br /&gt;
| contributor_username4 = &lt;br /&gt;
| contributor_name5 = &lt;br /&gt;
| contributor_email5 = &lt;br /&gt;
| contributor_username5 = &lt;br /&gt;
| contributor_name6 = &lt;br /&gt;
| contributor_email6 = &lt;br /&gt;
| contributor_username6 = &lt;br /&gt;
| contributor_name7 = &lt;br /&gt;
| contributor_email7 = &lt;br /&gt;
| contributor_username7 = &lt;br /&gt;
| contributor_name8 = &lt;br /&gt;
| contributor_email8 = &lt;br /&gt;
| contributor_username8 = &lt;br /&gt;
| contributor_name9 = &lt;br /&gt;
| contributor_email9 = &lt;br /&gt;
| contributor_username9 = &lt;br /&gt;
| contributor_name10 = &lt;br /&gt;
| contributor_email10 = &lt;br /&gt;
| contributor_username10 =  &lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
| presentation_link =&lt;br /&gt;
| mailing_list_name = owasp-webscarab@lists.owasp.org&lt;br /&gt;
| links_url1 = &lt;br /&gt;
| links_name1 = &lt;br /&gt;
| links_url2 = &lt;br /&gt;
| links_name2 = &lt;br /&gt;
| links_url3 = &lt;br /&gt;
| links_name3 = &lt;br /&gt;
| links_url4 = &lt;br /&gt;
| links_name4 = &lt;br /&gt;
| links_url5 = &lt;br /&gt;
| links_name5 = &lt;br /&gt;
| links_url6 = &lt;br /&gt;
| links_name6 = &lt;br /&gt;
| links_url7 = &lt;br /&gt;
| links_name7 = &lt;br /&gt;
| links_url8 = &lt;br /&gt;
| links_name8 = &lt;br /&gt;
| links_url9 = &lt;br /&gt;
| links_name9 = &lt;br /&gt;
| links_url10 = &lt;br /&gt;
| links_name10 = &lt;br /&gt;
| project_road_map = :Category:OWASP WebScarab Project - Roadmap&lt;br /&gt;
| project_health_status = Inactive&lt;br /&gt;
| current_release_name = First Release&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 = :Category:OWASP WebScarab Project - First Release&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;
| last_reviewed_release_details =&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 = 2/10/2009&lt;br /&gt;
| GPC_Notes = Empty template&lt;br /&gt;
| project_home_page = Category:OWASP_WebScarab_Project &lt;br /&gt;
| project_details_wiki_page = GPC_Project_Details/OWASP_WebScarab_Project&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Projects_and_Tools_Committee_-_Application_2&amp;diff=60159</id>
		<title>Global Projects and Tools Committee - Application 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Projects_and_Tools_Committee_-_Application_2&amp;diff=60159"/>
				<updated>2009-05-05T13:32:34Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add support&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;Brad Causey&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 OpenPGP Extensions for HTTP Reviewer&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;|Global Projects and Tools 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;|Arturo Busleiman (a.k.a Buanzo)&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader&lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Brad is an exceptional individual, a through professional. OWASP would only get better with him in the Projects and Tools Committee. I met him during OWASP EU Summit 2008 in Portugal. Matt Tesauro, himself and I worked together to give a presentation on security at the Algarve University with &amp;lt; 12 hours to spare. Brad is great at getting feedback, combining ideas. A must.&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;|Rogan Dawes&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader&lt;br /&gt;
 | style=&amp;quot;width:57%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|I think Brad would make an excellent addition to the Committee. He is an exceptional individual, technically excellent as well as committed to ensuring the success of OWASP.&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;|&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;
 | 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;|&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;
 | 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>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Project_Information:template_SKAVENGER_-_Final_Review_-_First_Reviewer_-_D&amp;diff=55608</id>
		<title>Project Information:template SKAVENGER - Final Review - First Reviewer - D</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Project_Information:template_SKAVENGER_-_Final_Review_-_First_Reviewer_-_D&amp;diff=55608"/>
				<updated>2009-02-27T12:14:01Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Completion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Project Information:template SKAVENGER|Click here to return to the previous page]].&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;3&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;'''FINAL REVIEW''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:white&amp;quot; align=&amp;quot;center&amp;quot;|'''PART I''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:white&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
'''Project Deliveries &amp;amp; Objectives ''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|Skavenger Project's Deliveries &amp;amp; Objectives]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#4058A0&amp;quot; align=&amp;quot;center&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''QUESTIONS''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#4058A0&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''ANSWERS'''  &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
1. At what extent have the project deliveries &amp;amp; objectives been accomplished?  Having in consideration [[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|'''the assumed ones''']], please exemplify writing down those of them that haven't been realised.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
2. At what extent have the project deliveries &amp;amp; objectives been accomplished?  Having in consideration [[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|'''the assumed ones''']], please quantify in terms of percentage.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- 100%&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
3. Please do use the right hand side column to provide advice and make work suggestions.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- Since the targeted proxies are mostly (all?) Java based, would it not make sense to port the analysis portion of Skavenger from Perl to Java, facilitating integration?&lt;br /&gt;
 | style=&amp;quot;width:25%; background:white&amp;quot; align=&amp;quot;center&amp;quot;|'''PART II''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:white&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
'''Assessment Criteria'''&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[:Category:OWASP Project Assessment|OWASP Project Assessment Criteria]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#4058A0&amp;quot; align=&amp;quot;center&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''QUESTIONS''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#4058A0&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''ANSWERS'''  &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
1. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Alpha Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
2. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Beta Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
3. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Release Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |-  None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
4. Please do use the right hand side column to provide advice and make work suggestions. &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Project_Information:template_SKAVENGER_-_Final_Review_-_First_Reviewer_-_D&amp;diff=55603</id>
		<title>Project Information:template SKAVENGER - Final Review - First Reviewer - D</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Project_Information:template_SKAVENGER_-_Final_Review_-_First_Reviewer_-_D&amp;diff=55603"/>
				<updated>2009-02-27T11:34:59Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: completion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Project Information:template SKAVENGER|Click here to return to the previous page]].&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;3&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;'''FINAL REVIEW''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:white&amp;quot; align=&amp;quot;center&amp;quot;|'''PART I''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:white&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
'''Project Deliveries &amp;amp; Objectives ''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|Skavenger Project's Deliveries &amp;amp; Objectives]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#4058A0&amp;quot; align=&amp;quot;center&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''QUESTIONS''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#4058A0&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''ANSWERS'''  &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
1. At what extent have the project deliveries &amp;amp; objectives been accomplished?  Having in consideration [[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|'''the assumed ones''']], please exemplify writing down those of them that haven't been realised.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- From my assessment of Skavenger, all project objectives have been met.&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
2. At what extent have the project deliveries &amp;amp; objectives been accomplished?  Having in consideration [[OWASP Summer of Code 2008 Applications - Need Futher Clarifications#Skavenger|'''the assumed ones''']], please quantify in terms of percentage.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- 100%&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
3. Please do use the right hand side column to provide advice and make work suggestions.&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- It seems that the majority (all?) of proxies targeted by Skavenger are Java based. Consequently, it would make sense to reimplement the Skavenger core in Java to facilitate integration with the targeted proxies.&lt;br /&gt;
 | style=&amp;quot;width:25%; background:white&amp;quot; align=&amp;quot;center&amp;quot;|'''PART II''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:white&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
'''Assessment Criteria'''&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[:Category:OWASP Project Assessment|OWASP Project Assessment Criteria]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#4058A0&amp;quot; align=&amp;quot;center&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''QUESTIONS''' &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#4058A0&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt;'''ANSWERS'''  &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
1. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Alpha Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
2. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Beta Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |- None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
3. Having into consideration the [[:Category:OWASP Project Assessment|OWASP Project Assessment Methodology]] which criteria, if any, haven’t been fulfilled in terms of '''Release Quality''' status?&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
 |-  None&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
4. Please do use the right hand side column to provide advice and make work suggestions. &lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:75%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=55366</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=55366"/>
				<updated>2009-02-24T16:28:51Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add a link to a continuous build product&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
A ZIP containing an up to date build of the master branch of the [http://dawes.za.net/gitweb.cgi?p=rogan/webscarab/webscarab.git;a=shortlog;h=refs/heads/master webscarab git tree] can be found [http://dawes.za.net/rogan/webscarab/webscarab-current.zip here]. This ZIP is rebuilt whenever new commits are pushed to the repository, and will always be the most up to date build of WebScarab available.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download older builds of WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file [http://www.acsac.org/2007/downloads/t5-webscarab-instructions.pdf (complete installation instructions)])&lt;br /&gt;
&lt;br /&gt;
A Mac OS X package of the latest version can usually be found on [http://research.corsaire.com/tools/ Corsaire's download page].&lt;br /&gt;
&lt;br /&gt;
You can also try the [http://dawes.za.net/rogan/webscarab/WebScarab.jnlp  Java Web Start version], which was signed by Rogan Dawes.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyses a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies which can be found [http://yehg.net/lab/pr0js/training/webscarab.php here].&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Uncovering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here].&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Release Quality Tool]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Skavenger_Project_-_Assessment_Frame&amp;diff=54205</id>
		<title>Category:OWASP Skavenger Project - Assessment Frame</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Skavenger_Project_-_Assessment_Frame&amp;diff=54205"/>
				<updated>2009-02-13T19:42:52Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Final review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[:Category:OWASP Skavenger Project|Click here to return to project's main page]].&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;'''PROJECT IDENTIFICATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Project 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;'''OWASP Skavenger Project''' &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;5&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|ASSESSMENT AND REVIEW PROCESS - OWASP Summer of Code 2008&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#6C82B5&amp;quot; align=&amp;quot;center&amp;quot;|'''Reviewer''' &lt;br /&gt;
 | style=&amp;quot;width:21%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Author's Self Evaluation'''&amp;lt;br&amp;gt;[[User:Mrohr|'''Matthias Rohr''']]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''First Reviewer'''&amp;lt;br&amp;gt;[[:User:RoganDawes|'''Rogan Dawes''']]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Second Reviewer'''&amp;lt;br&amp;gt;[[:User:Achim|'''Achim Hoffmann''']]&lt;br /&gt;
 | style=&amp;quot;width:22%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''OWASP Board Member'''&amp;lt;br&amp;gt;Non applicable&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''50% Review''' &lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER - 50 Review - Self Evaluation - A|Self - Evaluation (A)]]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER - 50 Review - First Reviewer - C|First Reviewer (C)]]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER 50 Review Second Review E|Second Reviewer (E)]]&lt;br /&gt;
 | style=&amp;quot;width:22%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|X &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Final Review''' &lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;Which status has been reached?&amp;lt;br&amp;gt;'''Beta Quality'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER - Final Review - Self Evaluation - B|Self - Evaluation (B)]]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;Which status has been reached?&amp;lt;br&amp;gt;'''Beta Quality'''&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER - Final Review - First Reviewer - D|First Reviewer (D)]]&lt;br /&gt;
 | style=&amp;quot;width:21%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Objectives &amp;amp; Deliveries reached?&amp;lt;br&amp;gt;'''Yes/No''' (To update)&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;Which status has been reached?&amp;lt;br&amp;gt;'''Season of Code''' - (To update)&amp;lt;br&amp;gt;---------&amp;lt;br&amp;gt;[[Project Information:template SKAVENGER - Final Review - Second Reviewer - F|Second Reviewer (F)]]&lt;br /&gt;
 | style=&amp;quot;width:22%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|X&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Project_Information:OWASP_Proxy_Project&amp;diff=52519</id>
		<title>Project Information:OWASP Proxy Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Project_Information:OWASP_Proxy_Project&amp;diff=52519"/>
				<updated>2009-01-30T17:47:41Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add a link to a source snapshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;'''PROJECT INFORMATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Project Name'''&lt;br /&gt;
 | colspan=&amp;quot;7&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;'''OWASP Proxy Project'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Project Description''' &lt;br /&gt;
 | colspan=&amp;quot;7&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
The OWASP Proxy aims to provide a high quality intercepting proxy library which can be used by developers who require this functionality in their own programs, rather than having to develop it all from scratch.&lt;br /&gt;
&lt;br /&gt;
The library is developed in Java, making it most attractive to Java developers obviously, but also accessible to Python (Jython) and Ruby (JRuby) developers as well.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
'''Key Project Information'''&lt;br /&gt;
 | style=&amp;quot;width:14%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Leader&amp;lt;br&amp;gt;[[:User:RoganDawes|'''Rogan Dawes''']]&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Contibutors&amp;lt;br&amp;gt;[[:User:name|'''Add name''']]&lt;br /&gt;
 | style=&amp;quot;width:10%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Mailing List&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-proxy-project '''Subscribe here''']&amp;lt;br&amp;gt;[mailto:owasp-proxy-project@lists.owasp.org '''Use here''']&lt;br /&gt;
 | style=&amp;quot;width:17%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
License&amp;lt;br&amp;gt;[http://creativecommons.org/licenses/by-sa/3.0/ '''Creative Commons Attribution Share Alike 3.0''']&lt;br /&gt;
 | style=&amp;quot;width:14%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Type&amp;lt;br&amp;gt;[[:Category:OWASP_Project#Alpha_Status_Projects|'''Tool''']]&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Sponsors&amp;lt;br&amp;gt;if any, add link&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;
 ! 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;'''Release Status''' &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;'''Main Links'''&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;'''Related Projects''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:29%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
'''[[:Category:OWASP Project Assessment#Alpha Quality Tool Criteria|Alpha Quality]]'''&amp;lt;br&amp;gt;(under review)&amp;lt;br&amp;gt;[[:OWASP Proxy Project - Assessment Frame|Please see here for complete information.]]&lt;br /&gt;
 | style=&amp;quot;width:42%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&amp;lt;br&amp;gt;An up to date snapshot can be obtained [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=snapshot;h=HEAD;sf=tgz here].&lt;br /&gt;
 | style=&amp;quot;width:29%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
*  [[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
*  [[:Category:OWASP CSRFTester Project|CSRFTester]]&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Project_Information:OWASP_Proxy_Project&amp;diff=52516</id>
		<title>Project Information:OWASP Proxy Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Project_Information:OWASP_Proxy_Project&amp;diff=52516"/>
				<updated>2009-01-30T17:25:05Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: add links to related projects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;'''PROJECT INFORMATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Project Name'''&lt;br /&gt;
 | colspan=&amp;quot;7&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;'''OWASP Proxy Project'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Project Description''' &lt;br /&gt;
 | colspan=&amp;quot;7&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
The OWASP Proxy aims to provide a high quality intercepting proxy library which can be used by developers who require this functionality in their own programs, rather than having to develop it all from scratch.&lt;br /&gt;
&lt;br /&gt;
The library is developed in Java, making it most attractive to Java developers obviously, but also accessible to Python (Jython) and Ruby (JRuby) developers as well.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
'''Key Project Information'''&lt;br /&gt;
 | style=&amp;quot;width:14%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Leader&amp;lt;br&amp;gt;[[:User:RoganDawes|'''Rogan Dawes''']]&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Contibutors&amp;lt;br&amp;gt;[[:User:name|'''Add name''']]&lt;br /&gt;
 | style=&amp;quot;width:10%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Mailing List&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-proxy-project '''Subscribe here''']&amp;lt;br&amp;gt;[mailto:owasp-proxy-project@lists.owasp.org '''Use here''']&lt;br /&gt;
 | style=&amp;quot;width:17%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
License&amp;lt;br&amp;gt;[http://creativecommons.org/licenses/by-sa/3.0/ '''Creative Commons Attribution Share Alike 3.0''']&lt;br /&gt;
 | style=&amp;quot;width:14%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Project Type&amp;lt;br&amp;gt;[[:Category:OWASP_Project#Alpha_Status_Projects|'''Tool''']]&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
Sponsors&amp;lt;br&amp;gt;if any, add link&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;
 ! 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;'''Release Status''' &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;'''Main Links'''&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;'''Related Projects''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:29%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
'''[[:Category:OWASP Project Assessment#Alpha Quality Tool Criteria|Alpha Quality]]'''&amp;lt;br&amp;gt;(under review)&amp;lt;br&amp;gt;[[:OWASP Proxy Project - Assessment Frame|Please see here for complete information.]]&lt;br /&gt;
 | style=&amp;quot;width:42%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
 | style=&amp;quot;width:29%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
*  [[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
*  [[:Category:OWASP CSRFTester Project|CSRFTester]]&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Generating_Custom_SSL_Certificates_for_WebScarab&amp;diff=50491</id>
		<title>Generating Custom SSL Certificates for WebScarab</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Generating_Custom_SSL_Certificates_for_WebScarab&amp;diff=50491"/>
				<updated>2009-01-09T10:15:00Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Fix up some phrasing, removed the embedded copy of the script, make sure that the link always points to the latest version in the repo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When using WebScarab to proxy SSL conversations, you may want to avoid the somewhat annoying warnings for an unrecognized certificate.  You can generate a custom SSL certificate to remove these warning messages and it's rather straight forward if you have a sufficiently recent version of WebScarab (initial support was added on 2008/08/05).  Read on to see how. &lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
Below is an illustration of what happens when WebScarab is used as a intercepting proxy for SSL connections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; --------           -----------           ---------&lt;br /&gt;
| server |&amp;lt;--[1]--&amp;gt;| WebScarab |&amp;lt;--[2]--&amp;gt;| browser |&lt;br /&gt;
 --------           -----------           ---------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For [1], you are using the &amp;quot;real&amp;quot; SSL certificate from the website you are browsing to.  That SSL certificate is signed by a recognized certificate authority (CA).  The thing that makes those CA's special is that browsers know about them and trust them.  For example in Firefox:&lt;br /&gt;
# Open Edit -&amp;gt; Preferences -&amp;gt; Advanced -&amp;gt; Encryption&lt;br /&gt;
# View Certificates button&lt;br /&gt;
# Authorities tab&lt;br /&gt;
to see a list of built-in trusted CA's.&lt;br /&gt;
The only thing that needs to trust this certificate is WebScarab, which trusts all certificates, whether valid or not.&lt;br /&gt;
&lt;br /&gt;
For [2], you are using the the self-signed server.p12 certificate which comes with WebScarab. The difference between [1] and [2] is that the&lt;br /&gt;
CA which signed that certs is NOT built into browsers so they do not trust them by default.  Additionally, the domain name of this certificate will not match the domain your browser is accessing.  The default is the webscarab CA and a host name of webscarab.&lt;br /&gt;
&lt;br /&gt;
== Generating a Certificate ==&lt;br /&gt;
&lt;br /&gt;
Since your browser doesn't trust the CA which signed server.p12 in [2] above, you've got two choices:&lt;br /&gt;
# Instruct the browser to trust the certificate.  This will work for the CA part but not for the host name.  You will still be prompted by the browser so this doesn't really help much, and is not advised anyway, due to the fact that lots of people have this CA cert, and could use it to create SSL certificate for arbitrary sites. I know that you can have Firefox trust the CA used in [2] permanently - though it's a bunch of clicks in Firefox 3 - about 6 or 7 clicks and you still have the host name mis-match issue.&lt;br /&gt;
&lt;br /&gt;
# Use a .p12 file &amp;amp; CA certificate.  You'll have to have WebScarab use the new .p12 file and install the CA certificate into your browser.&lt;br /&gt;
&lt;br /&gt;
There is a script to do this in the WebScarab Git repository.  You can get it [http://dawes.za.net/gitweb.cgi?p=rogan/webscarab/webscarab.git;a=blob;f=doc/cert.sh;hb=master here].&lt;br /&gt;
&lt;br /&gt;
The script will create a server-specific key and certificate for the site provided as a parameter on the command line. If this is the first time the script is being run, it will also create a CA cert which you can then import into your browser(s).&lt;br /&gt;
&lt;br /&gt;
If you called that script like:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ ./cert.sh www.example.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will generate a bunch of output and create a www.example.com.p12 file for WebScarab and a ca_cert.pem file (this is the CA used to sign www.example.com.p12).  The script will run fine on Linux (I just tried it) and possibly OS X but will only work on Windows under Cygwin.&lt;br /&gt;
&lt;br /&gt;
Take the www.example.com.p12 (assuming you ran the script like above) and let WebScarab know about it.  To do this you will need to place it in ${WEBSCARAB_HOME}/certs/.  WebScarab checks in that directory whenever a request is made for an SSL site, for a file &amp;lt;sitename&amp;gt;.p12, and will use it in preference to the default server cert if one is found.&lt;br /&gt;
&lt;br /&gt;
Take the ca_cert.pem file and configure your browser to trust that CA.  For Firefox:&lt;br /&gt;
# Open Edit -&amp;gt; Preferences -&amp;gt; Advanced -&amp;gt; Encryption&lt;br /&gt;
# View Certificates button&lt;br /&gt;
# Authorities&lt;br /&gt;
# Click the Import button and navigate to the ca_cert.pem file&lt;br /&gt;
&lt;br /&gt;
Make sure you at least check the box &amp;quot;Trust this CA to identify web sites.&amp;quot; option when you are importing - it will bring up a window with that information.&lt;br /&gt;
&lt;br /&gt;
For IE, I don't know off the top of my head.  Try this [http://www.library.jcu.edu.au/LibraryGuides/certificate.shtml link] except for instead of downloading it you can right-click on the ca_cert.pem file and select &amp;quot;Install Certificate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FYI:  Firefox and IE will both need to be configured if both are used as they keep their lists of trusted CAs in different places.&lt;br /&gt;
&lt;br /&gt;
'''Added Bonus'''&lt;br /&gt;
If you keep the working directory for cert.sh (recommended!), you can create new custom SSL certificates and not need to import a new CA cert. If you know all the domains you'll be testing, you can run cert.sh multiple times and just restart WebScarab once to get them all recognized.&lt;br /&gt;
&lt;br /&gt;
For the curious, this is the directory structure the cert.sh script creates:&lt;br /&gt;
&amp;lt;pre&amp;gt;./&lt;br /&gt;
|-- cert.sh&lt;br /&gt;
|-- sslcerts&lt;br /&gt;
|   |-- ca_cert.pem&lt;br /&gt;
|   |-- certindex.txt&lt;br /&gt;
|   |-- certindex.txt.attr&lt;br /&gt;
|   |-- certindex.txt.old&lt;br /&gt;
|   |-- certs&lt;br /&gt;
|   |   `-- 100001.pem&lt;br /&gt;
|   |-- openssl.cnf&lt;br /&gt;
|   |-- private&lt;br /&gt;
|   |   |-- ca_key.pem&lt;br /&gt;
|   |   `-- www.example.com-key.pem&lt;br /&gt;
|   |-- serial&lt;br /&gt;
|   |-- serial.old&lt;br /&gt;
|   |-- www.example.com-cert.pem&lt;br /&gt;
|   `-- www.example.com-req.pem&lt;br /&gt;
`-- www.example.com.p12&lt;br /&gt;
&lt;br /&gt;
3 directories, 14 files &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
# I was not precise in terms and used SSL and HTTPS loosely in the above.  This process would also applies to TLS - I just didn't want to type SSL/TLS over and over.&lt;br /&gt;
# Matt Tesauro was the author of this document.  If you have corrections, feel free to make them yourself (its a Wiki after all) or contact Matt at mtesauro (at) gmail.com&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=50122</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=50122"/>
				<updated>2009-01-05T20:45:59Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Update code explaining how to extend the library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Welcome to the OWASP Proxy'''&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy aims to provide a high quality intercepting proxy library which can be used by developers who require this functionality in their own programs, rather than having to develop it all from scratch.&lt;br /&gt;
&lt;br /&gt;
The library is developed in Java, making it most attractive to Java developers obviously, but also accessible to Python (Jython) and Ruby (JRuby) developers as well.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is always stored as a large byte[]. &lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Listener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
==Extending the OWASP Proxy==&lt;br /&gt;
&lt;br /&gt;
The basic classes are Listener and SocksListener, which can be customised to add your own functionality. If you just create an instance of Listener (or SocksListener), it will accept connections on the specified port, and relay them to the requested destination.&lt;br /&gt;
&lt;br /&gt;
    Listener l = new Listener(8008); // listens to localhost by default&lt;br /&gt;
    Listener sl = new SocksListener(1080);&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
    Listener l = new Listener(InetAddress.getByAddress(new byte[] { 127, 0,&lt;br /&gt;
                    0, 1 }), 8008);&lt;br /&gt;
    Listener sl = new SocksListener(InetAddress.getByAddress(new byte[] { 127, 0,&lt;br /&gt;
                    0, 1 }), 1080);&lt;br /&gt;
&lt;br /&gt;
The first thing a developer might want to do is make some changes to the request or response. This is done by means of a ProxyMonitor. This is an abstract class that can be extended to provide the specific functionality required. I'll show it here as an interface, just to reduce verbosity.&lt;br /&gt;
&lt;br /&gt;
    Response requestReceived(Request request)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorReadingRequest(Request request, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    boolean responseHeaderReceived(Conversation conversation)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void responseContentReceived(Conversation conversation, boolean streamed)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorFetchingResponseHeader(Request request, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    Response errorFetchingResponseContent(Conversation conversation, Exception e)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void wroteResponseToBrowser(Conversation conversation)&lt;br /&gt;
        throws MessageFormatException;&lt;br /&gt;
    &lt;br /&gt;
    void errorWritingResponseToBrowser(Conversation conversation,&lt;br /&gt;
        Exception e) throws MessageFormatException;&lt;br /&gt;
&lt;br /&gt;
These methods are called at various stages of a request's lifecycle, if appropriate. Obviously error methods won't be called if there are no errors! Each method that returns a Response object can be customized to return a custom Response to the browser. e.g. overriding requestReceived(Request) can allow a developer to provide a browser-based interface to their program, by returning Response objects for specific requests, e.g. to a host called &amp;quot;proxy&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    public Response requestReceived(Request request)&lt;br /&gt;
        throws MessageFormatException {&lt;br /&gt;
        if (request.getHost().equals(&amp;quot;proxy&amp;quot;)) {&lt;br /&gt;
            return handleRequest(request);&lt;br /&gt;
        }&lt;br /&gt;
        return super.requestReceived(request);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
The library provides a LoggingProxyMonitor class, which simply logs the Requests and Responses that pass through. It also prints out any exceptions that may occur (not shown).&lt;br /&gt;
&lt;br /&gt;
    class LoggingProxyMonitor extends ProxyMonitor {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public void wroteResponseToBrowser(Conversation conversation)&lt;br /&gt;
                throws MessageFormatException {&lt;br /&gt;
            try {&lt;br /&gt;
                int resp = conversation.getResponse().getMessage().length;&lt;br /&gt;
                long time = conversation.getResponseBodyTime()&lt;br /&gt;
                        - conversation.getRequestTime();&lt;br /&gt;
    &lt;br /&gt;
                Request request = conversation.getRequest();&lt;br /&gt;
                StringBuilder buff = new StringBuilder();&lt;br /&gt;
                buff.append(request.getMethod()).append(&amp;quot; &amp;quot;);&lt;br /&gt;
                buff.append(request.isSsl() ? &amp;quot;ssl &amp;quot; : &amp;quot;&amp;quot;);&lt;br /&gt;
                buff.append(request.getHost()).append(&amp;quot;:&amp;quot;)&lt;br /&gt;
                        .append(request.getPort());&lt;br /&gt;
                buff.append(request.getResource()).append(&amp;quot; &amp;quot;);&lt;br /&gt;
                buff.append(conversation.getResponse().getStatus()).append(&amp;quot; - &amp;quot;)&lt;br /&gt;
                        .append(resp);&lt;br /&gt;
                buff.append(&amp;quot; bytes in &amp;quot;).append(time).append(&amp;quot;(&amp;quot;).append(&lt;br /&gt;
                        resp / (time * 1000));&lt;br /&gt;
                buff.append(&amp;quot; bps)&amp;quot;);&lt;br /&gt;
                System.out.println(buff.toString());&lt;br /&gt;
            } catch (MessageFormatException mfe) {&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
One thing that a developer might want to do is teach the proxy how to use an upstream proxy to reach the target. OWASP Proxy uses the standard Java ProxySelector mechanism for this:&lt;br /&gt;
&lt;br /&gt;
    final Proxy upstream = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port);&lt;br /&gt;
    &lt;br /&gt;
    final ProxySelector ps = new ProxySelector() {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {&lt;br /&gt;
            System.err.println(&amp;quot;Proxy connection failed! &amp;quot;&lt;br /&gt;
                    + ioe.getLocalizedMessage());&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public List&amp;lt;Proxy&amp;gt; select(URI uri) {&lt;br /&gt;
            return Arrays.asList(upstream);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
Having created the ProxySelector, we need to make use of it. OWASP Proxy has its own Http Client implementation, that specifically makes NO unnecessary changes to the requests or responses. Some libraries try to make sure that the requests it sends are well-formed, for instance, but for a security tool, sometimes it is interesting to send malformed requests.&lt;br /&gt;
&lt;br /&gt;
So, we can tell the Listener how to configure its HttpClient implementations, by providing a customised HttpClientFactory:&lt;br /&gt;
&lt;br /&gt;
    HttpClientFactory hcf = new DefaultHttpClientFactory() {&lt;br /&gt;
    &lt;br /&gt;
        @Override&lt;br /&gt;
        public HttpClient createHttpClient() {&lt;br /&gt;
            HttpClient client = super.createHttpClient();&lt;br /&gt;
            client.setProxySelector(ps);&lt;br /&gt;
            return client;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    listener.setHttpClientFactory(hcf);&lt;br /&gt;
&lt;br /&gt;
By default, OWASP Proxy does not intercept SSL connections (HTTP CONNECT verb), and if it encounters an SSL encrypted channel, it simply refuses to continue. Developers can enable SSL interception by providing a CertificateProvider implementation.&lt;br /&gt;
&lt;br /&gt;
This is what the interface looks like:&lt;br /&gt;
&lt;br /&gt;
    public interface CertificateProvider {&lt;br /&gt;
    &lt;br /&gt;
        SSLSocketFactory getSocketFactory(String host, int port) throws IOException;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
A simple implementation is provided in DefaultCertificateProvider that makes use of a single certificate for all connection attempts. A certificate location and passwords can be provided; alternatively, OWASP Proxy's default certificate can be used.&lt;br /&gt;
&lt;br /&gt;
    listener.setCertificateProvider(new DefaultCertificateProvider());&lt;br /&gt;
&lt;br /&gt;
Developers may wish to make use of something like the CyberVillains CA library to automatically generate certificates on the fly for each site visited.&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=49480</id>
		<title>Category:OWASP Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Proxy&amp;diff=49480"/>
				<updated>2008-12-17T20:09:22Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Introduce the OWASP Proxy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Welcome to the OWASP Proxy'''&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy aims to provide a high quality intercepting proxy library which can be used by developers who require this functionality in their own programs, rather than having to develop it all from scratch.&lt;br /&gt;
&lt;br /&gt;
The library is developed in Java, making it most attractive to Java developers obviously, but also accessible to Python (Jython) and Ruby (JRuby) developers as well.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the priorities of this project is to allow developers to do whatever they choose, without enforcing RFC compliance. This is important for a security testing library, as often the most interesting behavior manifests outside the RFCs! Keep in mind that a lot of the safety nets that exist in libraries that enforce RFC compliance do not exist in this library, and that as the developer, you need to be prepared to deal with the consequences!&lt;br /&gt;
&lt;br /&gt;
Another priority is to accurately deliver whatever is specified by the client, and similarly, to accurately reflect whatever is returned by the server, rather than coloured by the parsing and normalisation performed by the library. &lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
At the moment there is no packaged version of this library. Development is done in a git repository, located [http://dawes.za.net/gitweb.cgi?p=rogan/owasp-proxy/owasp-proxy.git;a=summary here].&lt;br /&gt;
&lt;br /&gt;
Interested parties can download a snapshot of the code at any point using the snapshot link next to each revision, or clone the repository:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/owasp-proxy/owasp-proxy.git/&lt;br /&gt;
&lt;br /&gt;
==Implementation details==&lt;br /&gt;
&lt;br /&gt;
In order to achieve byte for byte accuracy with what was sent by the client, and received from the server, OWASP Proxy does the bare minimum of message parsing. The basic storage of an HTTP message is as an array of byte (a byte for byte copy of what was read from the network), rather than parsed out into convenient pieces. The library does provide convenience methods for accessing interesting parts of the message, such as headers, content, etc, but the message itself is always stored as a large byte[]. &lt;br /&gt;
&lt;br /&gt;
The Request and Response objects that you may deal with also do not decode the message bodies for you. If the message was sent using chunked encoding, the message body will show the individual chunks that were sent. Of course, again, there are also classes which allow you to obtain the actual entity body, with appropriate decoding.&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, one objective is correctness. By this I mean correctly handling whatever the major browsers send to it, and successfully retrieving whichever resource was requested. Failure to do so will be addressed as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Other than that, there is no intention to add major new features to the library above those required to fulfill its purpose as a Lstener and a HTTP client implementation.&lt;br /&gt;
&lt;br /&gt;
One feature which is under serious consideration is the ability to proxy upstream requests via a SOCKS proxy, for example, as implemented by OpenSSH.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
The library attempts to provide the necessary extension points to allow developers access to the major lifecycle events of a request and a response. Here are the major methods that can be overridden:&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Override this method to control SSL support.&lt;br /&gt;
         * Return null to disable SSL CONNECT support&lt;br /&gt;
         * &lt;br /&gt;
         * @param host&lt;br /&gt;
         *            the host that the client wishes to CONNECT to&lt;br /&gt;
         * @param port&lt;br /&gt;
         *            the port that the client wishes to CONNECT to&lt;br /&gt;
         * @return an SSLSocketFactory generated from the relevant server key&lt;br /&gt;
         *         material, or null to disable CONNECT support&lt;br /&gt;
         */&lt;br /&gt;
        protected SSLSocketFactory getSocketFactory(String host, int port) {&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Override this method to configure your HttpClient.&lt;br /&gt;
         * For example, configure it to use an upstream proxy&lt;br /&gt;
         * &lt;br /&gt;
         * @return a preconfigured HttpClient&lt;br /&gt;
         */&lt;br /&gt;
        protected HttpClient createHttpClient() {&lt;br /&gt;
                return new HttpClient();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
A developer wishing to implement an in-browser interface to their application can override this method. If the request refers to your UI, simply return an appropriate Response here, and that Response will be returned to the client. Returning null will allow the (possibly modified) Request to be sent on to the server.&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called when a request is received by the proxy. Changes can be made to&lt;br /&gt;
         * the Request object to alter what will be sent to the server.&lt;br /&gt;
         * &lt;br /&gt;
         * @param request&lt;br /&gt;
         *            the Request received from the client&lt;br /&gt;
         * @return a custom Response to be sent directly back to the client without&lt;br /&gt;
         *         making any request to a server, or null to forward the Request&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if the request cannot be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected Response requestReceived(Request request)&lt;br /&gt;
                        throws MessageFormatException {&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called when an error is encountered while reading the request from the&lt;br /&gt;
         * client.&lt;br /&gt;
         * &lt;br /&gt;
         * @param request&lt;br /&gt;
         * @param e&lt;br /&gt;
         * @return a customized Response to be sent to the browser, or null to send&lt;br /&gt;
         *         the default error message&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if the request couldn't be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected Response errorReadingRequest(Request request, Exception e)&lt;br /&gt;
                        throws MessageFormatException {&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called when the Response headers have been read from the server. The&lt;br /&gt;
         * response content (if any) will not yet have been read. Analysis can be&lt;br /&gt;
         * performed based on the headers to determine whether to intercept the&lt;br /&gt;
         * complete response at a later stage. If you wish to intercept the complete&lt;br /&gt;
         * response message at a later stage, return false from this method to&lt;br /&gt;
         * disable streaming of the response content, otherwise the response would&lt;br /&gt;
         * already have been written to the browser when responseContentReceived is&lt;br /&gt;
         * called.&lt;br /&gt;
         * &lt;br /&gt;
         * Note: If you modify the response headers in this method, be very careful&lt;br /&gt;
         * not to affect the retrieval of the response content. For example,&lt;br /&gt;
         * deleting a &amp;quot;Transfer-Encoding: chunked&amp;quot; header would be a bad idea!&lt;br /&gt;
         * &lt;br /&gt;
         * @param conversation&lt;br /&gt;
         * @return true to stream the response to the client as it is being read&lt;br /&gt;
         *         from the server, or false to delay writing the response to the&lt;br /&gt;
         *         client until after responseContentReceived is called&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if either the request or response couldn't be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected boolean responseHeaderReceived(Conversation conversation)&lt;br /&gt;
                        throws MessageFormatException {&lt;br /&gt;
                return true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called after the Response content has been received from the server. If&lt;br /&gt;
         * streamed is false, the response can be modified here, and the modified&lt;br /&gt;
         * version will be written to the client.&lt;br /&gt;
         * &lt;br /&gt;
         * @param conversation&lt;br /&gt;
         * @param streamed&lt;br /&gt;
         *            true if the response has already been written to the client&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if either the request or response couldn't be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected void responseContentReceived(Conversation conversation,&lt;br /&gt;
                        boolean streamed) throws MessageFormatException {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called in the event of an error occurring while reading the response&lt;br /&gt;
         * header from the client&lt;br /&gt;
         * &lt;br /&gt;
         * @param request&lt;br /&gt;
         * @param e&lt;br /&gt;
         * @return a custom Response to be sent to the client, or null to use the&lt;br /&gt;
         *         default&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if either the request or response couldn't be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected Response errorFetchingResponseHeader(Request request, Exception e)&lt;br /&gt;
                        throws MessageFormatException {&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
         * Called in the event of an error occurring while reading the response&lt;br /&gt;
         * content from the client&lt;br /&gt;
         * &lt;br /&gt;
         * @param conversation&lt;br /&gt;
         * @param e&lt;br /&gt;
         * @return a custom Response to be sent to the client, or null to use the&lt;br /&gt;
         *         default&lt;br /&gt;
         * @throws MessageFormatException&lt;br /&gt;
         *             if either the request or response couldn't be parsed&lt;br /&gt;
         */&lt;br /&gt;
        protected Response errorFetchingResponseContent(Conversation conversation,&lt;br /&gt;
                        Exception e) throws MessageFormatException {&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        protected void wroteResponseToBrowser(Conversation conversation)&lt;br /&gt;
                        throws MessageFormatException {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        protected void errorWritingResponseToBrowser(Conversation conversation,&lt;br /&gt;
                        Exception e) throws MessageFormatException {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The OWASP Proxy project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=46057</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=46057"/>
				<updated>2008-11-07T11:34:36Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Spelling fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
You can download WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file&lt;br /&gt;
&lt;br /&gt;
A Mac OS X package of the latest version can usually be found on [http://research.corsaire.com/tools/ Corsaire's download page].&lt;br /&gt;
&lt;br /&gt;
You can also try the [http://dawes.za.net/rogan/webscarab/WebScarab.jnlp  Java Web Start version], which was signed by Rogan Dawes.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyses a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies which can be found [http://yehg.net/lab/pr0js/training/webscarab.php here].&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Uncovering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here].&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=46056</id>
		<title>Category:OWASP WebScarab Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebScarab_Project&amp;diff=46056"/>
				<updated>2008-11-07T11:27:36Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add training material&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OWASP Book|1416452}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the WebScarab Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols. It is written in Java, and is thus portable to many platforms. WebScarab has several modes of operation, implemented by a number of plugins. In its most common usage, WebScarab operates as an intercepting proxy, allowing the operator to review and modify requests created by the browser before they are sent to the server, and to review and modify responses returned from the server before they are received by the browser. WebScarab is able to intercept both HTTP and HTTPS communication. The operator can also review the conversations (requests and responses) that have passed through WebScarab.&lt;br /&gt;
&lt;br /&gt;
You may also be interested in testing the [[OWASP WebScarab NG Project | Next Generation of WebScarab]].&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&lt;br /&gt;
Here's the main window of WebScarab. Check the [[WebScarab Getting Started]] guide for more screenshots of WebScarab in action.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
There is no shiny red button on WebScarab, it is a tool primarily designed to be used by people who can write code themselves, or at least have a pretty good understanding of the HTTP protocol. If that sounds like you, welcome! Download WebScarab, sign up for the mailing list on the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP subscription page], and enjoy! You can read a [[WebScarab Tutorial | brief tutorial ]] to explain the basic workings.&lt;br /&gt;
&lt;br /&gt;
WebScarab is designed to be a tool for anyone who needs to expose the workings of an HTTP(S) based application, whether to allow the developer to debug otherwise difficult problems, or to allow a security specialist to identify vulnerabilities in the way that the application has been designed or implemented.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
You can download WebScarab from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61823 OWASP Source Code Center at Sourceforge]. Then install them likewise:&lt;br /&gt;
* Linux: &amp;lt;tt&amp;gt;java -jar ./webscarab-selfcontained-[numbers].jar&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Windows: double-click the installer jar file&lt;br /&gt;
&lt;br /&gt;
A Mac OS X package of the latest version can usually be found on [http://research.corsaire.com/tools/ Corsaire's download page].&lt;br /&gt;
&lt;br /&gt;
You can also try the [http://dawes.za.net/rogan/webscarab/WebScarab.jnlp  Java Web Start version], which was signed by Rogan Dawes.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
A framework without any functions is worthless, of course, and so WebScarab provides a number of plugins, mainly aimed at the security functionality for the moment. Those plugins include:&lt;br /&gt;
&lt;br /&gt;
* Fragments - extracts Scripts and HTML comments from HTML pages as they are seen via the proxy, or other plugins&lt;br /&gt;
&lt;br /&gt;
* Proxy - observes traffic between the browser and the web server. The WebScarab proxy is able to observe both HTTP and encrypted HTTPS traffic, by negotiating an SSL connection between WebScarab and the browser instead of simply connecting the browser to the server and allowing an encrypted stream to pass through it. Various proxy plugins have also been developed to allow the operator to control the requests and responses that pass through the proxy.&lt;br /&gt;
&lt;br /&gt;
* Manual intercept - allows the user to modify HTTP and HTTPS requests and responses on the fly, before they reach the server or browser.&lt;br /&gt;
&lt;br /&gt;
* Beanshell - allows for the execution of arbitrarily complex operations on requests and responses. Anything that can be expressed in Java can be executed.&lt;br /&gt;
&lt;br /&gt;
* Reveal hidden fields - sometimes it is easier to modify a hidden field in the page itself, rather than intercepting the request after it has been sent. This plugin simply changes all hidden fields found in HTML pages to text fields, making them visible, and editable.&lt;br /&gt;
&lt;br /&gt;
* Bandwidth simulator - allows the user to emulate a slower network, in order to observe how their website would perform when accessed over, say, a modem.&lt;br /&gt;
&lt;br /&gt;
* Spider - identifies new URLs on the target site, and fetches them on command.&lt;br /&gt;
&lt;br /&gt;
* Manual request - Allows editing and replay of previous requests, or creation of entirely new requests.&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis - collects and analyses a number of cookies to visually determine the degree of randomness and unpredictability. Note that this analysis is rather trivial, and does not do any serious checks, such as FIPS, etc.&lt;br /&gt;
&lt;br /&gt;
* Scripted - operators can use BeanShell (or any other BSF supported language found on the classpath) to write a script to create requests and fetch them from the server. The script can then perform some analysis on the responses, with all the power of the WebScarab Request and Response object model to simplify things.&lt;br /&gt;
&lt;br /&gt;
* Parameter fuzzer - performs automated substitution of parameter values that are likely to expose incomplete parameter validation, leading to vulnerabilities like Cross Site Scripting (XSS) and SQL Injection.&lt;br /&gt;
&lt;br /&gt;
* Search - allows the user to craft arbitrary BeanShell expressions to identify conversations that should be shown in the list.&lt;br /&gt;
&lt;br /&gt;
* Compare - calculates the edit distance between the response bodies of the conversations observed, and a selected baseline conversation. The edit distance is &amp;quot;the number of edits required to transform one document into another&amp;quot;. For performance reasons, edits are calculated using word tokens, rather than byte by byte.&lt;br /&gt;
&lt;br /&gt;
* SOAP - There is a plugin that parses WSDL, and presents the various functions and the required parameters, allowing them to be edited before being sent to the server. '''NOTE''': This plugin is deprecated, and may be removed in the future. [http://www.soapui.org SOAPUI] is streets beyond anything that Webscarab can do, or will ever do, and is also a free tool.&lt;br /&gt;
&lt;br /&gt;
* Extensions - automates checks for files that were mistakenly left in web server's root directory (e.g. .bak, ~, etc). Checks are performed for both, files and directories (e.g. /app/login.jsp will be checked for /app/login.jsp.bak, /app/login.jsp~, /app.zip, /app.tar.gz, etc). Extensions for files and directories can be edited by user.&lt;br /&gt;
&lt;br /&gt;
* XSS/CRLF - passive analysis plugin that searches for user-controlled data in HTTP response headers and body to identify potential CRLF injection (HTTP response splitting) and reflected cross-site scripting (XSS) vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==Training Material==&lt;br /&gt;
&lt;br /&gt;
Aung Khant (YGN Ethical Hacker Group, Myanmar) has created a series of WebScarab movies at&lt;br /&gt;
 http://yehg.net/lab/pr0js/training/webscarab.php&lt;br /&gt;
&lt;br /&gt;
There are slides of the presentation &amp;quot;Unconvering Webscarab's Hidden Treasures&amp;quot;, given at the OWASP EU Summit 2008, available [https://www.owasp.org/images/8/88/OWASP_EU_Summit_2008_WebScarab_treasures.ppt here]&lt;br /&gt;
&lt;br /&gt;
==Future development==&lt;br /&gt;
&lt;br /&gt;
Features will probably include:&lt;br /&gt;
&lt;br /&gt;
* Combining the Search and Compare plugins, so that you can compare only specific responses&lt;br /&gt;
&lt;br /&gt;
* Improving the fuzzer, adding ability to follow redirects, or to specify the number of threads to use. Also, adding the ability to define what is (or isn't) interesting in the fuzz results, and save only interesting conversations to the summary.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
As a framework, WebScarab is extensible. Each feature above is implemented as a plugin, and can be removed or replaced. New features can be easily implemented as well. The sky is the limit! If you have a great idea for a plugin, please let us know about it on the list. &lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab project is run by Rogan Dawes of Corsaire Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:OWASP_EU_Summit_2008_WebScarab_treasures.ppt&amp;diff=46055</id>
		<title>File:OWASP EU Summit 2008 WebScarab treasures.ppt</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:OWASP_EU_Summit_2008_WebScarab_treasures.ppt&amp;diff=46055"/>
				<updated>2008-11-07T11:24:45Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: WebScarab's Hidden Treasures&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WebScarab's Hidden Treasures&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Working_Session_Winter_of_Code_2009&amp;diff=45378</id>
		<title>Working Session Winter of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Working_Session_Winter_of_Code_2009&amp;diff=45378"/>
				<updated>2008-11-01T21:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Working Session Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;7&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#b3b3b3; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Working Sessions Operational Rules''' - [[:Working Sessions Methodology|'''Please see here the general frame of rules''']].&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;7&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;'''WORKING SESSION IDENTIFICATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Work Session Name'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;'''OWASP Winter of Code 2009'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Work Session Description''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|Aims to define the next OWASP Season of Code frame.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Related Projects (if any)''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[:OWASP Summer of Code 2008|OWASP Summer of Code 2008]],&lt;br /&gt;
*[[:OWASP Spring Of Code 2007|OWASP Spring Of Code 2007]], &lt;br /&gt;
*[[:OWASP Autumn Of Code 2006|OWASP Autumn Of Code 2006]].&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Email Contacts &amp;amp; Roles'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Chair'''&amp;lt;br&amp;gt;[mailto:dinis.cruz(at)owasp.org '''Dinis Cruz'''], [mailto:seba(at)owasp.org '''Sebastien Deleersnyder'''] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Secretary'''&amp;lt;br&amp;gt;[mailto:paulo.coimbra(at)owasp.org '''Paulo Coimbra''']&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Mailing list'''&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-winter-of-code-2009 '''Subscription Page''']&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;7&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;'''WORKING SESSION SPECIFICS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Objectives'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;&lt;br /&gt;
*  Define the operation model for the next OWASP Season of Code (the Winter of Code 08),&lt;br /&gt;
* Identify which areas should receive priority selection,&lt;br /&gt;
* Create 'virtual teams' from the attendees and allocate them to key projects,&lt;br /&gt;
* Discuss sponsoring models. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue/Date&amp;amp;Time/Model'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue'''&amp;lt;br&amp;gt;[[:OWASP EU Summit 2008|OWASP EU Summit Portugal 2008]] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Date&amp;amp;Time'''&amp;lt;br&amp;gt;November 4 &amp;amp; 7, 2008 &amp;lt;br&amp;gt;Time TBD&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Discussion Model'''&amp;lt;br&amp;gt;&amp;quot;Everybody is a Participant&amp;quot;&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION OPERATIONAL RESOURCES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Please add here, ASAP, any needed relevant resources, e.g. data-show, boards, laptops, etc.&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION ADDITIONAL DETAILS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Please add here, any additional notes, links, ideas, guidelines, etc... The objective is to help the working sessions participants and attendees to prepare their participation/contribution&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;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|'''WORKING SESSION OUTCOMES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#6C82B5&amp;quot; align=&amp;quot;center&amp;quot;|Statements, Initiatives or Decisions &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Proposed by Working Group''' &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Approved by OWASP Board'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|Initiative &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|OWASP Winter of Code 08 plan.&lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|Decision &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Set of projects for immediate approval (assuming the proposal is ready).&lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.&lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
  |}&lt;br /&gt;
== Working Session Participants ==&lt;br /&gt;
(Add you name by editing this table. On your the right, just above the this frame, you have the option to edit)&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;7&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;'''WORKING SESSION PARTICIPANTS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Name'''&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Company'''&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Notes &amp;amp; reason for participating, issues to be discussed/addressed'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Eduardo Vianna de Camargo Neves&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Conviso IT Security&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Understand how we can help the initiative and participate to continue the Positive Security project.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Leonardo Cavallari Militelli&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|E-VAL Tecnologia&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Share feelings from other 2 season of code, discuss improvements for WoC and continue ASDR development.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Matt Tesauro&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP Live CD 2008 Project Lead&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Discuss what worked and didn't work with the SoC.&amp;lt;br&amp;gt;  Give some input on how to spread the word about OWASP's XoC's&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Matteo Meucci&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Minded Security, OWASP Testing Guide&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Discuss new ideas about projects. Should OWASP says which projects develop?&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Carlo Pelliccioni&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Symantec, OWASP Backend Security Project&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Discuss about the next OWASP sponsorship to share new ideas.&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Christian Martorella&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Edge-Security, WebSlayer Project&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Interested in the topic&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Eoin Keary&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Code review guide lead&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|What next for the sponsored prjoects?&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Arturo 'Buanzo' Busleiman&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Independent&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader in 07 and 08, past experience.&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rogan Dawes&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Corsaire&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|WebScarab lead, reviewer and past participant&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |}&lt;br /&gt;
If needed add here more lines.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Working_Session]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_Code_Review_Guide&amp;diff=45377</id>
		<title>OWASP Working Session - Code Review Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_Code_Review_Guide&amp;diff=45377"/>
				<updated>2008-11-01T20:57:16Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Working Session Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;7&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#b3b3b3; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Working Sessions Operational Rules''' - [[:Working Sessions Methodology|'''Please see here the general frame of rules''']].&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;7&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;'''WORKING SESSION IDENTIFICATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Work Session Name'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;'''Code Review Guide'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Work Session Description''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|TBD&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Related Projects (if any)''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[:Category:OWASP Code Review Project|OWASP Code Review Project]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Email Contacts &amp;amp; Roles'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Chair'''&amp;lt;br&amp;gt;[mailto:eoin.keary(at)owasp.org '''Eoin Keary'''] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Secretary'''&amp;lt;br&amp;gt;[mailto:name(at)name '''TBD''']&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Mailing list'''&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-codereview '''Subscription Page''']&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;7&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;'''WORKING SESSION SPECIFICS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Objectives'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;&lt;br /&gt;
*  Discuss next version of code review guide.&lt;br /&gt;
* Discuss industry requirements for code review.&lt;br /&gt;
* Discuss academic versus practical ramifications of guide.&lt;br /&gt;
* Brainstorm: Ideas for integration with other projects and tools.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue/Date&amp;amp;Time/Model'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue'''&amp;lt;br&amp;gt;[[:OWASP EU Summit 2008|OWASP EU Summit Portugal 2008]] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Date&amp;amp;Time'''&amp;lt;br&amp;gt;November 5 &amp;amp; 6, 2008 &amp;lt;br&amp;gt;Time TBD&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Discussion Model'''&amp;lt;br&amp;gt;&amp;quot;Everybody is a Participant&amp;quot;&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION OPERATIONAL RESOURCES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Whteboard and Pens, Projector, Coffee :)&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION ADDITIONAL DETAILS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
Please add here, any additional notes, links, ideas, guidelines, etc... The objective is to help the working sessions participants and attendees to prepare their participation/contribution.&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;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|'''WORKING SESSION OUTCOMES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#6C82B5&amp;quot; align=&amp;quot;center&amp;quot;|Statements, Initiatives or Decisions &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Proposed by Working Group''' &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Approved by OWASP Board'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Develop a roadmap for the code review guide: Technologies, approaches. &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.   &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here. &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
  |}&lt;br /&gt;
== Working Session Participants ==&lt;br /&gt;
(Add you name by editing this table. On your the right, just above the this frame, you have the option to edit)&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;7&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;'''WORKING SESSION PARTICIPANTS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Name'''&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Company'''&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Notes &amp;amp; reason for participating, issues to be discussed/addressed'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Paolo Perego (aka thesp0nge)&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Spike Reply&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Owasp Orizon - Project Leader&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|David Rook&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Realex Payments&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Contributor to Code Review Guide&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Giorgio Fedon&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Minded Security&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Very interested in the topic&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Matteo Meucci&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Minded Security&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Interested in integrating OWASP big 4: Dev, Code Review, Testing, ADSR&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Kuai Hinojosa&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP (MSP) Chapter Leader&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|James Walden&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|NKU&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP Source Code Analysis Project&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Wagner Elias&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Conviso IT Security&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Arturo 'Buanzo' Busleiman&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Independent&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Eoin looks passionate about the subject. I want to be near! :)&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rogan Dawes&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Corsaire&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Have experience, would like to contribute where possible&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |}&lt;br /&gt;
If needed add here more lines.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Working_Session]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_OWASP_Tools_Projects&amp;diff=43006</id>
		<title>OWASP Working Session - OWASP Tools Projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_OWASP_Tools_Projects&amp;diff=43006"/>
				<updated>2008-10-12T09:35:00Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: update company&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;7&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#b3b3b3; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Working Sessions Operational Rules''' - [[:Working Sessions Methodology|'''Please see here the general frame of rules''']].&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;7&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;'''WORKING SESSION IDENTIFICATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Work Session Name'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;'''OWASP Tools Projects'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Work Session Description''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|TBD&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Related Projects (if any)''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[:Category:OWASP Project|OWASP Tools Projects]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Email Contacts &amp;amp; Roles'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Chair'''&amp;lt;br&amp;gt;[mailto:mark.roxberry(at)owasp.org '''Mark Roxberry'''] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Secretary'''&amp;lt;br&amp;gt;[mailto:mtesauro(at)gmail.com '''Matt Tesauro''']&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Mailing list'''&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-tools-projects '''Subscription Page''']&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;7&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;'''WORKING SESSION SPECIFICS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Objectives'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;&lt;br /&gt;
*  Discuss documentation procedures.&lt;br /&gt;
* Book creation procedure.&lt;br /&gt;
* Review OWASP Project Assessment.    &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue/Date&amp;amp;Time/Model'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue'''&amp;lt;br&amp;gt;[[:OWASP EU Summit 2008|OWASP EU Summit Portugal 2008]] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Date&amp;amp;Time'''&amp;lt;br&amp;gt;November 4 &amp;amp; 7, 2008 &amp;lt;br&amp;gt;Time TBD&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Discussion Model'''&amp;lt;br&amp;gt;&amp;quot;Participants + Attendees&amp;quot;&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION OPERATIONAL RESOURCES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Please add here, ASAP, any needed relevant resources, e.g. data-show, boards, laptops, etc.&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION ADDITIONAL DETAILS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
Please add here, any additional notes, links, ideas, guidelines, etc... The objective is to help the working sessions participants and attendees to prepare their participation/contribution.&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;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|'''WORKING SESSION OUTCOMES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#6C82B5&amp;quot; align=&amp;quot;center&amp;quot;|Statements, Initiatives or Decisions &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Proposed by Working Group''' &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Approved by OWASP Board'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.  &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.  &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
  |}&lt;br /&gt;
== Working Session Participants ==&lt;br /&gt;
(Add you name by editing this table. On your the right, just above the this frame, you have the option to edit)&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;7&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;'''WORKING SESSION PARTICIPANTS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Name'''&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Company'''&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Notes &amp;amp; reason for participating, issues to be discussed/addressed'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Paulo Coimbra&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Has contributed to the current OWASP Assessment Criteria. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rogan Dawes&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Corsaire&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|WebScarab lead &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |}&lt;br /&gt;
If needed add here more lines.&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_OWASP_Tools_Projects&amp;diff=43005</id>
		<title>OWASP Working Session - OWASP Tools Projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Working_Session_-_OWASP_Tools_Projects&amp;diff=43005"/>
				<updated>2008-10-12T09:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add Rogan Dawes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;7&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#b3b3b3; color:white&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''Working Sessions Operational Rules''' - [[:Working Sessions Methodology|'''Please see here the general frame of rules''']].&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;7&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;'''WORKING SESSION IDENTIFICATION''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Work Session Name'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;'''OWASP Tools Projects'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Short Work Session Description''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|TBD&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;| '''Related Projects (if any)''' &lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; style=&amp;quot;width:85%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[:Category:OWASP Project|OWASP Tools Projects]]&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Email Contacts &amp;amp; Roles'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Chair'''&amp;lt;br&amp;gt;[mailto:mark.roxberry(at)owasp.org '''Mark Roxberry'''] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Secretary'''&amp;lt;br&amp;gt;[mailto:mtesauro(at)gmail.com '''Matt Tesauro''']&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Mailing list'''&amp;lt;br&amp;gt;[https://lists.owasp.org/mailman/listinfo/owasp-tools-projects '''Subscription Page''']&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;7&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;'''WORKING SESSION SPECIFICS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Objectives'''&lt;br /&gt;
 | colspan=&amp;quot;6&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;&lt;br /&gt;
*  Discuss documentation procedures.&lt;br /&gt;
* Book creation procedure.&lt;br /&gt;
* Review OWASP Project Assessment.    &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue/Date&amp;amp;Time/Model'''&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Venue'''&amp;lt;br&amp;gt;[[:OWASP EU Summit 2008|OWASP EU Summit Portugal 2008]] &lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Date&amp;amp;Time'''&amp;lt;br&amp;gt;November 4 &amp;amp; 7, 2008 &amp;lt;br&amp;gt;Time TBD&lt;br /&gt;
 | style=&amp;quot;width:25%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Discussion Model'''&amp;lt;br&amp;gt;&amp;quot;Participants + Attendees&amp;quot;&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION OPERATIONAL RESOURCES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Please add here, ASAP, any needed relevant resources, e.g. data-show, boards, laptops, etc.&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;7&amp;quot; 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;
 |}&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;7&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;'''WORKING SESSION ADDITIONAL DETAILS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:100%; background:#cccccc&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
Please add here, any additional notes, links, ideas, guidelines, etc... The objective is to help the working sessions participants and attendees to prepare their participation/contribution.&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;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background:#4058A0; color:white&amp;quot;|'''WORKING SESSION OUTCOMES''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#6C82B5&amp;quot; align=&amp;quot;center&amp;quot;|Statements, Initiatives or Decisions &lt;br /&gt;
 | style=&amp;quot;width:46%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Proposed by Working Group''' &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''Approved by OWASP Board'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.  &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:46%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|Fill in here.  &lt;br /&gt;
 | style=&amp;quot;width:47%; background:#C2C2C2&amp;quot; align=&amp;quot;center&amp;quot;|After the Board Meeting - fill in here. &lt;br /&gt;
  |}&lt;br /&gt;
== Working Session Participants ==&lt;br /&gt;
(Add you name by editing this table. On your the right, just above the this frame, you have the option to edit)&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;7&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;'''WORKING SESSION PARTICIPANTS''' &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Name'''&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Company'''&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|'''Notes &amp;amp; reason for participating, issues to be discussed/addressed'''&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Paulo Coimbra&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Has contributed to the current OWASP Assessment Criteria. &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rogan Dawes&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|WebScarab lead &lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
 | style=&amp;quot;width:7%; background:#7B8ABD&amp;quot; align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:15%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 | style=&amp;quot;width:63%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |}&lt;br /&gt;
If needed add here more lines.&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Training_(Courses_to_be_Approved)&amp;diff=42133</id>
		<title>OWASP EU Summit 2008 Training (Courses to be Approved)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Training_(Courses_to_be_Approved)&amp;diff=42133"/>
				<updated>2008-10-06T15:20:49Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Uncovering WebScarab's Secret Treasures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Upon detail completion and board approval courses will be moved towards the main agenda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Source Code Review==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Eoin Keary and Daniel Cuthbert (TBC)&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
0.5 day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
An introduction to secure code review from an OWASP standpoint. Covering how to approach the review, tips and leading practice on how to get the best from a source code review. A look at the OWASP tools that support the code review guide.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
Anyone that would like to learn more about secure code review.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Advanced Phishing and Social Engineering Training==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Joshua Perrymon&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
This class is designed to illustrate hands-on methods used in the real world attacking the human layer. This includes a focus on spear-phishing using the newly introduced OWASP phishing framework (LUNKER). Attendees will identify target emails using a variety of methods, identify potential phish sites, create a spoofed email and send the attack all in a locally ran test environment in Vmware or LiveCD.&lt;br /&gt;
&lt;br /&gt;
Upon completion of this course, attendees will have an in-depth understanding of the latest techniques used to perform these type of attacks. The class will also include additional social engineering attack methods such as impersonation, authority attacks, pre-text attacks, and much more.  Advanced topics such as Email Payloads and  2nd Factor token MITM attacks will be covered as well.&lt;br /&gt;
&lt;br /&gt;
1. Introduction to Social Engineering&lt;br /&gt;
&lt;br /&gt;
2. Understanding the Human Aspect of Security&lt;br /&gt;
&lt;br /&gt;
3. Review of aggressively vertical hacking methodology&lt;br /&gt;
&lt;br /&gt;
4. Analysis of attack trending over the years (Up the OSI Model)&lt;br /&gt;
&lt;br /&gt;
5. Review of public Social Engineering Attacks in the media&lt;br /&gt;
&lt;br /&gt;
6. Hands on: Spear Phishing Demo using the Lunker Framework&lt;br /&gt;
     a. Understanding the Social Engineering Scope of work&lt;br /&gt;
     b. Setup Client Info&lt;br /&gt;
     c. Gather Email addresses/targets&lt;br /&gt;
     d. Identify potential phishing sites&lt;br /&gt;
     e. Creation of spoofed emails&lt;br /&gt;
         i. Custom footers&lt;br /&gt;
         ii. Attack Scenarios&lt;br /&gt;
         iii. Email header options&lt;br /&gt;
&lt;br /&gt;
f. Test Environment: Review the spoofed email and phishing site&lt;br /&gt;
&lt;br /&gt;
g. Send attack&lt;br /&gt;
&lt;br /&gt;
h. Monitor: Discuss steps to take at this point once the users send in credentials.&lt;br /&gt;
&lt;br /&gt;
i. Advanced Phishing Attacks: Recon, XSS/CSRF/Browser Exploit/Trojan payloads&lt;br /&gt;
&lt;br /&gt;
j. MITM Attacks on 2-factor Authentication&lt;br /&gt;
&lt;br /&gt;
k. Summary&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== OWASP ESAPI ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Jeff Williams, Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Web Services and SOA Security ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Dave Wichers, Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
2 days&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Advanced Web Application Security Testing ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Michael Coates, Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
2 days&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Uncovering WebScarab's Secret Treasures ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Rogan Dawes&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
OWASP WebScarab has a lot of hidden features that probably no one but the author really knows about. This in depth hands on session will show delegates how to access these features, and how to use them to their full potential.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Application reviewers, developers&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
* Using the spider&lt;br /&gt;
* Manual Request Transforms&lt;br /&gt;
* What is the XSS/CRLF plugin, and how does it work?&lt;br /&gt;
* Using the Fuzzer&lt;br /&gt;
* Comparing Responses&lt;br /&gt;
* Searching WebScarab history&lt;br /&gt;
* Exploring the Beanshell&lt;br /&gt;
** Writing Proxy Intercept scripts&lt;br /&gt;
** Writing Script Manager Scripts&lt;br /&gt;
** Writing other scripts&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Bring your own laptop&lt;br /&gt;
&lt;br /&gt;
== Testing Guide Training ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Matteo Meucci, Giorgio Fedon.&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
4h.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Software developers, security consultants, auditors.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Bring your own laptop.&lt;br /&gt;
&lt;br /&gt;
== AJAX Security ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Brad Causey&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 Day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Additional Details and summary to follow...&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Web Application Security Professionals&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Details to come&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please bring your own laptop with your choice of web proxy and browser installed if you wish to participate. Participation is optional.&lt;br /&gt;
&lt;br /&gt;
== Course Name {template} ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Training_(Courses_to_be_Approved)&amp;diff=40371</id>
		<title>OWASP EU Summit 2008 Training (Courses to be Approved)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Training_(Courses_to_be_Approved)&amp;diff=40371"/>
				<updated>2008-09-18T07:27:53Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add WebScarab session&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The courses listed on this page are to be approved by OWASP Board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Source Code Review==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Eoin Keary and Daniel Cuthbert&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Advanced Phishing and Social Engineering Training==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Joshua Perrymon&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
This class is designed to illustrate hands-on methods used in the real world attacking the human layer. This includes a focus on spear-phishing using the newly introduced OWASP phishing framework (LUNKER). Attendees will identify target emails using a variety of methods, identify potential phish sites, create a spoofed email and send the attack all in a locally ran test environment in Vmware or LiveCD.&lt;br /&gt;
&lt;br /&gt;
Upon completion of this course, attendees will have an in-depth understanding of the latest techniques used to perform these type of attacks. The class will also include additional social engineering attack methods such as impersonation, authority attacks, pre-text attacks, and much more.  Advanced topics such as Email Payloads and  2nd Factor token MITM attacks will be covered as well.&lt;br /&gt;
&lt;br /&gt;
1. Introduction to Social Engineering&lt;br /&gt;
&lt;br /&gt;
2. Understanding the Human Aspect of Security&lt;br /&gt;
&lt;br /&gt;
3. Review of aggressively vertical hacking methodology&lt;br /&gt;
&lt;br /&gt;
4. Analysis of attack trending over the years (Up the OSI Model)&lt;br /&gt;
&lt;br /&gt;
5. Review of public Social Engineering Attacks in the media&lt;br /&gt;
&lt;br /&gt;
6. Hands on: Spear Phishing Demo using the Lunker Framework&lt;br /&gt;
     a. Understanding the Social Engineering Scope of work&lt;br /&gt;
     b. Setup Client Info&lt;br /&gt;
     c. Gather Email addresses/targets&lt;br /&gt;
     d. Identify potential phishing sites&lt;br /&gt;
     e. Creation of spoofed emails&lt;br /&gt;
         i. Custom footers&lt;br /&gt;
         ii. Attack Scenarios&lt;br /&gt;
         iii. Email header options&lt;br /&gt;
&lt;br /&gt;
f. Test Environment: Review the spoofed email and phishing site&lt;br /&gt;
&lt;br /&gt;
g. Send attack&lt;br /&gt;
&lt;br /&gt;
h. Monitor: Discuss steps to take at this point once the users send in credentials.&lt;br /&gt;
&lt;br /&gt;
i. Advanced Phishing Attacks: Recon, XSS/CSRF/Browser Exploit/Trojan payloads&lt;br /&gt;
&lt;br /&gt;
j. MITM Attacks on 2-factor Authentication&lt;br /&gt;
&lt;br /&gt;
k. Summary&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Web server/services hardening using SELinux ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Pavol Luptak&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Security-Enhanced Linux (SELinux) is a FLASK implementation integrated in the Linux kernel with a number of utilities designed to provide mandatory access controls (MAC) through the use of Linux Security Modules (LSM) in the Linux kernel. SELinux generally supports many kinds of mandatory access control policies, including those based on the concepts of type enforcement, role-based access control, and multi-level security. &lt;br /&gt;
&lt;br /&gt;
A Linux kernel integrating SELinux enforces mandatory access control policies that confine user programs and system servers to the minimum amount of privilege they require to do their jobs. This reduces or eliminates the  ability of these programs and daemons to cause harm when compromised (via buffer overflows or misconfigurations, for example). This confinement  mechanism operates independently of the traditional Linux access control  mechanisms. It has no concept of a &amp;quot;root&amp;quot; super-user, and does not share the  well-known shortcomings of the traditional Linux security mechanisms (such as a dependence on setuid/setgid binaries).&lt;br /&gt;
&lt;br /&gt;
This training provides basic concepts of SELinux, its differences to classical UNIX/Linux systems, describe security advantages of mandatory access control policies and teach how to effectively and rapidly configure a fully functional LAMP environment on SELinux system.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Security consultants, system administators, programmers focused on system security&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
1. SELinux history&lt;br /&gt;
&lt;br /&gt;
2. Unix/Linux DAC (Discretionary Access Control) and its problems&lt;br /&gt;
&lt;br /&gt;
3. MAC (Mandatory Access Control)&lt;br /&gt;
&lt;br /&gt;
4. Advantages of using MAC &lt;br /&gt;
&lt;br /&gt;
5. DTE (Domain Type Enforcement) model&lt;br /&gt;
&lt;br /&gt;
6. RBAC (Roles Based Access Control) model&lt;br /&gt;
&lt;br /&gt;
7. MLS (Multi Level Security) model&lt;br /&gt;
&lt;br /&gt;
8. SELinux FLASK Architecture&lt;br /&gt;
&lt;br /&gt;
9. SELinux policy (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
10. File System Security Contexts (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
11. SELinux Object Classes and Permissions&lt;br /&gt;
&lt;br /&gt;
12. TE (Type Enforcement) Rules (Attributes, Type Declaration, Type Transitions, Domain Type Transitions, Object Labeling Transitions, Access Vectors)&lt;br /&gt;
&lt;br /&gt;
13. Understanding AVC, log messages&lt;br /&gt;
&lt;br /&gt;
14. audit2allow and audit2why (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
15. SELinux Troubleshoot Tool (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
16. Auditing and Auditing tools&lt;br /&gt;
&lt;br /&gt;
17. Policy Macros&lt;br /&gt;
&lt;br /&gt;
18. Backtracking rule (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
19. SELinux Users, Roles, MLS Levels&lt;br /&gt;
&lt;br /&gt;
20. Strict Policy&lt;br /&gt;
&lt;br /&gt;
21. Targeted Policy&lt;br /&gt;
&lt;br /&gt;
22. SELinux Booleans and their use for Apache web server (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
23. Files and Directories in Targeted Policy, common SELinux Macros (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
24. Analyzing Example Policy - apache.te (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
25. Assigning Object and Process Types &lt;br /&gt;
&lt;br /&gt;
26. SELinux Booting&lt;br /&gt;
&lt;br /&gt;
27. Copying and moving files, checking security contexts, relabeling a file and directory's security context (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
28. Policy core utilities&lt;br /&gt;
&lt;br /&gt;
29. Managing File Labeling, Relabeling a File System (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
30. SELinux Administrator GUI (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
31. SELinux Modules (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
32. Hardening existing LAMP environments using SELinux (EXERCISE)&lt;br /&gt;
&lt;br /&gt;
33. Writing New Policy for a Daemon (EXERCISE for clever students)&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Bring your own laptop. Each student will have own SELinux virtual machine for his experiments.&lt;br /&gt;
&lt;br /&gt;
== Secure Programming with Java ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Lucas C. Ferreira&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 Day&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
This training class will present best practices of secure programming in the Java language. It includes Java specific practices (i.e. how to avoid problems that arise from the compilation of Java source code to the bytecode language used by the JVM) and practices that may arise in other programming languages (with examples in Java). Some tools that may be used to verify the security of Java code and systems will be shown.&lt;br /&gt;
&lt;br /&gt;
The topics include a quick overview of the OWASP Top 10, in order to contextualize the practices presented, and several best practices aimed at the different software layers. At the presentation layer, we focus on input validation, access control issues and dealing with exceptions. At the business objects layer, the practices deal with cloning and serialization issues. Practices to prevent command injection are presented at the persistence layer. Practices that should be used throughout all the software are also presented, including input data validation, class and method visibility, using and storing secrets, dealing with inner classes, overflows and boxing, and object initialization.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Java web application developers. This training requires basic understanding of web applications and an intermediate level of proficiency in the Java language and Object Oriented concepts. People with interest in other OO languages may also benefit from this training, but specific techniques, examples and tools used are targeted to Java.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
# OWASP Top 10 - quick overview&lt;br /&gt;
# Secure Programming Best Practices&lt;br /&gt;
## Presentation layer&lt;br /&gt;
### Preventing cross-site scripting&lt;br /&gt;
### Access control&lt;br /&gt;
### Request validation&lt;br /&gt;
### Error treatment&lt;br /&gt;
## Business object layer&lt;br /&gt;
### Cloning and serialization issues&lt;br /&gt;
## Persistence layer&lt;br /&gt;
### Command injection issues&lt;br /&gt;
### Database access users and permissions&lt;br /&gt;
### file manipulation&lt;br /&gt;
## Infra-structure layer&lt;br /&gt;
### J2EE container-related best practices&lt;br /&gt;
### Native method issues&lt;br /&gt;
### SSL and encryption&lt;br /&gt;
## Practices for all software layers&lt;br /&gt;
### Data validation&lt;br /&gt;
### Garbage collection issues&lt;br /&gt;
### Classes and method scoping&lt;br /&gt;
### Use of secrets&lt;br /&gt;
### Inner class issues&lt;br /&gt;
### Over/underflow and boxing issues&lt;br /&gt;
# Tools&lt;br /&gt;
## Code review tool&lt;br /&gt;
## Data flow tool&lt;br /&gt;
## Pen-testing tool&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Due to the lack of time, we will only show tool usage (no practical exercises with the audience).&lt;br /&gt;
&lt;br /&gt;
== Advanced Web Application Penetration Testing ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Leading, Planning, and Executing an Application Security Initiative==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Foundations of Web Application Security==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Secure Coding .NET Web Applications==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Building Secure Rich Internet Applications==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Web Application Security - Advanced Attacks and Defense==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Aspect Security&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== What Developers Should Know on Web Application Security==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Sebastien Deleersnyder and Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
4 h&lt;br /&gt;
To be scheduled on Wednesday afternoon Nov 5.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Application security is an essential component of any successful project; this includes web applications, open source PHP applications, web services and proprietary business web sites.&lt;br /&gt;
Web application security education and awareness is needed throughout the entire development and deployment organization. Each area and level of development or deployment organizations have specific needs and requirements regarding web application security education. A manager needs other information than a security professional or developer. Novices to the profession require other training than people with several years of experience.&lt;br /&gt;
&lt;br /&gt;
The OWASP Education project aims to provide in building blocks of web application security information. These modules can be combined together in education tracks targeting different audiences.&lt;br /&gt;
This Education Track provides in a 4 hour session covering what developers should know on web application security. It starts with an explanation of web application security and why it is important. Then the OWASP Top 10 is used to explain the nastiest vulnerabilities and how these can be prevented or re mediated. A secure coding initiative must deal with all stages of a program’s life cycle. Secure web applications are only possible when a secure SDLC is used. The SDLC is explained from the standpoint of people, processes and tools. Particularly for developers good secure development practices are covered in a separate topic. Finally the track finishes with an exhaustive list of web application security resources for web application developers.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Web application developers who are unaware there are security issues with contemporary web applications. No prior knowledge of web application security is assumed nor necessary. This track is independent of the coding language or web frameworks used; like PHP, JSF, Java EE or .NET. We must realize that web application developers are only one link - albeit an important one - of the chain that represents the security of a web application. This track aims to make that link as secure as possible, given the constraint of 4 hours. Another important aspect is that web application security should be tailored to the risk profile of an organization and the specific development environment of that organization.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
The challenge is to cover web application security in 4 hours to a web application developer. This is presented in such a way that the developers will be able to recognize and correct web application vulnerabilities in their projects. &lt;br /&gt;
&lt;br /&gt;
* [[Education Module Why WebAppSec Matters|Why WebAppSec matters]] (20 min) ([http://www.owasp.org/images/5/58/Education_Module_Why_WebAppSec_Matters.ppt direct link])&lt;br /&gt;
:This part is the introduction of the track. It identifies the current security problems with web applications. During the introduction a definition of web application security is given. Trends that are influencing the current state of web application insecurity are also explained.&lt;br /&gt;
:*What goes wrong&lt;br /&gt;
:*WebAppSec Defined&lt;br /&gt;
:*Current trends&lt;br /&gt;
* [[Education_Module_OWASP_Top_10_Introduction_and_Remedies|OWASP Top 10 Introduction &amp;amp; Remedies]] (90 min) ([http://www.owasp.org/images/b/b8/Education_Module_OWASP_Top_10_Introduction_and_Remedies.ppt direct link])&lt;br /&gt;
:The primary aim of the OWASP Top 10 is to educate developers, designers, architects and organizations about the consequences of the most common web application security vulnerabilities. The Top 10 provides basic methods to protect against these vulnerabilities.&lt;br /&gt;
:*[[Education Module Cross Site Scripting (XSS)|Cross Site Scripting (XSS)]]&lt;br /&gt;
:*Injection Flaws&lt;br /&gt;
:*Malicious File Execution&lt;br /&gt;
:*Insecure Direct Object Reference&lt;br /&gt;
:*Cross Site Request Forgery (CSRF)&lt;br /&gt;
:*Information Leakage and Improper Error Handling&lt;br /&gt;
:*Broken Authentication and Session Management&lt;br /&gt;
:*Insecure Cryptographic Storage&lt;br /&gt;
:*Insecure Communications&lt;br /&gt;
:*Failure to Restrict URL Access&lt;br /&gt;
*[[Education Module Embed within SDLC|Embed within SDLC]] (People, Processes &amp;amp; Tools) (20 min) ([http://www.owasp.org/images/f/f2/Education_Module_Embed_within_SDLC.ppt direct link])&lt;br /&gt;
:There is no silver bullet when it comes to securing web applications. This problem has to be addressed from different angles, covering the involved actors, processes: development as well as deployment and Technologies.&lt;br /&gt;
:*People Awareness and Education&lt;br /&gt;
:*Development WebAppSec Controls&lt;br /&gt;
:*Deployment WebAppSec Controls&lt;br /&gt;
:*WebAppSec Tools&lt;br /&gt;
*[[Education Module Good Secure Development Practices|Good Secure Development Practices]] (70 min) ([http://www.owasp.org/images/5/57/Education_Module_Good_Secure_Development_Practices.ppt direct link])&lt;br /&gt;
:Next to the Top 10 remedies this module provides some good secure development practices from the OWASP Guide, covering e.g.&lt;br /&gt;
:*Validating User Input &lt;br /&gt;
:*Authentication&lt;br /&gt;
:*Authorization&lt;br /&gt;
:*Session Management&lt;br /&gt;
:*Using Interpreters&lt;br /&gt;
:*Crypto&lt;br /&gt;
:*Catching Errors&lt;br /&gt;
:*File System&lt;br /&gt;
:*Configuration&lt;br /&gt;
:*Web 2.0&lt;br /&gt;
*[[Education Module Testing for Vulnerabilities|Testing for Vulnerabilities]] (20 min) ([http://www.owasp.org/images/4/49/Education_Module_Testing_for_Vulnerabilities.ppt direct link])&lt;br /&gt;
:One important aspect is to test for application vulnerabilities. During this short module an introduction is provided together with some WebGoat test cases.&lt;br /&gt;
:*Testing for application vulnerabilities&lt;br /&gt;
:*The OWASP Testing Guide&lt;br /&gt;
:*WebGoat demonstrated&lt;br /&gt;
*[[Education Module Good WebAppSec Resources|Good WebAppSec Resources]] (not limited to OWASP) (10 min) ([http://www.owasp.org/images/f/fe/Education_Module_Good_WebAppSec_Resources.ppt direct link])&lt;br /&gt;
:This 4 hour education track in only the beginning of your journey. Web application security is a moving target. New vulnerabilities and threats are discovered regularly. Web application security controls are becoming mature. The following resources should provide you with enough pointers to serve both as reference and for further research.&lt;br /&gt;
:*Hard Copy&lt;br /&gt;
:*Web Sites&lt;br /&gt;
:*Mailing lists&lt;br /&gt;
:*Blogs&lt;br /&gt;
*Roundup (10 min)&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Education Project]]&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
No specific prerequisites.&lt;br /&gt;
&lt;br /&gt;
== Linux Software Exploitation ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Nam Nguyen&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
2 days&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
This course is a primer into software exploitation on the Linux environment. The course assumes only basic understanding of the Linux commands, and C programming with the standard library. It explains the computer architecture, assembly language then moves on to three basic classes of security bug: buffer overflow, format string, and race condition and methods to take advantage of them. Throughout the course, various examples are introduced with increasing difficulty so that participants will naturally realize the art of software exploitation for themselves.&lt;br /&gt;
&lt;br /&gt;
This course does not discuss about shell coding. Except on one example where provided shell code is used as an illustration, all other challenges require only good analysis and calculation.&lt;br /&gt;
&lt;br /&gt;
The course is conducted as a workshop with heavy interaction between participants and instructor. There will not be any presentation slide. Participants are to take note during the course.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Software developers, system administrators, security engineers with some experience in Linux and C programming.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
# Computer architecture&lt;br /&gt;
# Assembly language&lt;br /&gt;
# Buffer overflow&lt;br /&gt;
# Format string&lt;br /&gt;
# Race condition&lt;br /&gt;
# Techniques&lt;br /&gt;
## Overwrite critical variable&lt;br /&gt;
## Overwrite return address&lt;br /&gt;
## Return to .text&lt;br /&gt;
## Return to libc&lt;br /&gt;
## Overwrite .dtors&lt;br /&gt;
## Overwrite .got&lt;br /&gt;
## Overwrite .bss, functors&lt;br /&gt;
## By pass Advanced Space Layout Randomization&lt;br /&gt;
# Tools of the trade: IDA, GDB, and Python&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Bring your own laptop with VMWare Player or equivalent. An VM image will be provided.&lt;br /&gt;
&lt;br /&gt;
== Classic ASP Security using OWASP tools ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Juan Carlos Calderon&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day &lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Classic ASP 2.0 and 3.0 applications are still largely used as this technology is more than 10 years old and was largely used. there are thousands of sites on the wild that need guidance on the security arena. This is where OWASP can come up and provide help for “making the Web a better place”.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Classic ASP Developers, Application Architects, people with basic ASP knowledge?&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
*Secure programming on ASP using [[ESAPI|OWASP ESAPI]]&lt;br /&gt;
*Auditing ASP code with [[:Category:OWASP_Code_Review_Project|Code Review Project]] checklist&lt;br /&gt;
*Implementing [[:Category:OWASP_Stinger_Project|OWASP Stinger]] protection for Classic ASP &lt;br /&gt;
*ASP specific Best Practices to protect ASP applications.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
None. Keep posted for changes on the table of contents and course specifics.&lt;br /&gt;
&lt;br /&gt;
== Course Name Uncovering WebScarab's Secret Treasures ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Rogan Dawes&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
1 day.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
OWASP WebScarab has a lot of hidden features that probably no one but the author really knows about. This in depth hands on session will show delegates how to access these features, and how to use them to their full potential.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Application reviewers, developers&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Bring your own laptop&lt;br /&gt;
&lt;br /&gt;
== Course Name {template} ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;br /&gt;
&lt;br /&gt;
== Course Name {template} ==&lt;br /&gt;
&lt;br /&gt;
'''Instructor'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Duration'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Audience'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Table of Contents'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here.&lt;br /&gt;
&lt;br /&gt;
'''Course Specifics'''&lt;br /&gt;
&lt;br /&gt;
Please enter the text here. (i.e. bring your own laptop)&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Paid_Participants&amp;diff=38944</id>
		<title>OWASP EU Summit 2008 Paid Participants</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008_Paid_Participants&amp;diff=38944"/>
				<updated>2008-09-09T10:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Provisory list of 'expenses paid' participants    ==&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;7&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;'''PROJECTED CONFERENCE PAID ATTENDEES AND/OR SPEAKERS - NEEDS OWASP BOARD CONFIRMATION''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''NAME'''&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''POSITION/REASON OF ATTENDANCE'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''COUNTRY'''&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#b3b3b3&amp;quot; align=&amp;quot;center&amp;quot;|'''DEPARTURE (AIRPORT/CITY)'''&lt;br /&gt;
 |-&lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP BOARD MEMBERS &amp;amp; EMPLOYEES''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Jeff Williams&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Board, Chair, Wiki, Management&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Washington, D.C. &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dave Wichers &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Board, Conferences, Financials&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Washington, D.C.&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dinis Cruz &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Board, Firehose of Ideas and Money spender&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|UK&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|London&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Tom Brennan &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Board, OWASP Governance&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|New York, NY&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sebastien Deleersnyder &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Board, OWASP Chapters and Projects&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Belgium&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Paulo Coimbra&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Employee, Project Manager&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|UK&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|London&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Kate Hartmann&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Employee, Operations Director&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Washington, D.C.&lt;br /&gt;
 |-&lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP SUMMER OF CODE 2008 PROJECT LEADERS &amp;amp; REVIEWERS''' &lt;br /&gt;
|- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Achim Hoffmann&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Skavenger Project, OWASP w3af Project  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Germany&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Frankfurt or Munich&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Alexander Fry&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Source Code Review OWASP Projects&amp;lt;br&amp;gt;OWASP Teachable Static Analysis Workbench&amp;lt;br&amp;gt;OWASP WeBekci Project  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Arshan Dabirsiaghi&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP AntiSamy Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Baltimore, MD&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Andrew Petukhov &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Access Control Rules Tester Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Russia&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Moscow&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dmitry Kozlov &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Teachable Static Analysis, OWASP Application Security Tool Benchmarking Environment and Site Generator Refresh Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Russia&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Moscow&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Arturo Alberto Busleiman &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Enigform and mod_Openpgp &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Argentina&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Carlo Pelliccioni &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Backend Security Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Italy &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rome (FCO)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Deb, LX Studios&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Book Cover &amp;amp; Sleeve Design, OWASP Individual &amp;amp; Corporate Member Packs, Conference Attendee Packs&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Eduardo Vianna de Camargo Neves  &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Positive Security  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Brazil &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Curitiba (CWB)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Wagner Elias  &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviwer, OWASP Positive Security  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Brazil &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|São Paulo(GRU)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Eoin Keary&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Code Review Guide, Chapter Leader &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Ireland&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dublin (DUB)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Esteban Ribicic&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Backend Security Project&amp;lt;br&amp;gt;OWASP Classic ASP Security Project&amp;lt;br&amp;gt;OWASP AntiSamy .NET&amp;lt;br&amp;gt;OWASP Interceptor Project - 2008 Update&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Croatia&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Wien&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Fabio Cerullo&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Internationalization Guidelines Project&amp;lt;br&amp;gt;OWASP Spanish Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Ireland&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dublin (DUB)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Frederick Donovan&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Application Security Desk Reference (ASDR) &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|United States&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Heiko Webers&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Ruby on Rails Security Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Germany&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Frankfurt&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Anthony Shireman&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project reviewer, OWASP Ruby on Rails Security Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Portland, OR (PDX)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Juan Carlos Calderon&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Internationalization Guidelines&amp;lt;br&amp;gt;OWASP Spanish Project&amp;lt;br&amp;gt;OWASP Classic ASP Security Project &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Mexico &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|MMAS - Aguascalientes, Mexico&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Justin Derry&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader &amp;amp; Project Leader, OWASP Interceptor Project &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sydney Australia&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sydney Australia &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Kevin Fuller&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Testing Guide v3&amp;lt;br&amp;gt;OWASP SQL Injector Benchmarking Project (SQLiBENCH)&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sacramento Ca &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Leonardo Cavallari Militelli&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Application Security Desk Reference (ASDR)&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Brazil &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sao Paulo (GRU)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Mark Roxberry&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Leader, OWASP .NET Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Matt Tesauro&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader, OWASP Live CD 2008&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Austin, TX or Dallas, TX&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Matteo Meucci&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader, OWASP Testing Guide&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Italy&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rome&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Matthias Rohr&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Skavenger Project &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Germany &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Michael Coates&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP AppSensor &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chicago&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Nam Nguyen&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Testing Guide v3, Python Static Analysis, OWASP Education&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Vietnam&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Ho Chi Minh City&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|P.Satish Kumar&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Code Review Guide &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|India&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Hyderabad/Mumbai/Chennai&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Paolo Perego&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader, OWASP Orizon Project  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Italy&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Parvathy Iyer &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|OWASP Corporate Application Security Guide &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Newark (New Jersey)or Newyork (Newyork city)&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Pierre Parrend&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP OpenSign Server Project&amp;lt;br&amp;gt;OWASP Application Security Verification Standard &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|France&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Stephen Craig Evans&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Securing WebGoat using ModSecurity &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Singapore&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Singapore&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Jason Li&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP JSP Testing Tool&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Baltimore&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Gandhi Aryavalli Sriranga Narasimha&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Application Security Desk Reference (ASDR)&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|India &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Bangalore&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rodrigo Marcos&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP Internationalization Guidelines Project&amp;lt;br&amp;gt;OWASP Spanish Project&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|UK&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|London&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Marcin Wielgoszewski&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Reviewer, OWASP AntiSamy.NET&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|New York, NY&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |-&lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP SUMMER OF CODE 2008 SPECIAL PROJECT CONTRIBUTORS''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |-&lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP SUMMER OF CODE 2008/LOGISTICS''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Sarah Cruz&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, Graphic Design &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|UK&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|London&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |-&lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP SPRING OF CODE 2007 PROJECT LEADERS &amp;amp; REVIEWERS''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Joshua Perrymon&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project Leader, OWASP LiveCD, OWASP Phishing Framework, Alabama Chapter Lead&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Birmingham,AL&lt;br /&gt;
 |- &lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP AUTUMN OF CODE 2006 PROJECT LEADERS &amp;amp; REVIEWERS''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rogan Dawes &lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, WebScarab-NG &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|South Africa&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Johannesburg, South Africa&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Simon Roses Femerling&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Project leader, OWASP Pantera&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Spain&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''ACTIVE PROJECT LEADERS (NOT CURRENTLY PARTICIPATING ON SOC 08)''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Alex Smolen&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;| Project leader, .NET ESAPI &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
  |- &lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''ACTIVE CHAPTER LEADERS (NOT CURRENTLY PARTICIPATING ON SOC 08)''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Antti Laulajainen&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader, Helsinki     &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Finland&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Steve Antoniewicz&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter Board Member, NY/NJ Metro  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Kuai Hinojosa&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader, Twin-Cities &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &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:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader/founder, Hawaii&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Hawaii, USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Anahola, Island of Kauai&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Rex Booth&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader, Washington DC  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|USA&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|?&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Andrzej Targosz&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Chapter leader, Poland  &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Poland&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Cracow&lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''SIGNIFICANT PAST OWASP CONTRIBUTOR (THAT IS NOT ALREADY COVERED BY ONE OF THE ABOVE CATEGORIES)''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|David Rook&lt;br /&gt;
 | style=&amp;quot;width:40%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Code Review Guide Contributor, Irish Chapter Contributor&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Ireland&lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Dublin (DUB)&lt;br /&gt;
 |- &lt;br /&gt;
 ! colspan=&amp;quot;7&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;background:white; color:black&amp;quot;|&amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;'''OWASP NON-INDIVIDUAL MEMBERS''' &lt;br /&gt;
 |- &lt;br /&gt;
 | style=&amp;quot;width:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|Name&lt;br /&gt;
 | style=&amp;quot;width:40%; 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:20%; background:#cccccc&amp;quot; align=&amp;quot;center&amp;quot;|&lt;br /&gt;
 |- &lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:RoganDawes&amp;diff=33817</id>
		<title>User:RoganDawes</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:RoganDawes&amp;diff=33817"/>
				<updated>2008-07-10T16:51:10Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: New page: This page contains some information about Rogan Dawes  === OWASP Projects ===  Rogan is the lead developer of the OWASP WebScarab and WebScarab-NG projects.  He is also a contributor to th...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about Rogan Dawes&lt;br /&gt;
&lt;br /&gt;
=== OWASP Projects ===&lt;br /&gt;
&lt;br /&gt;
Rogan is the lead developer of the OWASP WebScarab and WebScarab-NG projects. &lt;br /&gt;
He is also a contributor to the OWASP ESAPI project.&lt;br /&gt;
He has made substantial contributions to the OWASP WebGoat project.&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008&amp;diff=33201</id>
		<title>OWASP EU Summit 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_EU_Summit_2008&amp;diff=33201"/>
				<updated>2008-07-02T18:03:16Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(WORK IN PROGRESS /UNDER DISCUSSION)&lt;br /&gt;
== UPDATES ==&lt;br /&gt;
*[[OWASP EU Summit 2008 - updates|'''OWASP EU Summit 2008 - updates''']]&lt;br /&gt;
&lt;br /&gt;
== What: OWASP Summit, a conference about OWASP and for OWASP's community ==&lt;br /&gt;
=== When: 4 to 7 Nov 2008 (4 &amp;amp; 5: Meetings and Training, 6 &amp;amp; 7: Conference) === &lt;br /&gt;
=== Where: Portugal ===&lt;br /&gt;
Faro or Lisbon&lt;br /&gt;
=== Organization===&lt;br /&gt;
Paulo Coimbra and Dinis Cruz&lt;br /&gt;
== Agenda ==&lt;br /&gt;
Theme: Present OWASP's projects, community and activities  .....     '....Connecting the dots.... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Day 1 &amp;amp; 2'''&lt;br /&gt;
*Training sessions (similar to what happens at the moment at the other OWASP conferences)&lt;br /&gt;
*OWASP Working Group sessions (1/2 day each) on:&lt;br /&gt;
** OWASP Governance, &amp;quot;What is OWASP's position on ....&amp;quot; &amp;amp; Action Plan for 2009&lt;br /&gt;
** ESAPI&lt;br /&gt;
** Browser Security&lt;br /&gt;
** OWASP Top 10 2009&lt;br /&gt;
&lt;br /&gt;
'''Day 3 &amp;amp; 4 Agenda:'''&lt;br /&gt;
* Presentations from AoC, SpoC and SoC Participants&lt;br /&gt;
* Presentations from 'Release' Quality OWASP projects (not included in the list above) or Key OWASP projects (like ESAPI)&lt;br /&gt;
* Presentations about OWASP : How it works, Financial reports, OotM (OWASP on the Move), new project management guidelines, local chapter finances, OWASP governance &lt;br /&gt;
* Presentation from Chapter leaders on the activities developed on their project&lt;br /&gt;
* Discussion on next steps for OWASP and focus of next OWASP financial investment plans&lt;br /&gt;
&lt;br /&gt;
Other ideas:&lt;br /&gt;
&lt;br /&gt;
* vote on 6th OWASP board member (Candidates to Apply)&lt;br /&gt;
&lt;br /&gt;
== other details==&lt;br /&gt;
&lt;br /&gt;
'''Projected Attendees:450 '''&lt;br /&gt;
* 200 with some (or all) expenses covered by OWASP&lt;br /&gt;
** 33 SoC participants&lt;br /&gt;
** 70 SoC reviewers&lt;br /&gt;
** 10 SoC Collaborators&lt;br /&gt;
** 15 AoC &amp;amp; SpoC participants&lt;br /&gt;
** 15 Chapter Leaders&lt;br /&gt;
** 8 OWASP Board &amp;amp; Employees&lt;br /&gt;
** 49 OWASP non-individual members (2x per 9k Corporate? 1x for the others?)&lt;br /&gt;
&lt;br /&gt;
=== Financial details ===&lt;br /&gt;
'''Expenses'''&lt;br /&gt;
* Accommodation &amp;amp; meals: 80,000 USD  = 400 USD per person (200x) for 3 nights accommodation  and 5 meals (3 dinners and 2 lunches)&lt;br /&gt;
* Flights &amp;amp;  Trains : 70,000 USD&lt;br /&gt;
&lt;br /&gt;
'''Revenue sources'''&lt;br /&gt;
* Tickets (for the 250 non 'OWASP invited' attendees)&lt;br /&gt;
* Training Sessions&lt;br /&gt;
* Conference sponsors&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
=== OWASP Board members &amp;amp; employees ===&lt;br /&gt;
* Jeff Williams &lt;br /&gt;
* Dave Wichers &lt;br /&gt;
* Dinis Cruz &lt;br /&gt;
* Tom Brennan &lt;br /&gt;
* Sebastien Deleersnyder &lt;br /&gt;
* Paulo Coimbra&lt;br /&gt;
* Kate Hartmann (to be confirmed)&lt;br /&gt;
* Alison McNamee (to be confirmed)&lt;br /&gt;
* Larry Casey (to be confirmed)&lt;br /&gt;
&lt;br /&gt;
=== Summer of Code 08 Participants &amp;amp; Reviewers ===&lt;br /&gt;
* (please add your name in the following format)&lt;br /&gt;
* OWASP Classic ASP Security Project&lt;br /&gt;
**Reviewer Esteban Ribicic Argentina -living in Croatia/Wien-&lt;br /&gt;
**Project Lead - Juan Carlos Calderon - Mexico&lt;br /&gt;
* OWASP Internationalization Guidelines &lt;br /&gt;
**Reviewer Esteban Ribicic Argentina -living in Croatia/Wien-&lt;br /&gt;
**Project Lead - Juan Carlos Calderon - Mexico&lt;br /&gt;
* OWASP Spanish Project Reviewer Esteban Ribicic&lt;br /&gt;
**Reviewer Esteban Ribicic Argentina -living in Croatia/Wien-&lt;br /&gt;
**Project Lead - Juan Carlos Calderon - Mexico&lt;br /&gt;
* OWASP Ruby on Rails Security Project Leader Heiko Webers from Germany&lt;br /&gt;
* OWASP Code Review Guide Lead - Eoin Keary - Ireland&lt;br /&gt;
* OWASP Enigform and mod_Openpgp - Arturo Alberto Busleiman (a.k.a Buanzo) - Argentina&lt;br /&gt;
* OWASP AppSensor - Michael Coates - United States&lt;br /&gt;
* OWASP ASDR - Leonardo Cavallari Militelli - Brazil&lt;br /&gt;
*OWASO Corporate Application security guide- Parvathy Iyer- USA&lt;br /&gt;
* OWASP Backend Security Project - Carlo Pelliccioni - Italy&lt;br /&gt;
&lt;br /&gt;
=== Winter of Code 07 Participants (Completed Projects) ===&lt;br /&gt;
* (please add your name)&lt;br /&gt;
* {Project} {Name} {Origin Country}&lt;br /&gt;
&lt;br /&gt;
=== Autumn of Code 06 Participants ===&lt;br /&gt;
* (please add your name)&lt;br /&gt;
* {Project} {Name} {Origin Country}&lt;br /&gt;
&lt;br /&gt;
* WebScarab-NG, Rogan Dawes, South Africa&lt;br /&gt;
* OWASP Pantera, Simon Roses Femerling, Spain&lt;br /&gt;
&lt;br /&gt;
=== Active Chapter Leaders ===&lt;br /&gt;
* (please add your name in the following format)&lt;br /&gt;
* {Chapter} {Role} {Name} {Origin Country}&lt;br /&gt;
* NY/NJ Metro Board Member - Steve Antoniewicz, USA&lt;br /&gt;
&lt;br /&gt;
=== Active Project Leaders (not currently participating on SoC 08)===&lt;br /&gt;
* (please add your name in the following format)&lt;br /&gt;
* {Project} {Role} {Name} {Origin Country}&lt;br /&gt;
&lt;br /&gt;
=== Significant Past OWASP contributor (that is not already covered by one of the above categories) ===&lt;br /&gt;
* (please add your name in the following format)&lt;br /&gt;
* {Project/Chapter} {Role} {Name} {Origin Country}&lt;br /&gt;
&lt;br /&gt;
=== Logistic and Support team ===&lt;br /&gt;
* Summit Graphic Design + Summit organization + on-site logistics support, Sarah Cruz, UK (London)&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=28395</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=28395"/>
				<updated>2008-04-24T16:25:05Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: update the list of differences&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG now also has the Transcoder functionality, implemented as a non-modal dialog. It is intended to also implement &amp;quot;right-click&amp;quot; menus to perform various transcoding operations &amp;quot;in-place&amp;quot; in arbitrary text fields.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy, Manual Request and WebServices plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is partially completed. Currently it is sufficient to access the WebGoat web service, but it doesn't support complex types. This functionality could easily be added if desired.&lt;br /&gt;
&lt;br /&gt;
==HTTP Protocol support==&lt;br /&gt;
&lt;br /&gt;
WebScarab-classic has support for authentication to servers using SSL client certificates (including those stored on a smart card), as well as using NTLM. NG does not currently support SSL client certificates at all. NTLM should be supported through the Apache HTTPClient library, but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. An alternate packaging has been created, using the Maven onejar plugin, which packages all the required jars into a subdirectory of the &amp;quot;onejar&amp;quot;, and provides a specialised classloader to allow Java to access the contents of those jars.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=25152</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=25152"/>
				<updated>2008-02-06T15:05:10Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Http protocol support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG now also has the Transcoder functionality, implemented as a modal dialog. It is intended to also implement &amp;quot;right-click&amp;quot; menus to perform various transcoding operations &amp;quot;in-place&amp;quot; in arbitrary text fields.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy, Manual Request and WebServices plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is partially completed. Currently it is sufficient to access the WebGoat web service, but it doesn't support complex types. This functionality could easily be added if desired.&lt;br /&gt;
&lt;br /&gt;
==HTTP Protocol support==&lt;br /&gt;
&lt;br /&gt;
WebScarab-classic has support for authentication to servers using SSL client certificates (including those stored on a smart card), as well as using NTLM. NG does not currently support SSL client certificates at all. NTLM should be supported through the Apache HTTPClient library, but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. An alternate packaging has been created, using the Maven onejar plugin, which packages all the required jars into a subdirectory of the &amp;quot;onejar&amp;quot;, and provides a specialised classloader to allow Java to access the contents of those jars.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24678</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24678"/>
				<updated>2008-01-25T16:58:40Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG now also has the Transcoder functionality, implemented as a modal dialog. It is intended to also implement &amp;quot;right-click&amp;quot; menus to perform various transcoding operations &amp;quot;in-place&amp;quot; in arbitrary text fields.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy, Manual Request and WebServices plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is partially completed. Currently it is sufficient to access the WebGoat web service, but it doesn't support complex types. This functionality could easily be added if desired.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. An alternate packaging has been created, using the Maven onejar plugin, which packages all the required jars into a subdirectory of the &amp;quot;onejar&amp;quot;, and provides a specialised classloader to allow Java to access the contents of those jars.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24677</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24677"/>
				<updated>2008-01-25T16:56:32Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Status update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG does not yet have the Transcoder functionality.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy, Manual Request and WebServices plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is partially completed. Currently it is sufficient to access the WebGoat web service, but it doesn't support complex types. This functionality could easily be added if desired.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. An alternate packaging has been created, using the Maven onejar plugin, which packages all the required jars into a subdirectory of the &amp;quot;onejar&amp;quot;, and provides a specialised classloader to allow Java to access the contents of those jars.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_WebGoat_Project&amp;diff=24403</id>
		<title>Category:OWASP WebGoat Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_WebGoat_Project&amp;diff=24403"/>
				<updated>2008-01-14T09:31:06Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Newest Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Webgoat-xss lesson.jpg|thumb|300px|right|WebGoat in action]]&lt;br /&gt;
'''WebGoat''' is a deliberately insecure J2EE web application maintained by [http://www.owasp.org OWASP] designed to teach web application security lessons. In each lesson, users must demonstrate their understanding of a security issue by exploiting a real vulnerability in the WebGoat application. For example, in one of the lessons the user must use [[SQL injection]] to steal fake credit card numbers. The application is a realistic teaching environment, providing users with hints and code to further explain the lesson.&lt;br /&gt;
&lt;br /&gt;
Why the name &amp;quot;WebGoat&amp;quot;? Developers should not feel bad about not knowing security. Even the best programmers make security errors. What they need is a scapegoat, right? ''Just blame it on the 'Goat''!&lt;br /&gt;
&lt;br /&gt;
'''To get started, read the [[WebGoat User and Install Guide Table of Contents|WebGoat User and Install Guide]]'''&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
Web application security is difficult to learn and practice. Not many people have full blown web applications like online book stores or online banks that can be used to scan for vulnerabilities. In addition, security professionals frequently need to test tools against a platform known to be vulnerable to ensure that they perform as advertised. All of this needs to happen in a safe and legal environment. Even if your intentions are good, we believe you should never attempt to find vulnerabilities without permission.&lt;br /&gt;
&lt;br /&gt;
The primary goal of the WebGoat project is simple: ''create a de-facto interactive teaching environment for web application security''. In the future, the project team hopes to extend WebGoat into becoming a security benchmarking platform and a Java-based Web site Honeypot.&lt;br /&gt;
&lt;br /&gt;
Check out the project [[OWASP WebGoat Project Roadmap|roadmap]] and find some tasks that you can help with right away.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
You can download WebGoat from the [http://sourceforge.net/project/showfiles.php?group_id=64424&amp;amp;package_id=61824 OWASP Source Code Center at Sourceforge]. There are versions with and without Java, and installation only requires unzipping the download and running a start script. For convenience, a ready-to-deploy WAR file is also made available to drop right into your J2EE application server.&lt;br /&gt;
&lt;br /&gt;
You can download the WebGoat source code from [http://code.google.com/p/webgoat/ Google code].&lt;br /&gt;
&lt;br /&gt;
The WebGoat distributions are now available at [http://code.google.com/p/webgoat/downloads/list Google code downloads].  The Windows WebGoat release (unzip, click, and run) is only available at Sourceforge due to file size limits.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
[[Image:Webgoat-BasicAuth lesson.jpg|thumb|300px|right|The multi-stage Basic Authentication lesson]]&lt;br /&gt;
WebGoat is written in Java and therefore installs on any platform with a Java virtual machine. There are installation programs for Linux, OS X Tiger and Windows. Once deployed, the user can go through the lessons and track their progress with the scorecard. There are currently over 30 lessons, including those dealing with the following issues:&lt;br /&gt;
{|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
* [[Cross Site Scripting]]&lt;br /&gt;
* Access Control&lt;br /&gt;
* [[Race condition within a thread|Thread Safety]]&lt;br /&gt;
* [[Unvalidated_Input|Hidden Form Field Manipulation]]&lt;br /&gt;
* Parameter Manipulation&lt;br /&gt;
* [[Session_Management#Weak_Session_Cryptographic_Algorithms|Weak Session Cookies]]&lt;br /&gt;
* Blind [[SQL injection|SQL Injection]]&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|  &lt;br /&gt;
* Numeric SQL Injection&lt;br /&gt;
* String SQL Injection&lt;br /&gt;
* [[Web Services]]&lt;br /&gt;
* [[Improper_Error_Handling|Fail Open Authentication]]&lt;br /&gt;
* Dangers of HTML Comments&lt;br /&gt;
* ... and many more!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For more details, please see the [[WebGoat User and Install Guide Table of Contents | WebGoat User and Install Guide]].&lt;br /&gt;
&lt;br /&gt;
== Newest Release ==&lt;br /&gt;
&lt;br /&gt;
'''WebGoat 5.1 Release Candidate 1''' is available.  This new release is platform independent.  This release features:&lt;br /&gt;
&lt;br /&gt;
  * a new &amp;quot;show solution&amp;quot; feature&lt;br /&gt;
  * Phishing lesson&lt;br /&gt;
  * New database lessons - for Oracle and MS SQL Server databases only&lt;br /&gt;
  * Multi-stage architecture which allows random access to lab stages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''WebGoat 5.0'''&lt;br /&gt;
&lt;br /&gt;
'''WebGoat 5.0''' has been released. Special thanks to the many people who have sent comments and suggestions and those who have put in the effort to contribute their time to this release. &lt;br /&gt;
&lt;br /&gt;
The 5.0 release would not have been possible without the efforts of Sherif Koussa and [http://www.owasp.org/index.php/Owasp_Autumn_Of_Code_2006 OWASP Autumn of Code 2006].&lt;br /&gt;
&lt;br /&gt;
Please send all comments to '''webgoat AT owasp.org''' regarding this release candidate. A final release is scheduled for the end of January&lt;br /&gt;
&lt;br /&gt;
== Future Development ==&lt;br /&gt;
&lt;br /&gt;
WebGoat 5.1 - Estimated release date: Fall 2007&lt;br /&gt;
&lt;br /&gt;
WebGoat 5.1 - Is now available via svn at google code&lt;br /&gt;
&lt;br /&gt;
If you would like to become a member of the WebGoat source code project hosted at [http://code.google.com/p/webgoat/ Google Code] contact Bruce Mayhew at '''webgoat AT owasp.org'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Features in 5.1'''&lt;br /&gt;
&lt;br /&gt;
* Thanks to the OWASP Spring of Code project, Erwin Geirhart has provided a complete solutions guide that is avaliable via a new &amp;quot;show solution&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
* New database lessons&lt;br /&gt;
&lt;br /&gt;
* XSS phishing lesson is available via the source code project at Google.  Using a standard search feature, your mission is to create a &amp;quot;login&amp;quot; form on the page, steal the user credentials, and post the credentials to the WebGoat Catcher servlet.&lt;br /&gt;
&lt;br /&gt;
* Catcher servlet.  Want to prove your attack works?  You can now write lessons where the attack can send sensitive information to the Catcher servlet.  The Catcher servlet will write the posted values into the originating lesson's properties file.&lt;br /&gt;
&lt;br /&gt;
* Documentation.  A draft version of how to solve the WebGoat Labs is available at [http://webgoat.googlecode.com/files/Solving%20the%20WebGoat%20Labs%20Draft%20V2.pdf WebGoat Google Code Downloads]&lt;br /&gt;
&lt;br /&gt;
== Project Contributors ==&lt;br /&gt;
&lt;br /&gt;
The WebGoat project is run by Bruce Mayhew. He can be contacted at '''webgoat AT owasp.org'''.  WebGoat distributions are currently maintained on [[http://www.sourceforge.net SourceForge]]. The WebGoat framework makes it extremely easy to add additional lessons. We are actively seeking developers to add new lessons as new web technologies emerge. If you are interested in volunteering for the project, or have a comment, question, or suggestion, please join the WebGoat [[http://lists.owasp.org/mailman/listinfo/owasp-webgoat mailing list]].&lt;br /&gt;
&lt;br /&gt;
== Project Sponsors ==&lt;br /&gt;
&lt;br /&gt;
The WebGoat project is sponsored by &lt;br /&gt;
[http://www.aspectsecurity.com https://www.owasp.org/images/3/30/100px-Aspect_Security_Logo.jpg]&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24402</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24402"/>
				<updated>2008-01-14T09:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Recategorise this project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG does not yet have the Transcoder functionality.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy and Manual Request plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is in progress.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. Maven does have a fatjar plugin which should be able to construct a single jar with all its dependencies. This needs to be investigated.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project_Technical_Info&amp;diff=24401</id>
		<title>OWASP WebScarab NG Project Technical Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project_Technical_Info&amp;diff=24401"/>
				<updated>2008-01-14T09:18:47Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Recategorise this project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WebScarab (Next Generation) Technical Information'''&lt;br /&gt;
&lt;br /&gt;
==Accessing the HSQL Database==&lt;br /&gt;
&lt;br /&gt;
WebScarab-NG defaults to using the HSQLDB database libraries. If you are interested in digging into the DB manually, here's what you need to know.&lt;br /&gt;
&lt;br /&gt;
===Getting the JAR===&lt;br /&gt;
&lt;br /&gt;
Since WebScarab-NG is only available via Java Web Start at the moment, the HSQLDB libraries are unlikely to be anywhere convenient. So download the [[http://dawes.za.net/rogan/webscarab-ng/webstart/hsqldb-1.8.0.1.jar | jar]], and place it somewhere handy.&lt;br /&gt;
&lt;br /&gt;
===Accessing the DB===&lt;br /&gt;
&lt;br /&gt;
HSQLDB comes with a graphical client that allows you to explore the database, and execute arbitrary SQL.&lt;br /&gt;
&lt;br /&gt;
You can invoke it by running:&lt;br /&gt;
&lt;br /&gt;
    $ java -cp hsqldb-1.8.0.1.jar org.hsqldb.util.DatabaseManager&lt;br /&gt;
&lt;br /&gt;
It will prompt you to connect to the DB, by providing a URL. Simply copy and paste the same URL that you see in the WebScarab-NG dialog.&lt;br /&gt;
&lt;br /&gt;
NOTE: Since it is run &amp;quot;in-process&amp;quot; in WebScarab-NG, it is not possible to access it concurrently from another application. You may be successful running HSQLDB in server mode, and specifying an appropriate URL to WS-NG when it starts, but keep in mind that (at the moment) WS-NG executes &amp;quot;SHUTDOWN&amp;quot; on the DB as it exits, in order to have a clean DB file, and no redo logs, etc. This could be changed if necessary.&lt;br /&gt;
&lt;br /&gt;
===Important tables===&lt;br /&gt;
&lt;br /&gt;
Once you have the DB open, it is just SQL  ;-) &lt;br /&gt;
&lt;br /&gt;
The key table is the &amp;quot;conversations&amp;quot; table.&lt;br /&gt;
&lt;br /&gt;
    conversations.createTable.hsqldb=\&lt;br /&gt;
         CREATE CACHED TABLE conversations (\&lt;br /&gt;
                 session_id INT NOT NULL, \&lt;br /&gt;
                 id INTEGER GENERATED BY DEFAULT AS IDENTITY\&lt;br /&gt;
                         (START WITH 1) PRIMARY KEY,\&lt;br /&gt;
                 source_id INT NOT NULL,\&lt;br /&gt;
                 request_date TIMESTAMP NOT NULL,\&lt;br /&gt;
                 request_method_id INT NOT NULL,\&lt;br /&gt;
                 request_uri_id INT NOT NULL,\&lt;br /&gt;
                 request_version_id INT NOT NULL,\&lt;br /&gt;
                 request_content_id CHAR(32),\&lt;br /&gt;
                 response_version_id INT NOT NULL,\&lt;br /&gt;
                 response_status CHAR(3) NOT NULL,\&lt;br /&gt;
                 response_message_id INT NOT NULL,\&lt;br /&gt;
                 response_content_id CHAR(32)\&lt;br /&gt;
         )&lt;br /&gt;
&lt;br /&gt;
This keeps a record of every conversation that WS-NG knows about. The &lt;br /&gt;
columns should be quite self-explanatory.&lt;br /&gt;
&lt;br /&gt;
This table works in conjunction with the headers and named_values tables &lt;br /&gt;
to record the request and response headers, as well as the blobs table &lt;br /&gt;
to record the request and response content. The blobs table is indexed &lt;br /&gt;
by the MD5 sum of the content.&lt;br /&gt;
&lt;br /&gt;
So it is quite easy to reconstruct a conversation by finding the entry &lt;br /&gt;
in the conversations table, getting the headers from the &lt;br /&gt;
headers/named_values tables, and the content from the blobs table. And &lt;br /&gt;
obviously, the other fields are indexed into appropriate tables &lt;br /&gt;
(method_id -&amp;gt; methods, uri_id -&amp;gt; uris, etc)&lt;br /&gt;
&lt;br /&gt;
Comments on my normalization are welcome - it's been almost 15 years &lt;br /&gt;
since my databases class at university!&lt;br /&gt;
&lt;br /&gt;
===Database schema changes===&lt;br /&gt;
&lt;br /&gt;
Databases created by versions of WebScarab-NG before 20070118 will be incompatible with versions after that date. Certain table columns were renamed to make it easier to accommodate other databases, by avoiding keywords, etc.&lt;br /&gt;
&lt;br /&gt;
If you have an early DB, and would like to regain access to it, you need to run the following script using the DatabaseManager as described above:&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN session RENAME TO session_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN source RENAME TO source_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN date RENAME TO request_date;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN request_method RENAME TO request_method_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN request_uri RENAME TO request_uri_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN request_version RENAME TO request_version_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN request_content_key RENAME TO request_content_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN response_version RENAME TO response_version_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN response_message RENAME TO response_message_id;&lt;br /&gt;
 ALTER TABLE conversations ALTER COLUMN response_content_key RENAME TO response_content_id;&lt;br /&gt;
 ALTER TABLE blobs ALTER COLUMN key RENAME TO id;&lt;br /&gt;
 ALTER TABLE blobs ALTER COLUMN size RENAME TO blob_size;&lt;br /&gt;
 ALTER TABLE blobs ALTER COLUMN blob RENAME TO blob_content;&lt;br /&gt;
 ALTER TABLE headers ALTER COLUMN conversation RENAME TO conversation_id;&lt;br /&gt;
&lt;br /&gt;
which will rename the columns for you.&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
&lt;br /&gt;
If you have any comments or suggestions for WebScarab-NG, please feel free to send them to the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP WebScarab mailing list]&lt;br /&gt;
&lt;br /&gt;
Your feedback is much appreciated, and will be carefully considered for future releases of WebScarab-NG.&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab-NG project is run by Rogan Dawes of Aspect Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project&amp;diff=24400</id>
		<title>OWASP WebScarab NG Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project&amp;diff=24400"/>
				<updated>2008-01-14T09:18:28Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Recategorise this project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Welcome to the WebScarab (Next Generation) Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab-NG is a complete rewrite of the old WebScarab application, with a special focus on making the application more user-friendly. To this end, WebScarab-NG makes use of the [http://spring-rich-c.sourceforge.net/ Spring Rich Client Platform ] to provide the user interface features. By using the Spring Rich Client Platform, WebScarab-NG automatically gains things like default buttons, keyboard shortcuts, support for internationalisation, etc.&lt;br /&gt;
&lt;br /&gt;
Another new feature is that session information is now written into a database, rather than into hundreds or thousands of individual files. This makes disk space utilisation and things like archiving of sessions a lot easier.&lt;br /&gt;
&lt;br /&gt;
Ultimately, WebScarab-NG will have all the significant functionality that the old WebScarab had, although it will be reorganised quite significantly, in order to make the application more user friendly.&lt;br /&gt;
&lt;br /&gt;
==New User Interface==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the user interface has changed quite a lot from the old WebScarab. Apart from the new default Look&amp;amp;Feel (JGoodies), you will see that the conversation viewer has changed quite a lot. The old &amp;quot;Raw&amp;quot; view is still there, but the Parsed version has changed quite dramatically - for the better, I hope you'll agree!&lt;br /&gt;
&lt;br /&gt;
The Parsed view now shows the request and response details in a tree form, rather than in individual text boxes. This makes the interface look a lot cleaner, and more importantly, is a lot more compact. It also makes it a lot easier to include features like automatically breaking out URL parameters, and multiple cookies into their own nodes, where it is a lot easier to view the individual parameters. We also show the request and the response next to each other, rather than one above the other, since most people seem to have more horizontal real-estate than vertical. The split between request and response can easily be adjusted by dragging, as can the split between the headers and the message content.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-default.png]]&lt;br /&gt;
&lt;br /&gt;
==Current status==&lt;br /&gt;
&lt;br /&gt;
At this stage, WebScarab-NG primary feature is the intercepting proxy that allows the operator to observe and modify requests from a browser or other client passing through the proxy. A new feature is the Proxy Control Bar, which is implemented as a &amp;quot;stays on top&amp;quot; tool bar that floats above your browser or other thick client, and allows you to quickly enable or disable request intercepts. It also allows you to annotate or describe the requests as they pass through the proxy. If you type some text into the annotation field, that text will be linked to the next conversation that passes through the proxy, and can later be viewed as part of the conversation history. this can be very helpful to keep track of what you were doing in a multi-step procedure.&lt;br /&gt;
&lt;br /&gt;
For example: Selecting a menu item, entering a value, submitting that value, etc. Often sites are built in such a way that they can result in dozens of conversations resulting from a single action. Annotating that conversation that initiated all the rest makes it very easy to identify them at a later stage.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-proxy-control-bar.png]]&lt;br /&gt;
&lt;br /&gt;
==Error feedback==&lt;br /&gt;
&lt;br /&gt;
One of the neat features provided by the Spring Rich Client Platform is the ability to check that the inputs actually make sense, and to provide automated &amp;quot;as you type&amp;quot; feedback to the user.&lt;br /&gt;
&lt;br /&gt;
For example, look at the &amp;quot;Intercept Request&amp;quot; window:&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-intercept-request-error.png]]&lt;br /&gt;
&lt;br /&gt;
We can see that the user tried to change the method from &amp;quot;POST&amp;quot; to &amp;quot;PROST&amp;quot;. WebScarab-NG has no idea how to execute a &amp;quot;PROST&amp;quot; method, and so provides an error message to inform the user. Additionally, the OK button is automatically disabled, until the error is corrected.&lt;br /&gt;
&lt;br /&gt;
==Obtaining WebScarab-NG==&lt;br /&gt;
&lt;br /&gt;
WebScarab-NG is distributed via Java WebStart, and can be obtained [http://dawes.za.net/rogan/webscarab-ng/webstart/WebScarab-ng.jnlp here].&lt;br /&gt;
&lt;br /&gt;
A major benefit of using Java WebStart is that users will automatically receive new versions of WebScarab-Ng as they are made available, since WebStart checks to see if a new version is available each time it is run. Of course, if it is run with no access to the Internet, it will still run.&lt;br /&gt;
&lt;br /&gt;
 Note: there is an issue with signing the application and Java web start if you are using Java 1.6.&lt;br /&gt;
 We are investigating the solution. In the meantime, you can still use WebScarab NG with an older &lt;br /&gt;
 version of Java (without messing up your system).&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;set PATH=&amp;quot;c:\Program Files\Java\jdk1.5.0_06\bin&amp;quot; or whatever&lt;br /&gt;
  &amp;quot;javaws http://dawes.za.net/rogan/webscarab-ng/webstart/WebScarab-ng.jnlp&lt;br /&gt;
&lt;br /&gt;
Depending on demand, once WebScarab NG matures, it will also be made available for offline installation.&lt;br /&gt;
&lt;br /&gt;
For information about what changes have been made, please see [http://dawes.za.net/gitweb.cgi?p=rogan/webscarab-ng/webscarab-ng.git;a=summary the GIT repository]&lt;br /&gt;
&lt;br /&gt;
If you want to get a copy of the source, you can download a snapshot from the gitweb repository viewer. Alternatively, if you want to check out the repo using git, you can use the following command:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/webscarab-ng/webscarab-ng.git/&lt;br /&gt;
&lt;br /&gt;
You can get any subsequent changes using:&lt;br /&gt;
&lt;br /&gt;
  $ git fetch origin&lt;br /&gt;
&lt;br /&gt;
==Technical information==&lt;br /&gt;
&lt;br /&gt;
Technical information for those interested in digging into it can be found [[ OWASP WebScarab NG Project Technical Info | here]]&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
&lt;br /&gt;
If you have any comments or suggestions for WebScarab-NG, please feel free to send them to the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP WebScarab mailing list]&lt;br /&gt;
&lt;br /&gt;
Your feedback is much appreciated, and will be carefully considered for future releases of WebScarab-NG.&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab-NG project is run by Rogan Dawes of Aspect Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP WebScarab NG Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project&amp;diff=24390</id>
		<title>OWASP WebScarab NG Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_NG_Project&amp;diff=24390"/>
				<updated>2008-01-11T16:03:36Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Obtaining WebScarab-NG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Welcome to the WebScarab (Next Generation) Project'''&lt;br /&gt;
&lt;br /&gt;
WebScarab-NG is a complete rewrite of the old WebScarab application, with a special focus on making the application more user-friendly. To this end, WebScarab-NG makes use of the [http://spring-rich-c.sourceforge.net/ Spring Rich Client Platform ] to provide the user interface features. By using the Spring Rich Client Platform, WebScarab-NG automatically gains things like default buttons, keyboard shortcuts, support for internationalisation, etc.&lt;br /&gt;
&lt;br /&gt;
Another new feature is that session information is now written into a database, rather than into hundreds or thousands of individual files. This makes disk space utilisation and things like archiving of sessions a lot easier.&lt;br /&gt;
&lt;br /&gt;
Ultimately, WebScarab-NG will have all the significant functionality that the old WebScarab had, although it will be reorganised quite significantly, in order to make the application more user friendly.&lt;br /&gt;
&lt;br /&gt;
==New User Interface==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the user interface has changed quite a lot from the old WebScarab. Apart from the new default Look&amp;amp;Feel (JGoodies), you will see that the conversation viewer has changed quite a lot. The old &amp;quot;Raw&amp;quot; view is still there, but the Parsed version has changed quite dramatically - for the better, I hope you'll agree!&lt;br /&gt;
&lt;br /&gt;
The Parsed view now shows the request and response details in a tree form, rather than in individual text boxes. This makes the interface look a lot cleaner, and more importantly, is a lot more compact. It also makes it a lot easier to include features like automatically breaking out URL parameters, and multiple cookies into their own nodes, where it is a lot easier to view the individual parameters. We also show the request and the response next to each other, rather than one above the other, since most people seem to have more horizontal real-estate than vertical. The split between request and response can easily be adjusted by dragging, as can the split between the headers and the message content.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-default.png]]&lt;br /&gt;
&lt;br /&gt;
==Current status==&lt;br /&gt;
&lt;br /&gt;
At this stage, WebScarab-NG primary feature is the intercepting proxy that allows the operator to observe and modify requests from a browser or other client passing through the proxy. A new feature is the Proxy Control Bar, which is implemented as a &amp;quot;stays on top&amp;quot; tool bar that floats above your browser or other thick client, and allows you to quickly enable or disable request intercepts. It also allows you to annotate or describe the requests as they pass through the proxy. If you type some text into the annotation field, that text will be linked to the next conversation that passes through the proxy, and can later be viewed as part of the conversation history. this can be very helpful to keep track of what you were doing in a multi-step procedure.&lt;br /&gt;
&lt;br /&gt;
For example: Selecting a menu item, entering a value, submitting that value, etc. Often sites are built in such a way that they can result in dozens of conversations resulting from a single action. Annotating that conversation that initiated all the rest makes it very easy to identify them at a later stage.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-proxy-control-bar.png]]&lt;br /&gt;
&lt;br /&gt;
==Error feedback==&lt;br /&gt;
&lt;br /&gt;
One of the neat features provided by the Spring Rich Client Platform is the ability to check that the inputs actually make sense, and to provide automated &amp;quot;as you type&amp;quot; feedback to the user.&lt;br /&gt;
&lt;br /&gt;
For example, look at the &amp;quot;Intercept Request&amp;quot; window:&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab-NG-intercept-request-error.png]]&lt;br /&gt;
&lt;br /&gt;
We can see that the user tried to change the method from &amp;quot;POST&amp;quot; to &amp;quot;PROST&amp;quot;. WebScarab-NG has no idea how to execute a &amp;quot;PROST&amp;quot; method, and so provides an error message to inform the user. Additionally, the OK button is automatically disabled, until the error is corrected.&lt;br /&gt;
&lt;br /&gt;
==Obtaining WebScarab-NG==&lt;br /&gt;
&lt;br /&gt;
WebScarab-NG is distributed via Java WebStart, and can be obtained [http://dawes.za.net/rogan/webscarab-ng/webstart/WebScarab-ng.jnlp here].&lt;br /&gt;
&lt;br /&gt;
A major benefit of using Java WebStart is that users will automatically receive new versions of WebScarab-Ng as they are made available, since WebStart checks to see if a new version is available each time it is run. Of course, if it is run with no access to the Internet, it will still run.&lt;br /&gt;
&lt;br /&gt;
 Note: there is an issue with signing the application and Java web start if you are using Java 1.6.&lt;br /&gt;
 We are investigating the solution. In the meantime, you can still use WebScarab NG with an older &lt;br /&gt;
 version of Java (without messing up your system).&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;set PATH=&amp;quot;c:\Program Files\Java\jdk1.5.0_06\bin&amp;quot; or whatever&lt;br /&gt;
  &amp;quot;javaws http://dawes.za.net/rogan/webscarab-ng/webstart/WebScarab-ng.jnlp&lt;br /&gt;
&lt;br /&gt;
Depending on demand, once WebScarab NG matures, it will also be made available for offline installation.&lt;br /&gt;
&lt;br /&gt;
For information about what changes have been made, please see [http://dawes.za.net/gitweb.cgi?p=rogan/webscarab-ng/webscarab-ng.git;a=summary the GIT repository]&lt;br /&gt;
&lt;br /&gt;
If you want to get a copy of the source, you can download a snapshot from the gitweb repository viewer. Alternatively, if you want to check out the repo using git, you can use the following command:&lt;br /&gt;
&lt;br /&gt;
  $ git clone http://dawes.za.net/rogan/webscarab-ng/webscarab-ng.git/&lt;br /&gt;
&lt;br /&gt;
You can get any subsequent changes using:&lt;br /&gt;
&lt;br /&gt;
  $ git fetch origin&lt;br /&gt;
&lt;br /&gt;
==Technical information==&lt;br /&gt;
&lt;br /&gt;
Technical information for those interested in digging into it can be found [[ OWASP WebScarab NG Project Technical Info | here]]&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
&lt;br /&gt;
If you have any comments or suggestions for WebScarab-NG, please feel free to send them to the [http://lists.owasp.org/mailman/listinfo/owasp-webscarab OWASP WebScarab mailing list]&lt;br /&gt;
&lt;br /&gt;
Your feedback is much appreciated, and will be carefully considered for future releases of WebScarab-NG.&lt;br /&gt;
&lt;br /&gt;
==Project Contributors==&lt;br /&gt;
&lt;br /&gt;
The WebScarab-NG project is run by Rogan Dawes of Aspect Security. He can be contacted at rogan AT dawes.za.net&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Chaining_WebScarab_onto_another_proxy&amp;diff=24214</id>
		<title>Talk:Chaining WebScarab onto another proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Chaining_WebScarab_onto_another_proxy&amp;diff=24214"/>
				<updated>2008-01-09T08:59:48Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Answer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Questions ==&lt;br /&gt;
&lt;br /&gt;
'''How do I specify the user name and password for an authenticated Proxy?'''&lt;br /&gt;
&lt;br /&gt;
I am running behind a firewall/proxy that requires authentication. There is no UI for entering a user name and password required for the chained proxy.&lt;br /&gt;
&lt;br /&gt;
I looked at the source code to see if it is a feature that is supported, but undocumented. It appears to not be an option, however WebScarab uses the jcifs library so it can do an authenticated NTLM proxy connection if it was coded.&lt;br /&gt;
&lt;br /&gt;
[[User:Nchristiansen|Nchristiansen]] 17:46, 8 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
Take a look at the Tools -&amp;gt; Credentials dialog. There is an option to &amp;quot;Ask when required&amp;quot;, which will tell WebScarab to respond to any authentication requests, rather than passing that through to the browser.&lt;br /&gt;
&lt;br /&gt;
--[[User:RoganDawes|RoganDawes]] 03:59, 9 January 2008 (EST)&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24184</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24184"/>
				<updated>2008-01-08T17:15:43Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: How to execute WS-NG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG does not yet have the Transcoder functionality.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy and Manual Request plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is in progress.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
==Execution==&lt;br /&gt;
&lt;br /&gt;
WebScarab NG is currently only executable via Java WebStart, which is likely to pose a problem for certain folk. Maven does have a fatjar plugin which should be able to construct a single jar with all its dependencies. This needs to be investigated.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24151</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24151"/>
				<updated>2008-01-08T08:09:46Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: /* Framework functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL. This could/should be replaced by an Identity module, which can provide the most current identifiers for a particular identity (cookies, Basic auth, etc).&lt;br /&gt;
&lt;br /&gt;
NG does not yet have the Transcoder functionality.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy and Manual Request plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is in progress.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24149</id>
		<title>OWASP WebScarab Differences (Classic vs NG)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebScarab_Differences_(Classic_vs_NG)&amp;diff=24149"/>
				<updated>2008-01-07T17:21:39Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: New page: '''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''  The objective is to list the major features that one has over the other, wi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This page is intended to document the differences between WebScarab Classic and WebScarab Next Generation'''&lt;br /&gt;
&lt;br /&gt;
The objective is to list the major features that one has over the other, with the intent to track the porting of desirable features from Classic to NG.&lt;br /&gt;
&lt;br /&gt;
==Framework functionality==&lt;br /&gt;
&lt;br /&gt;
NG has no concept of the shared cookie jar, which is used in Classic to allow plugins such as the Spider and Manual Request plugins to use the most current cookies for a particular URL.&lt;br /&gt;
&lt;br /&gt;
NG does not yet have the Transcoder functionality.&lt;br /&gt;
&lt;br /&gt;
==Plugins==&lt;br /&gt;
&lt;br /&gt;
NG has significantly fewer plugins than Classic. The only plugins currently implemented in NG are the Proxy and Manual Request plugins. &lt;br /&gt;
&lt;br /&gt;
Some features of the Proxy plugin remain to be ported:&lt;br /&gt;
* Ability to specify regexes for URL's (not) to be intercepted&lt;br /&gt;
* Ability to specify a regex for conversations that should not be stored&lt;br /&gt;
* BeanShell scripts for programmatic modification of requests/responses&lt;br /&gt;
* Miscellaneous proxy plugins - Reveal hidden fields, prevent caching of responses&lt;br /&gt;
* Ability to modify Internet Explorer proxy settings automatically on startup and exit&lt;br /&gt;
&lt;br /&gt;
Some features of the Manual Request plugin remain to be ported:&lt;br /&gt;
&lt;br /&gt;
* Ability to convert a request from a GET to a POST or multipart POST, and vice versa.&lt;br /&gt;
&lt;br /&gt;
This leaves the following plugins to be implemented:&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
* Extensions&lt;br /&gt;
* XSSCRLF&lt;br /&gt;
* SessionIDAnalysis&lt;br /&gt;
* Scripting&lt;br /&gt;
* Fragments&lt;br /&gt;
* Compare&lt;br /&gt;
* Search&lt;br /&gt;
&lt;br /&gt;
Porting of the WebServices plugin to NG is in progress.&lt;br /&gt;
&lt;br /&gt;
==Porting suggestions==&lt;br /&gt;
&lt;br /&gt;
For people interested in contributing to this project by porting one of the above plugins, here are some suggestions:&lt;br /&gt;
&lt;br /&gt;
* SessionID analysis&lt;br /&gt;
The current session id analysis plugin, while looking cool is actually very misleading. Anyone wanting to implement this feature for NG would be advised to take a look at Michal Zalewski's stompy to see how it can be done better.&lt;br /&gt;
&lt;br /&gt;
* Search, Compare&lt;br /&gt;
These plugins are very clunky to use. It actually makes a lot more sense to make those features available as part of the primary interface, rather than relegating them to a backwater. Search should provide a simple interface where the operator can type some text and click Go, rather than having to write code.&lt;br /&gt;
&lt;br /&gt;
* Spider&lt;br /&gt;
This plugin should also identify FORMs in the HTML responses, and identify those that have been submitted by matching them with the parameters of GET requests, or the bodies of POST's, using an intelligent matching algorithm. (Empty parameters in the form may be matched to anything in a GET/POST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=WebScarab_Getting_Started&amp;diff=21203</id>
		<title>WebScarab Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=WebScarab_Getting_Started&amp;diff=21203"/>
				<updated>2007-08-29T11:57:56Z</updated>
		
		<summary type="html">&lt;p&gt;RoganDawes: Add instructions for IE7, as well as explain how to configure a &amp;quot;Primary proxy&amp;quot;?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WebScarab''' has a large amount of functionality, and as such can be quite intimidating to the new user. But, for the simplest case, intercepting and modifying requests and responses between a browser and HTTP/S server, there is not a lot that needs to be learned.&lt;br /&gt;
&lt;br /&gt;
Initially, I will assume that you have full unrestricted access to the Internet (that is, you are not behind a proxy). For the sake of simplicity, I will also assume that you are using Internet Explorer. If you need to use a proxy to get out of your corporate network, , see [[ Chaining_WebScarab_onto_another_proxy ]]&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab_startup.png]]&lt;br /&gt;
&lt;br /&gt;
This is what WebScarab looks like at startup. There are a few major areas that might need explanation. &lt;br /&gt;
&lt;br /&gt;
Firstly, the toolbar provides access to the various plugins, as well as the Summary window (main view), and messages (log) window.&lt;br /&gt;
&lt;br /&gt;
The Summary window is split into two parts. On the top is a tree table which will show the layout of the sites that you have visited, and some attributes of the various URLs. Below that is a table showing all of the conversations that have been seen by WebScarab, normally sorted in reverse by ID, so that more recent conversations are at the top of the table. The sort order can be changed by clicking in the column headers if desired.&lt;br /&gt;
&lt;br /&gt;
In order to start using WebScarab as a proxy, you need to configure your browser to use WebScarab as a proxy. This is configured in IE using the Tools menu. Select Tools -&amp;gt; Internet Options -&amp;gt; Connections -&amp;gt; LAN Settings to get the proxy configuration dialog.&lt;br /&gt;
&lt;br /&gt;
[[Image:IE Proxy.PNG]]&lt;br /&gt;
&lt;br /&gt;
WebScarab defaults to using port 8008 on localhost for its proxy. You need to configure IE to relay requests to WebScarab, rather than fetching them itself, as shown in the above image. Make sure that all checkboxes are unchecked, except for &amp;quot;Use a proxy server&amp;quot;. Once you have configured IE to use the proxy, select Ok on all dialogs to get back to the browser. Browse to a non-SSL website, and then switch to WebScarab.&lt;br /&gt;
&lt;br /&gt;
You should see something similar to the next image. If you don't, or you get an error while browsing, you should go back and check your proxy settings in Internet Explorer as described above. If the proxy settings are correct, one possibility is that there is already another program that is using port 8008, and preventing WebScarab from using it. If so, you should stop that other program. I will also show you how to tell WebScarab how to use a different port a bit later.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you are using WebScarab to test a site that is running the same computer as the browser (i.e. localhost or 127.0.0.1), and you are using IE7, you will need to add a dot &amp;quot;.&amp;quot; after the hostname to force IE7 to use the proxy that you have configured. This is NOT a bug in WebScarab, but an unfortunate design decision (I assume) made by the developers of IE. Basically, it will ignore any proxy settings if it thinks that the server you are trying to reach is on the local machine. One way of tricking it is to add the dot, as in http://localhost./WebGoat/attack. This will force IE to use your configured proxy.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab after browsing.png]]&lt;br /&gt;
&lt;br /&gt;
Here you can see the tree of URL's, which represents the site layout, as well as the individual conversations that have passed through WebScarab. To see the details of a particular conversation, you can double-click on a row in the table, and a window showing the request and the details of the response will open. You can see the request and response in a variety of forms. The view shown here is the &amp;quot;Parsed&amp;quot; view, where the headers are broken out into a table, and the request or response content is presented according to its Content-Type header. You can also choose the &amp;quot;Raw&amp;quot; format, where the request or response is presented exactly as it would be seen on the wire.&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab conversation.png]]&lt;br /&gt;
&lt;br /&gt;
You can step from one conversation (request/response) to the next in the conversation window using the &amp;quot;previous&amp;quot; and &amp;quot;next&amp;quot; buttons, as well as jumping directly to a particular conversation using the drop down combo box.&lt;br /&gt;
&lt;br /&gt;
Now that you are familiar with the basic workings of WebScarab, and have made sure that your browser is correctly configured, the next step is to intercept some requests, and modify them before they are sent to the server.&lt;br /&gt;
&lt;br /&gt;
You enable proxy intercepts via the Proxy plugin, accessible via the &amp;quot;Proxy&amp;quot; button on the toolbar. Then choose the &amp;quot;Manual Edit&amp;quot; tab. Once you click the &amp;quot;Intercept Requests&amp;quot; checkbox, you can choose which request methods you wish to intercept (most commonly GET or POST), and can even choose multiple methods using &amp;quot;Ctrl-click&amp;quot;. Select &amp;quot;GET&amp;quot; for the moment. &lt;br /&gt;
&lt;br /&gt;
[[Image:Webscarab configure intercept.png]]&lt;br /&gt;
&lt;br /&gt;
Now go back to your browser, and click on a link. You should see something like the following window appear (it may only flash in the task bar initially, just select it. Future windows will pop-up properly).&lt;br /&gt;
&lt;br /&gt;
[[Image:WebScarab intercept request.png]]&lt;br /&gt;
&lt;br /&gt;
You can now edit any part of the request you choose. Note that the headers are shown already URL-decoded, and anything that you type in will be URL-encoded automatically. If you do not want this to happen, you should use the Raw mode. In some cases, using the Raw mode may be the easiest anyway, especially if you have something that you wish to paste in.&lt;br /&gt;
&lt;br /&gt;
Once you are happy with your changes, click on the '''&amp;quot;Accept changes&amp;quot;''' button to allow the modified request to be sent to the server. If you decide that you wish to revert the changes that you have made so far, you can click on the '''&amp;quot;Cancel changes&amp;quot;''' button to allow the original request to be sent to the server. You can also click on the '''&amp;quot;Abort request&amp;quot;''' button if you don't want to send a request to the server at all. This will send an error back to the browser. Finally, if there are multiple intercept windows opened (e.g the browser is using several threads simultaneously), you can release all the requests using the '''&amp;quot;Cancel ALL intercepts&amp;quot;''' button.&lt;br /&gt;
&lt;br /&gt;
WebScarab will continue to intercept all requests that match the method you specified until you uncheck the &amp;quot;Intercept requests&amp;quot; checkbox, either in the '''intercept conversation''' window, or in the '''&amp;quot;Manual Edit&amp;quot;''' tab of the '''Proxy''' plugin. But you may be wondering why WebScarab does not intercept requests for images, stylesheets, javascript, etc. If you go back to the '''&amp;quot;Manual Edit&amp;quot;''' tab, you will see a field labeled &amp;quot;Exclude paths matching:&amp;quot;. This field contains a regular expression which is matched against the request URL. If there is a match, the request is never intercepted.&lt;br /&gt;
&lt;br /&gt;
You can also configure WebScarab to intercept responses, in case you want to change the behaviour of some parts of the page. For example, you can disable JavaScript validation, change the list of possible items in a '''SELECT''' field, etc.&lt;br /&gt;
&lt;br /&gt;
== Tips and tricks ==&lt;br /&gt;
&lt;br /&gt;
If you are using IE and you would like WebScarab to automatically update your proxy settings for you, you need to complete the following steps. '''Note:''' This only works with the -installer version of WebScarab!&lt;br /&gt;
&lt;br /&gt;
* Change to the Full-Featured interface (Tools -&amp;gt;  Use Full-featured Interface), then go to the Proxy-&amp;gt;Listeners tab.&lt;br /&gt;
* Select the only listener showing, and click &amp;quot;Stop&amp;quot;. &lt;br /&gt;
* About 2/3 of the way down the screen are several input fields, corresponding to the columns in the listener table. &lt;br /&gt;
* Each box should be filled in with the value from the most recently stopped proxy. &lt;br /&gt;
* At this point, you can check the &amp;quot;Primary&amp;quot; checkbox, and then click &amp;quot;Start&amp;quot;. &lt;br /&gt;
  &lt;br /&gt;
Your IE proxy settings will automatically be updated to point to WebScarab, and will be reset when you exit WebScarab. This setting will be saved, and used on subsequent runs of WebScarab.&lt;br /&gt;
&lt;br /&gt;
[[Category:How To]]&lt;br /&gt;
[[Category:OWASP WebScarab Project]]&lt;/div&gt;</summary>
		<author><name>RoganDawes</name></author>	</entry>

	</feed>