<?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=Wimp</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=Wimp"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Wimp"/>
		<updated>2026-05-17T17:19:04Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Session_Fixation&amp;diff=80717</id>
		<title>Talk:Session Fixation</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Session_Fixation&amp;diff=80717"/>
				<updated>2010-03-30T06:55:28Z</updated>
		
		<summary type="html">&lt;p&gt;Wimp: Disagreement of where to invalidate a session; Question to Weblogic an session fixation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Session Fixation&lt;br /&gt;
Session Fixation is a security vulnerability prevelant in Authentication framework available in most of the Web Servers (WebLogic Server 10.3, Tomcat 6.0.20, ASP.NET).&lt;br /&gt;
Session Fixation works as follows:&lt;br /&gt;
1) Alice (attacker) access a unprotected resource (http://vulnerableApp/unprotected.jsp). In most of the web servers a new session is created now, even if you are not logged in. A session cookie is set and sent with the response.&lt;br /&gt;
2) Alice notes down the session cookie sent by the web server. She can do that using some HTTP monitoring tool like LiveHttpHeader for FireFox. copy that cookie string to a different computer. Alice change the browser page to something else (www.google.com). Keep the browser window open. Leaves the computer.&lt;br /&gt;
3) Bob (victim) uses the computer to access a protected resource from the same web application (http://vulnerableApp/protected.jsp). He uses the same browser windows (which is kept open). He loges in using his username/password. WebServer now uses the same session cookie for logged in session. Bob continue using the application for next 30 minutes.&lt;br /&gt;
4) Alice access the protected resource from the application (http://vulnerableApp/protected.jsp) using the saved cookie from another machine. He can use some Java client to do so. Now she is able to access the protected resource with Bob's credentials. Alice will be able to access all protected resources until Bob logs out. If Bob leaves the computer by closing the browser (without explicit logout), then alice will be able to use the resource forever (or untill next server re-start).&lt;br /&gt;
&lt;br /&gt;
This vulnerability is there if you are using most of the Web Servers (WebLogic, Tomcat not tested any other server heard ASP.NET is also having session fixation bug. )&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
If you are using Form based authentication, call session.invalidate() in the login page. This will create new session cookie. See the sample login page below:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;%&lt;br /&gt;
		session.invalidate();&lt;br /&gt;
	%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;form action=&amp;quot;j_security_check&amp;quot; method=&amp;quot;POST&amp;quot; name=&amp;quot;login&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;input type=&amp;quot;input&amp;quot; name=&amp;quot;j_username&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;j_password&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Log in&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are BASIC authentication, you are at risk unless the web server handles it correctly (most web servers don't handle it). Ideally authentication framework in the web server should have called session.invalidate() before authentication.&lt;br /&gt;
Don't use BASIC authentication in your application.&lt;br /&gt;
&lt;br /&gt;
Sample application to demonstrate the vulnerability&lt;br /&gt;
1) Download the SimpleWebApp1 ( [http://rejeev.googlepages.com/SimpleWebApp1.war]http://rejeev.googlepages.com/SimpleWebApp1.war )&lt;br /&gt;
2) Configure a WebLogic or Tomcat server&lt;br /&gt;
3) Create a user called &amp;quot;user1&amp;quot; in weblogic&lt;br /&gt;
4) Create a user called &amp;quot;user1&amp;quot; and role called &amp;quot;user1&amp;quot; in Tomcat&lt;br /&gt;
5) Deploy the application in WebLogic or tomcat&lt;br /&gt;
6) Access test2.jsp (http://localhost:7001/SimpleWebApp1/test2.jsp)&lt;br /&gt;
7) Note the cookie (use LiveHttpHeaders with firefox)&lt;br /&gt;
8) Access test1.jsp (http://localhost:7001/SimpleWebApp1/test1.jsp). You will be asked to log in, log in.&lt;br /&gt;
9) Now try access the test1.jsp using the TestSessionFixation.java provide inside the war. Usage: java rejeev.sessionfixation.TestSessionFixation &amp;lt;url&amp;gt; &amp;lt;cookie&amp;gt;. You will be able to see test1.jsp without login.&lt;br /&gt;
&lt;br /&gt;
Session fixation is supposed to be fixed in WebLogic Server 10.3. However I have observed that it is present in latest version of WebLogic (Weblogic Server 10.3). I think they have fixed vulnerability WebLogic console only. WebLogic console being a web application it also vulnerable. However fundamental defect is in the authentication framework. That is not yet fixed.&lt;br /&gt;
Please see the following blog entry for details&lt;br /&gt;
[http://rejeev.blogspot.com/2009/09/session-fixation_08.html]http://rejeev.blogspot.com/2009/09/session-fixation_08.html &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
1) Do server side session invalidation&lt;br /&gt;
&lt;br /&gt;
I don't agree with the solution above, to invalidate the session in the JSP. It is still possible, to do the login from a fake page, e.g. from a XSSed page from the same server where the session still is valid.&lt;br /&gt;
The session has to be renewed during the login request, right before the authentication. This way the response will have a &amp;quot;Set-Cookie&amp;quot; with a fresh and authenticated session. See: [https://www.bsi.bund.de/cae/servlet/contentblob/476464/publicationFile/30642/WebSec_pdf.pdf Sicherheit von Webanwendungen] (from the German BSI, page 40).&lt;br /&gt;
&lt;br /&gt;
2) Weblogic and session fixation&lt;br /&gt;
&lt;br /&gt;
In the [http://download.oracle.com/docs/cd/E12839_01/web.1111/e13852/toc.htm weblogic changelog 10.3.1] I don't see the bugfix of session fixation in weglogic, as you stated in your blog. Has anyone a source? What exactly changed?&lt;br /&gt;
&lt;br /&gt;
--[[User:Wimp|Wimp]] 06:55, 30 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Wimp</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Java_Table_of_Contents&amp;diff=37532</id>
		<title>OWASP Java Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Java_Table_of_Contents&amp;diff=37532"/>
				<updated>2008-08-29T08:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;Wimp: Added the Framework JSecurity to the list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Key:&amp;lt;/b&amp;gt;&lt;br /&gt;
* xx%: Progress status of the paragraph&lt;br /&gt;
* &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;: The paragraph needs a review&lt;br /&gt;
* TD: Paragraph to be assigned&lt;br /&gt;
&lt;br /&gt;
==[[J2EE Security for Architects]]==&lt;br /&gt;
Discuss the security implications of common J2EE architectures.  This could be discussed in terms of: Authentication, Authorisation, Data Validation, Cross Site Scripting protection.  Other architecture concerns such as scalability, performance and maintainability can also be mentioned, but the focus on security should not be lost.&lt;br /&gt;
  &lt;br /&gt;
Any other security concerns that should be addressed during the design phase should also be mentioned here.&lt;br /&gt;
===Design considerations===&lt;br /&gt;
* Architectural considerations (0%, TD)&lt;br /&gt;
** EJB Middle tier (0%, TD)&lt;br /&gt;
** Web Services Middle tier (0%, TD)&lt;br /&gt;
** Spring Middle tier (0%, TD)&lt;br /&gt;
&lt;br /&gt;
==[[J2EE Security for Developers]]==&lt;br /&gt;
=== Noteworthy Frameworks ===&lt;br /&gt;
Discuss important and relevant Java security frameworks that would be useful to architects.  The information should be at a suitably high level, for example, by discussing the advantages and features as well as the associated costs (direct and indirect) of using the frameworks.&lt;br /&gt;
&lt;br /&gt;
(0%, Seeking Volunteers)&lt;br /&gt;
*	[[Struts]] (0% Jon Forck)&lt;br /&gt;
*	Turbine&lt;br /&gt;
*	[[Java Server Faces]] (Sam Reghenzi - 90%, Finalising content)&lt;br /&gt;
*	Tapestry&lt;br /&gt;
*	Webwork&lt;br /&gt;
*	Cocoon&lt;br /&gt;
*	Tiles&lt;br /&gt;
*	SiteMesh&lt;br /&gt;
*	Spring (0%, Adrian San Juan, TD)&lt;br /&gt;
*	[[Wicket]]&lt;br /&gt;
*	JSecurity&lt;br /&gt;
&lt;br /&gt;
===[[Java Security Basics]]===&lt;br /&gt;
Provide an introduction into the basic security services provided by the Java language and environment.  Remember to keep this relevant for web developers for the initial release - there may be a potential to expand this to thick clients in subsequent releases.&lt;br /&gt;
* Class Loading (0%, Philippe Clairet)&lt;br /&gt;
* Bytecode verifier (0%, Philippe Clairet)&lt;br /&gt;
* The Security Manager and security.policy file (0%, John Wilander, Philippe Clairet)&lt;br /&gt;
&lt;br /&gt;
===Input Validation Overview ===&lt;br /&gt;
Input validation is perhaps the most important category of application security. Any data entering a software system must be verified to contain safe data that is not mounting a SQL Injection, XSS, CSRF or other form of attack. This is done primarily through the use of regular expressions. It's crucial not to hard-code input validation routines. Regular expressions should contained within a configuration file that can easily updated by an InfoSec professional and not require a programmers intervention or deployment of new application code. Application security needs change over time as new attack vectors are discovered. Application administers need to be able to react to these changes as quickly as possible. &lt;br /&gt;
&lt;br /&gt;
===Input Validation ===&lt;br /&gt;
* Dangerous calls (BufferedReader.readLine(), ServletRequest.getParameter(), etc...) (0%, TD)&lt;br /&gt;
* [[How to add validation logic to HttpServletRequest]] (100%, Jeff Williams, Complete)&lt;br /&gt;
* [[How to perform HTML entity encoding in Java]] (100%, Jeff Williams, Complete)&lt;br /&gt;
&lt;br /&gt;
==== [[Preventing SQL Injection in Java]] ====&lt;br /&gt;
* Overview &lt;br /&gt;
* Prevention (60%, Stephen de Vries, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
** White Listing&lt;br /&gt;
** Prepared Statements&lt;br /&gt;
** Stored Procedures &lt;br /&gt;
** Hibernate &lt;br /&gt;
** Ibatis (60%, Rohyt Belani, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
** Spring JDBC &lt;br /&gt;
** EJB 3.0&lt;br /&gt;
** JDO&lt;br /&gt;
&lt;br /&gt;
==== [[Preventing LDAP Injection in Java]] ====&lt;br /&gt;
* Overview (100%, Stephen de Vries, Complete)&lt;br /&gt;
* Prevention (100%, Stephen de Vries, Complete)&lt;br /&gt;
&lt;br /&gt;
==== [[XPATH Injection]] ====&lt;br /&gt;
As with the other Injection sections, only provide cursory information on the general case. Should contain practical real-world advise and code examples for preventing XPATH injection.&lt;br /&gt;
* Overview (0%, TD)&lt;br /&gt;
* Prevention (0%, TD)&lt;br /&gt;
&lt;br /&gt;
==== [[Miscellaneous Injection Attacks]]  ====&lt;br /&gt;
* HTTP Response splitting (0%, TD)&lt;br /&gt;
* Command injection - Runtime.getRuntime().exec() (0%, TD)&lt;br /&gt;
* Regular Expression (regex) Injections (20%)&lt;br /&gt;
&lt;br /&gt;
''' Status '''&lt;br /&gt;
In progress&lt;br /&gt;
&lt;br /&gt;
=== Authentication===&lt;br /&gt;
* [[Storing credentials]] - (20%, Adrian San Juan, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* [[Hashing Java|Hashing]] - (100%, Michel Prunet, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* [[SSL Best Practices]] - (20%, Philippe Curmin, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* [[Using JCaptcha]] - (100%, Dave Ferguson, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;) &lt;br /&gt;
* Container-managed authentication with Realms&lt;br /&gt;
** [[Declarative Access Control in Java]] - (100%, Dave Ferguson, Completed)&lt;br /&gt;
* [[JAAS Timed Login Module]] - (100%, Stephen de Vries, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* [[JAAS Tomcat Login Module]] - (100%, Stephen de Vries, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* [[Password length &amp;amp; complexity]] - (100%, Adrian San Juan, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===Session Management ===&lt;br /&gt;
The generic problems and solutions for session management are covered in the Guide.  This section should focus on Java specific examples.&lt;br /&gt;
* Logout (0%, TD)&lt;br /&gt;
* Session Timeout (0%, TD)&lt;br /&gt;
* Absolute Timeout (0%, TD)&lt;br /&gt;
* [[Session Fixation in Java]] (100%, Rohyt Belani, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* Terminating sessions (0%, TD)&lt;br /&gt;
** Terminating sessions when the browser window is closed&lt;br /&gt;
&lt;br /&gt;
===Authorization===&lt;br /&gt;
* [[Declarative v/s Programmatic]] (10%, TD)&lt;br /&gt;
* EJB Authorization (0%, TD)&lt;br /&gt;
* Acegi (0%, TD)&lt;br /&gt;
* JACC (0%, TD)&lt;br /&gt;
* Check horizontal privilege (0%, TD)&lt;br /&gt;
&lt;br /&gt;
=== Encryption===&lt;br /&gt;
* [http://www.owasp.org/index.php/Using_the_Java_Cryptographic_Extensions JCE] (100%, Joe Prasanna Kumar - To be reviewed)&lt;br /&gt;
* Storing db secrets (0%, TD)&lt;br /&gt;
* Encrypting JDBC connections (0%, TD)&lt;br /&gt;
* [http://www.owasp.org/index.php/Using_the_Java_Secure_Socket_Extensions JSSE] (100%, Joe Prasanna Kumar - To be reviewed)&lt;br /&gt;
* [http://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java Digital Signatures in Java (100%, Joe Prasanna Kumar - To be reviewed)&lt;br /&gt;
&lt;br /&gt;
=== Error Handling &amp;amp; Logging===&lt;br /&gt;
* Logging - why log? what to log? log4j, etc. (0%, TD)&lt;br /&gt;
* Exception handling techniques (0%, TD)&lt;br /&gt;
** fail-open/fail-closed&lt;br /&gt;
** resource cleanup&lt;br /&gt;
** finally block&lt;br /&gt;
** swallowing exceptions&lt;br /&gt;
* Exception handling frameworks (50%, TD)&lt;br /&gt;
** Servlet spec - web.xml [[Securing tomcat]] (100%, Darren Edmonds, Completed)&lt;br /&gt;
** JSP errorPage (0%, TD)&lt;br /&gt;
* Web application forensics (0%, TD)&lt;br /&gt;
&lt;br /&gt;
=== Web Services Security ===&lt;br /&gt;
* SAML (0%, TD)&lt;br /&gt;
* (X)WS-Security (0%, TD)&lt;br /&gt;
* SunJWSDP (0%, TD)&lt;br /&gt;
* WSS4J (0%, Eelco Klaver)&lt;br /&gt;
* XML Signature (JSR 105) (0%, TD)&lt;br /&gt;
* XML Encryption (JSR 106) (0%, TD)&lt;br /&gt;
&lt;br /&gt;
=== Code Analysis Tools ===&lt;br /&gt;
The introduction should cover the advantages and short comings of code analysis tools.  An overview of the current state of the art and the available tools would go well here.  As a start, only open source tools are listed, but if vendors of commercial tools adhere to the [[Tutorial]] guidelines, these submissions will be gladly received.&lt;br /&gt;
* Introduction (0%, TD)&lt;br /&gt;
* [[:Category:OWASP LAPSE Project]] (100%, &amp;lt;b&amp;gt;Review&amp;lt;/b&amp;gt;)&lt;br /&gt;
* FindBugs (0%, TD)&lt;br /&gt;
** Creating custom rules&lt;br /&gt;
* PMD (0%, TD)&lt;br /&gt;
** Creating custom rules&lt;br /&gt;
* JLint (0%, TD)&lt;br /&gt;
* Jmetrics (0%, TD)&lt;br /&gt;
&lt;br /&gt;
== [[J2EE Security For Deployers]] ==&lt;br /&gt;
Practical step-by-step guides to securing various J2EE servers.  Examples of secure configurations can also be provided for download.  If configurations are provided, they should be properly commented so that the rationale for configuration settings is clearly explained.  Users of the configurations should be provided with enough information to make their own risk decisions.&lt;br /&gt;
=== Securing Popular J2EE Servers ===&lt;br /&gt;
* [[Securing tomcat|Securing Tomcat]] - (100%, Darren Edmonds, Completed)&lt;br /&gt;
* Securing JBoss (0%, TD)&lt;br /&gt;
* Securing WebLogic (0%, TD)&lt;br /&gt;
* Securing WebSphere (0%, TD)&lt;br /&gt;
* Others...&lt;br /&gt;
&lt;br /&gt;
=== Defining a Java Security Policy ===&lt;br /&gt;
Practical information on creating a Java security policies for J2EE servers.&lt;br /&gt;
* PolicyTool - JChains already provides this functionality, one policy tool is enough.&lt;br /&gt;
* jChains (www.jchains.org) - (0%, TD)&lt;br /&gt;
&lt;br /&gt;
=== Protecting Binaries ===&lt;br /&gt;
* Bytecode manipulation tools and techniques (0%, TD)&lt;br /&gt;
* [[Bytecode obfuscation]] (100%, Pierre Parrend, Released)&lt;br /&gt;
* Convert bytecode to native machine code (0%, TD)&lt;br /&gt;
* [[Protecting code archives with digital signatures]] (100%, Pierre Parrend, Released)&lt;br /&gt;
* [[Signing jar files with jarsigner]] (100%, Pierre Parrend, Released)&lt;br /&gt;
&lt;br /&gt;
==[[J2EE Security for Security Analysts and Testers]]==&lt;br /&gt;
* Using Eclipse to verify Java applications (0%, TD)&lt;br /&gt;
* Using [[:Category:OWASP WebScarab Project|WebScarab]] to find vulnerabilities in J2EE applications - (0%, TD)&lt;br /&gt;
* Decompiling Java bytecode (0%, TD)&lt;br /&gt;
&lt;br /&gt;
== [[Java Security Resources]] (ongoing)==&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Wimp</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Password_length_%26_complexity&amp;diff=28878</id>
		<title>Talk:Password length &amp; complexity</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Password_length_%26_complexity&amp;diff=28878"/>
				<updated>2008-05-05T07:58:37Z</updated>
		
		<summary type="html">&lt;p&gt;Wimp: New section: How to avoid similar passwords?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The overall content is correct, but I have the following remarks : &lt;br /&gt;
&lt;br /&gt;
1. I corrected some syntactical errors in the text. For example, &amp;quot;is&amp;quot; was missing in the sentence &amp;quot;it is the most common form&amp;quot;, in the introduction.&lt;br /&gt;
&lt;br /&gt;
2. The introduction could insist on the idea that passwords are basically a means of authenticating users of a Web application, among other means, and that the choice of passwords or a stronger means like two-factors authentication really depends on the security needs of an application, based on risk evaluation and security specifications in the conception phase.&lt;br /&gt;
&lt;br /&gt;
3. In the introduction about the &amp;quot;Pros&amp;quot; and &amp;quot;Cons&amp;quot; of passwords, I would add in the &amp;quot;Cons&amp;quot; that we all suffer from having to manage and remember too many passwords. For a new Web application, one should consider the possibility of relying on a more global identity management system (such as some sort of &amp;quot;single sign on&amp;quot; or &amp;quot;reduced sign on&amp;quot; set for all or at least many applications in the corporation), instead of trying to generate yet another password. &lt;br /&gt;
&lt;br /&gt;
4. I think the details of password length, password complexity and password history should not be fixed too precisely, because it really depends on the security policies of each organization. The main point in general is that in security policies, there must be rules for password length (a minimum length should be defined), password complexity (the minimum complexity of passwords should be described) and password history (the minimum number of old passwords to check should be defined).  &lt;br /&gt;
&lt;br /&gt;
5. I would not present managing the history of passwords as a &amp;quot;nice to have&amp;quot; feature, but rather as a mandatory feature.&lt;br /&gt;
&lt;br /&gt;
Philippe Curmin&lt;br /&gt;
&lt;br /&gt;
== How to avoid similar passwords? ==&lt;br /&gt;
&lt;br /&gt;
In order to hinder users from using similar passwords or passwords with simple counters (&amp;quot;test1&amp;quot; -&amp;gt; &amp;quot;test2&amp;quot;) it would be nice to implement the [http://en.wikipedia.org/wiki/Levenshtein_distance Levenshtein Distance] for the change of passwords and only allow those with at least a minimum distance.&lt;br /&gt;
&lt;br /&gt;
The problem with the distance function is that I need to know the old password, which I shouldn't. If I save passwords as hashes the function doesn't work anymore.&lt;br /&gt;
&lt;br /&gt;
Is there already an algorithm to compare passwords without saving them as plain text? I can imagine something like a function that saves the structure of the phrase, i.e. &amp;quot;test1&amp;quot; consists of 4 alphabetical lowercase signs and one number - the same as in &amp;quot;test2&amp;quot;. But also in &amp;quot;ak9Me&amp;quot;. So it needs to be a bit more sophisticated.&lt;br /&gt;
&lt;br /&gt;
Any ideas?&lt;/div&gt;</summary>
		<author><name>Wimp</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Stinger_Manual&amp;diff=24553</id>
		<title>OWASP Stinger Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Stinger_Manual&amp;diff=24553"/>
				<updated>2008-01-18T10:12:01Z</updated>
		
		<summary type="html">&lt;p&gt;Wimp: Resolved download link to Stinger Release 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
The purpose of the OWASP Stinger manual is to provide users a comprehensive guide to developing upon and deploying the OWASP J2EE Stinger filter. If you have any comments or suggestions concerning the Stinger manual, please to not hesitate to email me at [mailto:eric.sheridan@owasp.org eric.sheridan@owasp.org].&lt;br /&gt;
&lt;br /&gt;
=Development=&lt;br /&gt;
&lt;br /&gt;
=Deployment=&lt;br /&gt;
&lt;br /&gt;
==Fetch the Latest Files==&lt;br /&gt;
&lt;br /&gt;
The latest Stinger release can be downloaded [http://www.owasp.org/index.php/OWASP_Stinger_Version_2 here]. The user implementing Stinger should download the jar file into a directory accessible by the Java container. For example, deploying Stinger in Tomcat would require downloading the files in the WEB-INF/lib/ directory.&lt;br /&gt;
&lt;br /&gt;
==Configure Deployment Descriptor==&lt;br /&gt;
&lt;br /&gt;
There are two major pieces of information necessary to deploy Stinger in your J2EE environment. First, the Java container must be told to implement the Stinger J2EE filter. This is specified in the web.xml file via the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter&amp;gt;&lt;br /&gt;
 	&amp;lt;filter-name&amp;gt;StingerFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
 	&amp;lt;filter-class&amp;gt;org.owasp.stinger.StingerFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
 	&amp;lt;init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;param-name&amp;gt;config&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 		&amp;lt;param-value&amp;gt;stinger.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 	&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 	&amp;lt;init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;param-name&amp;gt;error-page&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 		&amp;lt;param-value&amp;gt;fatal-error.html&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 	&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 	&amp;lt;init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;param-name&amp;gt;reload&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 		&amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 	&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 &amp;lt;/filter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stinger 2.x accepts three filter parameters: ''config'', ''error-page'', and ''reload''. The ''config'' parameter tells the Stinger filter the location of the SVDL file. The ''error-page'' parameter is actually the result of a new feature in Stinger 2.x. All exceptions that are thrown from the web application are now caught in Stinger. This prevents sending exceptions to the client and potentially revealing sensitive information (think database exceptions). Instead of leaking sensitive information, Stinger simply redirects the client to a specified page upon catching an exception. The third parameter, ''reload'', tells Stinger whether to dynamically load the SVDL file for each incoming HTTP request. As a rule of thumb, set ''reload'' to true in testing environments and false for production environments.&lt;br /&gt;
&lt;br /&gt;
The second major piece of information dictates which requests should pass the Stinger J2EE filter. This is specified in the web.xml file via the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
 	&amp;lt;filter-name&amp;gt;StingerFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
 	&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
 &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This entry tells the J2EE container that every request handled by the container should pass through the Stinger filter.&lt;br /&gt;
&lt;br /&gt;
==Configure Your SVDL File==&lt;br /&gt;
&lt;br /&gt;
A template SVDL file for the latest Stinger release can be found [http://www.owasp.org/releases/Stinger/Examples/stinger_template.xml here]. The SVDL file is broken down into three sections.&lt;br /&gt;
&lt;br /&gt;
:*The Regular Expression Section&lt;br /&gt;
:*The Cookie Rule Section&lt;br /&gt;
:*The Parameter Rule Section&lt;br /&gt;
&lt;br /&gt;
===The Regular Expression Section===&lt;br /&gt;
&lt;br /&gt;
All regular expressions to be used in Stinger are defined in this section. Essentially, a regular expression entry is comprised of a name, a regular expression, and a description. The description element is for user readability and is not used within Stinger. The regular expressions equiped with Stinger were taken from the [http://www.owasp.org/index.php/OWASP_Validation_Regex_Repository OWASP RegEx Repository]. If you have custom regular expressions and would like to donate them to the Stinger project, please email me at [mailto:eric.sheridan@owasp.org eric.sheridan@owasp.org].&lt;br /&gt;
&lt;br /&gt;
The following is a sample entry in the regular expression section:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;regex&amp;gt;&lt;br /&gt;
 	&amp;lt;name&amp;gt;JSESSIONID&amp;lt;/name&amp;gt;&lt;br /&gt;
 	&amp;lt;pattern&amp;gt;^[A-F0-9]{32}$&amp;lt;/pattern&amp;gt;&lt;br /&gt;
 	&amp;lt;description&amp;gt;JSESSIONID character and length enforcement&amp;lt;/description&amp;gt;&lt;br /&gt;
 &amp;lt;/regex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The Cookie Rule Section===&lt;br /&gt;
&lt;br /&gt;
This section contains definitions for all of the cookies for which we are assigning a rule. A cookie rule is comprised of a name, a regular expression, the URI in which it is created, the URI's which it is enforced, and the actions taken if the cookie is missing or malformed. For most web applications, we wish to create and enforce a cookie for a particular URI. In this case, we have an entry similar to the one found below. In this case the following rule applies: ''if a cookie is missing from the request sent to the created/enforced URI, then no violation occurs. However, if a cookies is malformed in the request sent to the created/enforced URI, then a violation occurs.'' &lt;br /&gt;
&lt;br /&gt;
The missing and malformed sections simply specify the severity of the violation as well as the actions to be executed. There exists three possible severities: ''FATAL'', ''CONTINUE'', and ''IGNORE''. &lt;br /&gt;
&lt;br /&gt;
:*If a severity is ''FATAL'', then Stinger stops processing the packet and immediately executes the associated actions. &lt;br /&gt;
:*If a severity is ''CONTINUE'', then Stinger appends the violation a list and continues to process the packet.&lt;br /&gt;
:*If a severity is ''IGNORE'', no violation is appended to the list of violation and Stinger continues its request validation.&lt;br /&gt;
&lt;br /&gt;
Several actions accept parameters which are designated by the &amp;lt;parameter&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
The following is a sample entry in the cookie rule section:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cookie&amp;gt;&lt;br /&gt;
 	&amp;lt;name&amp;gt;JSESSIONID&amp;lt;/name&amp;gt;&lt;br /&gt;
 	&amp;lt;regex&amp;gt;JSESSIONID&amp;lt;/regex&amp;gt;&lt;br /&gt;
 	&amp;lt;created&amp;gt;/Stinger-2.2.*&amp;lt;/created&amp;gt;&lt;br /&gt;
 	&amp;lt;enforce&amp;gt;/Stinger-2.2.*&amp;lt;/enforce&amp;gt;&lt;br /&gt;
 	&amp;lt;missing&amp;gt;&lt;br /&gt;
 		&amp;lt;severity&amp;gt;FATAL&amp;lt;/severity&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;SEVERE&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;&lt;br /&gt;
 					The required JSESSIONID cookie is missing&lt;br /&gt;
 				&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 		&amp;lt;/action&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Invalidate&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Redirect&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;page&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;error.html&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 		&amp;lt;/action&amp;gt;&lt;br /&gt;
 	&amp;lt;/missing&amp;gt;&lt;br /&gt;
 	&amp;lt;malformed&amp;gt;&lt;br /&gt;
 		&amp;lt;severity&amp;gt;FATAL&amp;lt;/severity&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;SEVERE&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;The JSESSIONID cookie is malformed&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 		&amp;lt;/action&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Invalidate&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Redirect&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;name&amp;gt;page&amp;lt;/name&amp;gt;&lt;br /&gt;
 				&amp;lt;value&amp;gt;error.html&amp;lt;/value&amp;gt;&lt;br /&gt;
 			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 		&amp;lt;/action&amp;gt;&lt;br /&gt;
 	&amp;lt;/malformed&amp;gt;&lt;br /&gt;
 &amp;lt;/cookie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The Parameter Section===&lt;br /&gt;
&lt;br /&gt;
The parameter section describes the parameter rules associated with a particular URI. A URI and its associated rules constitute a ''rule set''. Every SVDL implementation must contain a default rule set similar to the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ruleset&amp;gt;&lt;br /&gt;
 	&amp;lt;name&amp;gt;STINGER_DEFAULT&amp;lt;/name&amp;gt;&lt;br /&gt;
 	&amp;lt;path&amp;gt;STINGER_DEFAULT&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;rule&amp;gt;&lt;br /&gt;
 		&amp;lt;name&amp;gt;STINGER_ALL&amp;lt;/name&amp;gt;&lt;br /&gt;
 		&amp;lt;regex&amp;gt;safetext&amp;lt;/regex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;missing&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;ignore&amp;lt;/severity&amp;gt;&lt;br /&gt;
 		&amp;lt;/missing&amp;gt;&lt;br /&gt;
 		&amp;lt;malformed&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;continue&amp;lt;/severity&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;info&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;&lt;br /&gt;
 						parameter %name with value %encoded_value from %ip has been encoded&lt;br /&gt;
 					&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
                        &amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Encode&amp;quot; /&amp;gt;&lt;br /&gt;
               &amp;lt;/malformed&amp;gt;&lt;br /&gt;
 	&amp;lt;/rule&amp;gt;&lt;br /&gt;
 &amp;lt;/ruleset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A default Stinger rule set must have the path (the URI) set to STINGER_DEFAULT and the rule name set to STINGER_ALL. When a request to a URI without an associated rule set is submitted, the default rule set is utilized. When a parameter without an associated rule is sent to the application, then the default rules are utilized.&lt;br /&gt;
&lt;br /&gt;
The following is a sample rule set entry for a fictitious web application:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ruleset&amp;gt;&lt;br /&gt;
 	&amp;lt;name&amp;gt;Main&amp;lt;/name&amp;gt;&lt;br /&gt;
 	&amp;lt;path&amp;gt;/Stinger-2.2.*&amp;lt;/path&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;rule&amp;gt;&lt;br /&gt;
 		&amp;lt;name&amp;gt;username&amp;lt;/name&amp;gt;&lt;br /&gt;
 		&amp;lt;regex&amp;gt;safetext&amp;lt;/regex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;missing&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;continue&amp;lt;/severity&amp;gt;&lt;br /&gt;
 		&amp;lt;/missing&amp;gt;&lt;br /&gt;
 		&amp;lt;malformed&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;continue&amp;lt;/severity&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;info&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;&lt;br /&gt;
 						The username parameter from %ip is malformed&lt;br /&gt;
 					&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Encode&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;/malformed&amp;gt;&lt;br /&gt;
 	&amp;lt;/rule&amp;gt;&lt;br /&gt;
 	&amp;lt;rule&amp;gt;&lt;br /&gt;
 		&amp;lt;name&amp;gt;hidden1&amp;lt;/name&amp;gt;&lt;br /&gt;
 		&amp;lt;regex&amp;gt;safetext&amp;lt;/regex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;missing&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;fatal&amp;lt;/severity&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;info&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;The hidden1 parameter is missing&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Invalidate&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Redirect&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;page&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;error.html&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
 		&amp;lt;/missing&amp;gt;&lt;br /&gt;
 		&amp;lt;malformed&amp;gt;&lt;br /&gt;
 			&amp;lt;severity&amp;gt;fatal&amp;lt;/severity&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Log&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;log&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;default.log&amp;lt;/value&amp;gt;&lt;br /&gt;
 					&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 				&amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;level&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;SEVERE&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
                                &amp;lt;parameter&amp;gt;&lt;br /&gt;
   				        &amp;lt;name&amp;gt;message&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;&lt;br /&gt;
 						hidden1 parameter from %ip is malformed&lt;br /&gt;
 					&amp;lt;/value&amp;gt;&lt;br /&gt;
                                &amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Invalidate&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;action class=&amp;quot;org.owasp.stinger.actions.Redirect&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;parameter&amp;gt;&lt;br /&gt;
 					&amp;lt;name&amp;gt;page&amp;lt;/name&amp;gt;&lt;br /&gt;
 					&amp;lt;value&amp;gt;error.html&amp;lt;/value&amp;gt;&lt;br /&gt;
 				&amp;lt;/parameter&amp;gt;&lt;br /&gt;
 			&amp;lt;/action&amp;gt;&lt;br /&gt;
 		&amp;lt;/malformed&amp;gt;&lt;br /&gt;
 	&amp;lt;/rule&amp;gt;&lt;br /&gt;
 &amp;lt;/ruleset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although this entry is quite large, there are only a few new entries which must be noted. As we see, this rule set utilizes a regular expression which is intended to cover the following URIs:&lt;br /&gt;
&lt;br /&gt;
:* /Stinger-2.4&lt;br /&gt;
:* /Stinger-2.4/&lt;br /&gt;
:* /Stinger-2.4/index.jsp. &lt;br /&gt;
&lt;br /&gt;
For this rule set, we have specified two rules, each describing a parameter accepted by the web application. These two parameters, username and hidden1, have very similar entries to that of the cookie rules. Each parameter has an associated regular expression, a missing section, and a malformed section.&lt;br /&gt;
&lt;br /&gt;
=== Important SVDL Rules/Guidelines ===&lt;br /&gt;
&lt;br /&gt;
When creating your own SVDL file, please remember the&lt;br /&gt;
following rules/guidelines:&lt;br /&gt;
&lt;br /&gt;
'''Defaults:'''&lt;br /&gt;
# Stinger assumes there will always exist a default rule set&lt;br /&gt;
# Requested URI's without a rule set will use the default rule set&lt;br /&gt;
# Parameters without an associated rule will use the default rule&lt;br /&gt;
&lt;br /&gt;
'''Cookies:'''&lt;br /&gt;
# You must specify a created page for a cookie rule&lt;br /&gt;
# If a cookie is missing on the created page, then no violation&lt;br /&gt;
# If a cookie is malformed on the created page, then violation&lt;br /&gt;
# You must specify at least one enforced uri per cookie rule&lt;br /&gt;
# You can specify more than one enforced uri per cookie rule&lt;br /&gt;
&lt;br /&gt;
'''Rule Sets:'''&lt;br /&gt;
# There must exist at least one path per rule set.&lt;br /&gt;
# There can exist multiple paths for a single rule set.&lt;br /&gt;
&lt;br /&gt;
'''Actions:'''&lt;br /&gt;
# Order actions carefully and appropriately. Ex. You cannot drop a packet and then display a message.&lt;br /&gt;
# Several actions accept parameters. They must be defined&lt;br /&gt;
== SVDL Learner Filter ==&lt;br /&gt;
&lt;br /&gt;
A project is underway to create a J2EE filter which generates an SVDL file based on captured HTTP traffic. The learner filter will behave similar to that of the SVDL Generator filter whereby parameters without an associated rule will be colored red. The learner filter will then look for a user-submitted value for that parameter and build an appropriate rule with default ''missing'' and ''malformed'' actions. When the user is finished crawling the site, the J2EE container is shut down and the Learner filter writes the rules to disk. The learner filter is considered developmental, yet it is included in the Stinger 2.x releases.&lt;br /&gt;
&lt;br /&gt;
==Deployment Checklist==&lt;br /&gt;
&lt;br /&gt;
* Download the latest Stinger jar files into the appropriate container directory&lt;br /&gt;
* Configure your web.xml file to:&lt;br /&gt;
: Load Stinger with the appropriate parameters:&lt;br /&gt;
:: ''config'' - the location of the SVDL file under WEB-INF&lt;br /&gt;
:: ''error-page'' - the error page displayed if any exception is caught&lt;br /&gt;
:: ''reload'' - specifies whether the SVDL should be dynamically loaded at runtime&lt;br /&gt;
: Apply Stinger to a URI Pattern&lt;br /&gt;
* Configure the SVDL for your application&lt;br /&gt;
&lt;br /&gt;
=Actions=&lt;br /&gt;
&lt;br /&gt;
Stinger is an action based input validation engine. The user can specify actions to be taken place upon violations found in an HTTP request. The following section describes how the actions are implemented as well as the parameters they accept. One major goal of this section is to illustrate the simplicity of creating Stinger actions. If you have created a custom action and are interested in submitting it to the Stinger project, please email me at [mailto:eric.sheridan@owasp.org eric.sheridan@owasp.org].&lt;br /&gt;
&lt;br /&gt;
==AbstractAction==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
Developing your own action is relatively straight forward within Stinger. To implement a custom class, simply extend the ''AbstractAction'' class and implement the abstract ''doAction'' method. For more information related to building custom actions, please refer to the development section.&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public abstract class AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	public final static int DROP = -1;&lt;br /&gt;
 	&lt;br /&gt;
 	public final static int CONTINUE = 0;&lt;br /&gt;
 	&lt;br /&gt;
 	public final static int PROCESS = 1;&lt;br /&gt;
 	&lt;br /&gt;
 	private HashMap&amp;lt;String, String&amp;gt; parameters = new HashMap&amp;lt;String, String&amp;gt;();&lt;br /&gt;
 	&lt;br /&gt;
 	public String getParameter(String name) {&lt;br /&gt;
 		return parameters.get(name);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void setParameter(String name, String value) {&lt;br /&gt;
 		parameters.remove(name);&lt;br /&gt;
 		parameters.put(name, value);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public abstract void init(ServletContext context);&lt;br /&gt;
 	&lt;br /&gt;
 	public abstract int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Drop==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
The ''Drop'' action simply DROP when called. This effectively prevents the HTTP request from ever reaching the web application.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The ''Drop'' action currently accepts zero parameters:&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public class Drop extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
 		return DROP;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Invalidate==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
If the session object exists, then it will be invalidated by this action. This action is considered more severe and should be deployed only when an obvious attack occurs. For example, cookie values are rarely tampered with by the client side code (i.e. javascript). Therefore, we can (safely?) assume that any cookie modification is considered a deliberate attack.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The ''Invalidate'' action currently accepts no parameters.&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public class Invalidate extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
 		HttpSession session = request.getSession(false);&lt;br /&gt;
 		&lt;br /&gt;
 		if(session != null) { session.invalidate(); }&lt;br /&gt;
 		&lt;br /&gt;
 		Cookie cookie = new Cookie(&amp;quot;JSESSIONID&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
 		cookie.setMaxAge(0);&lt;br /&gt;
 		response.addCookie(cookie);&lt;br /&gt;
 		&lt;br /&gt;
 		return CONTINUE;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Log==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
As the name implies, we can log any and every request sent to the web application. The ''Log'' action is an essential action and should be heavily implemented in Stinger deployment.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The ''Log'' action currently accepts 3 parameters:&lt;br /&gt;
&lt;br /&gt;
 '''log''' - the log file where the message should be recorded&lt;br /&gt;
&lt;br /&gt;
 '''level''' - the level of the log message (i.e. INFO, SEVERE, etc.)&lt;br /&gt;
&lt;br /&gt;
 '''message''' - the message which shall be logged. The message parameter itself accepts 3 format parameters.&lt;br /&gt;
           These include the offender's ip address, the offender's remote port, the parameter/cookie name,&lt;br /&gt;
           the parameter/cookie value, an entity encoded version of the parameter/cookie value, and the JSESSIONID.&lt;br /&gt;
           The format strings are %ip, %port, %name, %value, %encoded_value, and %js respectively.&lt;br /&gt;
 '''limit''' - the limit of the log file size&lt;br /&gt;
 '''count''' - the maximum number of log files to use&lt;br /&gt;
 '''append''' - specifies append mode (true/false)&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public class Log extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	private static Logger logger = Logger.getLogger(&amp;quot;org.owasp.stinger.actions.Log&amp;quot;);&lt;br /&gt;
 	&lt;br /&gt;
 	private static FileHandler handler = null;&lt;br /&gt;
 	&lt;br /&gt;
 	private ServletContext context = null;&lt;br /&gt;
 	&lt;br /&gt;
 	public Log() {&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		this.context = context; 		&lt;br /&gt;
  	}&lt;br /&gt;
  	&lt;br /&gt;
  	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
  		String log = getParameter(&amp;quot;log&amp;quot;);&lt;br /&gt;
 		String level = getParameter(&amp;quot;level&amp;quot;);&lt;br /&gt;
 		String message = getParameter(&amp;quot;message&amp;quot;);&lt;br /&gt;
 		String limit = getParameter(&amp;quot;limit&amp;quot;);&lt;br /&gt;
 		String count = getParameter(&amp;quot;count&amp;quot;);&lt;br /&gt;
 		String append = getParameter(&amp;quot;append&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 		if(handler == null) {&lt;br /&gt;
 			getHandler(log, limit, count, append);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offender's IP **/&lt;br /&gt;
 		message = message.replace(&amp;quot;%ip&amp;quot;, request.getRemoteAddr());&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offender's Port **/&lt;br /&gt;
 		message = message.replace(&amp;quot;%port&amp;quot;, String.valueOf(request.getRemotePort()));&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offending parameter name **/&lt;br /&gt;
 		if(violation.getName() != null) {&lt;br /&gt;
 			message = message.replace(&amp;quot;%name&amp;quot;, violation.getName());&lt;br /&gt;
 		} else {&lt;br /&gt;
 			message = message.replace(&amp;quot;%name&amp;quot;, &amp;quot;NULL&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offending parameter value **/&lt;br /&gt;
 		if(violation.getValue() != null) {&lt;br /&gt;
 			message = message.replace(&amp;quot;%value&amp;quot;, violation.getValue());&lt;br /&gt;
 		} else {&lt;br /&gt;
 			message = message.replace(&amp;quot;%value&amp;quot;, &amp;quot;NULL&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offending parameter value HTML Encoded **/&lt;br /&gt;
 		if(violation.getValue() != null) {&lt;br /&gt;
 			message = message.replace(&amp;quot;%encoded_value&amp;quot;, violation.getValue());&lt;br /&gt;
 		} else {&lt;br /&gt;
 			message = message.replace(&amp;quot;%encoded_value&amp;quot;, &amp;quot;NULL&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		/** Offender's JSESSIONID (HASHED) **/&lt;br /&gt;
 		if(request.getCookie(&amp;quot;JSESSIONID&amp;quot;) != null) {&lt;br /&gt;
 			String s = request.getCookie(&amp;quot;JSESSIONID&amp;quot;).getValue();&lt;br /&gt;
 			byte[] b = null;&lt;br /&gt;
 			&lt;br /&gt;
 			try {&lt;br /&gt;
	  			b = CryptoUtil.doWeakHash(s.getBytes());&lt;br /&gt;
 			} catch (CryptoException e) {&lt;br /&gt;
 				context.log(&amp;quot;[Stinger-Filter] caught crypto exception in doAction&amp;quot;, e);&lt;br /&gt;
 			}&lt;br /&gt;
 			&lt;br /&gt;
 			message = message.replace(&amp;quot;%js&amp;quot;, Encoder.BASE64Encode(b));&lt;br /&gt;
 		} else {&lt;br /&gt;
 			message = message.replace(&amp;quot;%js&amp;quot;, &amp;quot;NULL&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		logger.log(new LogRecord(Level.parse(level.toUpperCase()), message));&lt;br /&gt;
 		&lt;br /&gt;
 		return CONTINUE;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	private synchronized void getHandler(String log, String limit, String count, String append) {&lt;br /&gt;
 		int l = -1;&lt;br /&gt;
 		int c = -1;&lt;br /&gt;
 		boolean a = false;&lt;br /&gt;
 		&lt;br /&gt;
 		try {&lt;br /&gt;
 			l = Integer.parseInt(limit);&lt;br /&gt;
 		} catch (NumberFormatException e) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] getHandler: &amp;quot; + l + &amp;quot; is not a valid int, defaulting to &amp;quot; +    (1024*1024));&lt;br /&gt;
 			&lt;br /&gt;
 			l = 1024*1024;&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		try {&lt;br /&gt;
 			c = Integer.parseInt(count);&lt;br /&gt;
 		} catch (NumberFormatException e) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] getHandler: &amp;quot; + count + &amp;quot; is not a valid int, defaulting to  1&amp;quot;);&lt;br /&gt;
 			&lt;br /&gt;
 			c = 1;&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		a = Boolean.parseBoolean(append);&lt;br /&gt;
 		&lt;br /&gt;
 		getHandler(log, l, c, a);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	private synchronized void getHandler(String log, int limit, int count, boolean append) {&lt;br /&gt;
 		&lt;br /&gt;
 		try {&lt;br /&gt;
 			if(handler == null) {&lt;br /&gt;
 				handler = new FileHandler(log, limit, count, append);&lt;br /&gt;
 			}&lt;br /&gt;
 		} catch (IOException ioe) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] exception in getHandler&amp;quot;, ioe);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Redirect==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
The ''Redirect'' action redirects a user to a specific page. This action is often used to send a user to an error message upon finding a violation.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The ''Redirect'' action currently accepts 1 parameter:&lt;br /&gt;
&lt;br /&gt;
 '''page''' - the page to redirect the user to&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public class Redirect extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	private ServletContext context = null;&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		this.context = context;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
 		String page = getParameter(&amp;quot;page&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 		try {&lt;br /&gt;
 			response.sendRedirect(page);&lt;br /&gt;
 		} catch (IOException ioe) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] caught exception during redirect&amp;quot;, ioe);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		return PROCESS;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Forward==&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
&lt;br /&gt;
The ''Forward'' action Forwards users request to a specific page for processing.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The ''Forward'' action currently accepts 1 parameter:&lt;br /&gt;
&lt;br /&gt;
 '''page''' - the page to forward the user to&lt;br /&gt;
&lt;br /&gt;
===Source Code===&lt;br /&gt;
&lt;br /&gt;
 public class Forward extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	private ServletContext context = null;&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		this.context = context;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
 		String page = getParameter(&amp;quot;page&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 		try {&lt;br /&gt;
 			request.getRequestDispatcher(page).forward(request, response);&lt;br /&gt;
 		} catch (IOException ioe) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] exception in doAction&amp;quot;, ioe);&lt;br /&gt;
 		} catch (ServletException se) {&lt;br /&gt;
 			context.log(&amp;quot;[Stinger-Filter] exception in doAction&amp;quot;, se);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		return PROCESS;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Encode ==&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
The ''encode'' action will HTML Entity Encode the violating value. This effectively prevents cross site scripting from the violating input value.&lt;br /&gt;
&lt;br /&gt;
=== Source Code ===&lt;br /&gt;
&lt;br /&gt;
 public class Encode extends AbstractAction {&lt;br /&gt;
 	&lt;br /&gt;
 	private void entityEncode(MutableHttpRequest request, String name, String value) {&lt;br /&gt;
 		String result = null;&lt;br /&gt;
 		&lt;br /&gt;
 		if(value != null) {&lt;br /&gt;
 			result = Encoder.HTMLEntityEncode(value);&lt;br /&gt;
 			&lt;br /&gt;
 			request.addParameter(name, result);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void init(ServletContext context) {&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public int doAction(Violation violation, MutableHttpRequest request, HttpServletResponse response) {&lt;br /&gt;
 		String name = null;&lt;br /&gt;
 		String value = null;&lt;br /&gt;
 		&lt;br /&gt;
 		name = violation.getName();&lt;br /&gt;
 		value = request.getParameter(name);&lt;br /&gt;
 		&lt;br /&gt;
 		entityEncode(request, name, value);&lt;br /&gt;
 		&lt;br /&gt;
 		return CONTINUE;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
=Example SVDL Configuration Files=&lt;br /&gt;
&lt;br /&gt;
The following are example SVDL configuration files. With the introduction of the global rules concept, configuring Stinger becomes significantly less cumbersome for even the most complex apps.&lt;br /&gt;
&lt;br /&gt;
== Template SVDL File ==&lt;br /&gt;
&lt;br /&gt;
This configuration should be used as a template for creating your own SVDL files. It contains a basic regular expression section, a basic cookie section, and no parameter rules.&lt;br /&gt;
&lt;br /&gt;
[http://www.owasp.org/releases/Stinger/Examples/stinger_template.xml Click here] to download this template SVDL file.&lt;br /&gt;
&lt;br /&gt;
== Encode all Input ==&lt;br /&gt;
&lt;br /&gt;
This SVDL configuration encodes all parameters in the HTTP request. By entity encoding all parameter-based user input, we significantly reduce the likelihood of certain forms of Cross Site Scripting and SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
[http://www.owasp.org/releases/Stinger/Examples/stinger_encode_all.xml Click here] to download this sample SVDL file.&lt;br /&gt;
&lt;br /&gt;
== Encode all Input and Log All Violations ==&lt;br /&gt;
&lt;br /&gt;
This SVDL configuration encodes all parameters in the HTTP request and logs all violations that may occur. As a result, we significantly reduce the likelihood of certain input validation attacks and we have a logging mechanism to detect and verifies these attacks.&lt;br /&gt;
&lt;br /&gt;
[http://www.owasp.org/releases/Stinger/Examples/stinger_encode_log_all.xml Click here] to download this sample SVDL file.&lt;br /&gt;
&lt;br /&gt;
== Encode all Input for a Particular URI ==&lt;br /&gt;
&lt;br /&gt;
This SVDL configuration encodes all parameters in the HTTP request that are sent to a specific set of URI's. If a malformed parameter is sent to another URI not listed in our rule, then the global rule handles the packet. Since the global rule does nothing, the malformed data will be accepted.&lt;br /&gt;
&lt;br /&gt;
[http://www.owasp.org/releases/Stinger/Examples/stinger_encode_specific_uri.xml Click here] to download this sample SVDL file.&lt;br /&gt;
&lt;br /&gt;
=Feedback and Participation =&lt;br /&gt;
&lt;br /&gt;
We hope you find Stinger useful. Please contribute back to the project by sending your comments, questions, and suggestions to the Stinger mailing list. Thanks!&lt;br /&gt;
&lt;br /&gt;
To join the OWASP Stinger mailing list or view the archives, please visit the [http://lists.owasp.org/mailman/listinfo/owasp-stinger subscription page].&lt;br /&gt;
&lt;br /&gt;
=Project Sponsors=&lt;br /&gt;
&lt;br /&gt;
The Stinger project is sponsored by [http://www.aspectsecurity.com http://www.owasp.org/images/d/d1/Aspect_logo.gif].&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Stinger Project]]&lt;/div&gt;</summary>
		<author><name>Wimp</name></author>	</entry>

	</feed>