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

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:University_of_British_Columbia_Logo.png&amp;diff=156834</id>
		<title>File:University of British Columbia Logo.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:University_of_British_Columbia_Logo.png&amp;diff=156834"/>
				<updated>2013-08-15T02:50:26Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:University of British Columbia Logo.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Ukl.jpg&amp;diff=156833</id>
		<title>File:Ukl.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Ukl.jpg&amp;diff=156833"/>
				<updated>2013-08-15T02:50:16Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:Ukl.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:PWC_log_resized.png&amp;diff=156832</id>
		<title>File:PWC log resized.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:PWC_log_resized.png&amp;diff=156832"/>
				<updated>2013-08-15T02:50:06Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:PWC log resized.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Northumbrialogo.jpg&amp;diff=156831</id>
		<title>File:Northumbrialogo.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Northumbrialogo.jpg&amp;diff=156831"/>
				<updated>2013-08-15T02:49:56Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:Northumbrialogo.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Nlu_logo.png&amp;diff=156830</id>
		<title>File:Nlu logo.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Nlu_logo.png&amp;diff=156830"/>
				<updated>2013-08-15T02:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:Nlu logo.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Nlu_logo.gif&amp;diff=156829</id>
		<title>File:Nlu logo.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Nlu_logo.gif&amp;diff=156829"/>
				<updated>2013-08-15T02:39:42Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:TPLOGO_master.jpg&amp;diff=156828</id>
		<title>File:TPLOGO master.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:TPLOGO_master.jpg&amp;diff=156828"/>
				<updated>2013-08-15T02:29:28Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Webappsecguy uploaded a new version of &amp;amp;quot;File:TPLOGO master.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156444</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156444"/>
				<updated>2013-08-05T17:41:43Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits the content to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution at page runtime on the DOM, G[A] is executed as active code instead of being properly interpolated as a scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed (instead of being safely rendered). Nonetheless, obfuscation of data on a crawled resource may sidestep detection algorithms (although obfuscation may hint at an attempted attack), and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against it. In summary, when the attack is successful, the attack succeeds due to improper [[Data_Validation|data validation]].&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]] and [[OWASP_AppSec_Europe_2008_-_Belgium|AppSec Europe 2008]], ''Next Generation Cross Site Scripting Worms'' (see also ''[https://www.owasp.org/images/1/1b/OWASP-AppSecEU08-Dabirsiaghi.pdf Building and Stopping Next Generation XSS Worms (May 8, 2008)]'', last accessed August 5, 2013). Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
The [[DOM_based_XSS_Prevention_Cheat_Sheet|DOM-based XSS Prevention Cheat Sheet]] provides guidance on defense against this attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156443</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156443"/>
				<updated>2013-08-05T17:33:17Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Clarification of verbiage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits those contents to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution from the DOM, G[A] is executed as active code instead of being properly interpolated as scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed instead of rendered. However, obfuscation of data on a crawled resource may sidestep detection, and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against it. In summary, when the attack is successful, the attack succeeds due to improper [[Data_Validation|data validation]].&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]] and [[OWASP_AppSec_Europe_2008_-_Belgium|AppSec Europe 2008]], ''Next Generation Cross Site Scripting Worms'' (see also ''[https://www.owasp.org/images/1/1b/OWASP-AppSecEU08-Dabirsiaghi.pdf Building and Stopping Next Generation XSS Worms (May 8, 2008)]'', last accessed August 5, 2013). Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
The [[DOM_based_XSS_Prevention_Cheat_Sheet|DOM-based XSS Prevention Cheat Sheet]] provides guidance on defense against this attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156442</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156442"/>
				<updated>2013-08-05T17:32:28Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Linking to prevention guidance.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits those contents to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution from the DOM, G[A] is executed as active code instead of being properly interpolated as scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed instead of rendered. However, obfuscation of data on a crawled resource may sidestep detection, and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against it. In summary, when the attack is successful, the attack succeeds due to improper [[Data_Validation|data validation]].&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]] and [[OWASP_AppSec_Europe_2008_-_Belgium|AppSec Europe 2008]], ''Next Generation Cross Site Scripting Worms'' (see also ''[https://www.owasp.org/images/1/1b/OWASP-AppSecEU08-Dabirsiaghi.pdf Building and Stopping Next Generation XSS Worms (May 8, 2008)]'', last accessed August 5, 2013). Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
The [[DOM_based_XSS_Prevention_Cheat_Sheet|DOM-based XSS Prevention Cheat Sheet]] provides guidance against this attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156441</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156441"/>
				<updated>2013-08-05T17:27:34Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Cross linking to Data Validation page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits those contents to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution from the DOM, G[A] is executed as active code instead of being properly interpolated as scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed instead of rendered. However, obfuscation of data on a crawled resource may sidestep detection, and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against it. In summary, the attack succeeds due to improper [[Data_Validation|data validation]]&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]] and [[OWASP_AppSec_Europe_2008_-_Belgium|AppSec Europe 2008]], ''Next Generation Cross Site Scripting Worms'' (see also ''[https://www.owasp.org/images/1/1b/OWASP-AppSecEU08-Dabirsiaghi.pdf Building and Stopping Next Generation XSS Worms (May 8, 2008)]'', last accessed August 5, 2013). Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156440</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156440"/>
				<updated>2013-08-05T17:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Citation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits those contents to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution from the DOM, G[A] is executed as active code instead of being properly interpolated as scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed instead of rendered. However, obfuscation of data on a crawled resource may sidestep detection, and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against all non-scalar data.&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]] and [[OWASP_AppSec_Europe_2008_-_Belgium|AppSec Europe 2008]], ''Next Generation Cross Site Scripting Worms'' (see also ''[https://www.owasp.org/images/1/1b/OWASP-AppSecEU08-Dabirsiaghi.pdf Building and Stopping Next Generation XSS Worms (May 8, 2008)]'', last accessed August 5, 2013). Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=RDI&amp;diff=156439</id>
		<title>RDI</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=RDI&amp;diff=156439"/>
				<updated>2013-08-05T16:58:36Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Redirected page to Reflected DOM Injection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Reflected DOM Injection]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156438</id>
		<title>Reflected DOM Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Reflected_DOM_Injection&amp;diff=156438"/>
				<updated>2013-08-05T16:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Created page with &amp;quot;Reflected DOM Injection, or ''RDI'', is a form of Stored Cross-Site Scripting.  The outline of the attack is as follo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reflected DOM Injection, or ''RDI'', is a form of [[Cross-site_scripting#Stored_and_Reflected_XSS_Attacks|Stored Cross-Site Scripting]].&lt;br /&gt;
&lt;br /&gt;
The outline of the attack is as follows:&lt;br /&gt;
&lt;br /&gt;
# Crawler G retrieves data elements from attacker page A and commits those contents to persisted storage as G[A] (e.g., a database row).&lt;br /&gt;
# End user visits application T. Application T's persisted storage is the set of {G}.&lt;br /&gt;
# End user's interaction with application T results in invocation of JavaScript code whereby G[A] is retrieved, and due to a failure neutralize the content in G[A] either prior to its persisted storage or during JavaScript execution from the DOM, G[A] is executed as active code instead of being properly interpolated as scalar-like primitive data value or closure-guarded object data.&lt;br /&gt;
&lt;br /&gt;
Maturely programmed crawlers often attempt to strip malicious data from crawled resources prior to persistent storage. Additionally, maturely programmed applications often utilize output escaping or JavaScript sandboxing to prevent crawled data from being executed instead of rendered. However, obfuscation of data on a crawled resource may sidestep detection, and reliance strictly on crawler sanitization of crawled resources may result in stored cross-site scripts executing if the target JavaScript context does not actively defend against all non-scalar data.&lt;br /&gt;
&lt;br /&gt;
Arshan Dabirsiaghi surmised that vulnerability to this attack would eventually surface in popular search engines during his presentation at [[OWASP_NYC_AppSec_2008_Conference|OWASP NYC AppSec 2008]], ''Next Generation Cross Site Scripting Worms''. Daniel Chechik and Anat Davidi confirmed Dabirsiaghi's surmisal by demonstrating such vulnerability in the Google Translate web application and Yahoo! cached page results during the DEF CON 21 security conference in their August 2013 ''[https://defcon.org/html/defcon-21/dc-21-speakers.html#Chechik Utilizing Popular Websites for Malicious Purposes Using RDI]'' presentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Attack]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Logout_and_Browser_Cache_Management_(OWASP-AT-007)&amp;diff=156412</id>
		<title>Testing for Logout and Browser Cache Management (OWASP-AT-007)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Logout_and_Browser_Cache_Management_(OWASP-AT-007)&amp;diff=156412"/>
				<updated>2013-08-05T00:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: post release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v3}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
In this phase, we check that the logout function is properly implemented, and that it is not possible to “reuse” a session after logout. We also check that the application automatically logs out a user when that user has been idle for a certain amount of time, and that no sensitive data remains stored in the browser cache.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
The end of a web session is usually triggered by one of the following two events:&lt;br /&gt;
&lt;br /&gt;
* The user logs out&lt;br /&gt;
* The user remains idle for a certain amount of time and the application automatically logs him/her out&lt;br /&gt;
&lt;br /&gt;
Both cases must be implemented carefully, in order to avoid introducing weaknesses that could be exploited by an attacker to gain unauthorized access. More specifically, the logout function must ensure that all session tokens (e.g., cookies) are properly destroyed or made unusable, and that proper controls are enforced at the server side to prevent the reuse of session tokens.&lt;br /&gt;
&lt;br /&gt;
Note: the most important thing is for the application to invalidate the session on the server side. Generally this means that the code must invoke the appropriate methods, e.g., HttpSession.invalidate() in Java and Session.abandon() in .NET.  Clearing the cookies from the browser is a nice touch, but is not strictly necessary, since if the session is properly invalidated on the server, having the cookie in the browser will not help an attacker.&lt;br /&gt;
&lt;br /&gt;
If such actions are not properly carried out, an attacker could replay these session tokens in order to “resurrect” the session of a legitimate user and impersonate him/her (this attack is usually known as 'cookie replay'). Of course, a mitigating factor is that the attacker needs to be able to access those tokens (which are stored on the victim's PC), but, in a variety of cases, this may not be impossible or particularly difficult. The most common scenario for this kind of attack is a public computer that is used to access some private information (e.g., webmail, online bank account): when the user has finished using the application and logs out, if the logout process is not properly enforced, the following user could access the same account, for instance,  by simply pressing the “back” button of the browser. Another scenario can result from a Cross Site Scripting vulnerability or a connection that is not 100% protected by SSL: a flawed logout function would make stolen cookies useful for a much longer time, making life for the attacker much easier.&lt;br /&gt;
The third test of this chapter is aimed to check that the application prevents the browser to cache sensitive data, which again would pose a danger to a user accessing the application from a public computer.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and examples ==&lt;br /&gt;
'''Logout function:''' &amp;lt;br&amp;gt;&lt;br /&gt;
The first step is to test the presence of the logout function. Check that the application provides a logout button and that this button is present and well visible on all pages that require authentication. A logout button that is not clearly visible, or that is present only on certain pages, poses a security risk, as the user might forget to use it at the end of his/her session.&lt;br /&gt;
&lt;br /&gt;
The second step consists of checking what happens to the session tokens when the logout function is invoked. For instance, when cookies are used, a proper behavior is to erase all session cookies, by issuing a new Set-Cookie directive that sets their value to a non-valid one (e.g., “NULL” or some equivalent value), and, if the cookie is persistent, setting its expiration date in the past, which tells the browser to discard the cookie. So, if the authentication page originally sets a cookie in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set-Cookie: SessionID=sjdhqwoy938eh1q; expires=Sun, 29-Oct-2006 12:20:00 GMT; path=/; domain=victim.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
the logout function should trigger a response somewhat resembling the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set-Cookie: SessionID=noauth; expires=Sat, 01-Jan-2000 00:00:00 GMT; path=/; domain=victim.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first (and simplest) test at this point consists of logging out and then hitting the 'back' button of the browser, to check whether we are still authenticated. If we are, it means that the logout function has been implemented insecurely, and that the logout function does not destroy the session IDs. This happens sometimes with applications that use non-persistent cookies and that require the user to close his browser in order to effectively erase such cookies from memory. Some of these applications provide a warning to the user, suggesting her to close her browser, but this solution completely relies on the user behavior, and results in a lower level of security compared to destroying the cookies. Other applications might try to close the browser using JavaScript, but that again is a solution that relies on the client behavior, which is intrinsically less secure, since the client browser could be configured to limit the execution of scripts (and, in this case, a configuration that had the goal of increasing security would end up decreasing it). Moreover, the effectiveness of this solution would be dependent on the browser vendor, version, and settings (e.g., the JavaScript code might successfully close an Internet Explorer instance, but fail to close a Firefox one).&lt;br /&gt;
&lt;br /&gt;
If by pressing the 'back' button we can access previous pages but not access new ones, then we are simply accessing the browser cache. If these pages contain sensitive data, it means that the application did not forbid the browser to cache it (by not setting the Cache-Control header, a different kind of problem that we will analyze later).&lt;br /&gt;
&lt;br /&gt;
After the “back button” technique has been tried, it's time for something a little more sophisticated: we can re-set the cookie to the original value and check whether we can still access the application in an authenticated fashion. If we can, it means that there is not a server-side mechanism that keeps track of active and non active cookies, but that the correctness of the information stored in the cookie is enough to grant access. To set a cookie to a determined value, we can use WebScarab, and, intercepting one response of the application, insert a Set-Cookie header with our desired values:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[image:TestingGuide-LogoutTest-fig1.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Alternatively, we can install a cookie editor in our browser (e.g., Add N Edit Cookies in Firefox):&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[image:TestingGuide-LogoutTest-fig2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A notable example of a design where there is no control at the server side about cookies that belong to logged-out users is ASP.NET FormsAuthentication class, where the cookie is basically an encrypted and authenticated version of the user credentials, which are decrypted and checked by the server side. While this is very effective in preventing cookie tampering, the fact that the server does not maintain an internal record of the session status means that it is possible to launch a cookie replay attack after the legitimate user has logged out, provided that the cookie has not expired yet (see the references for further detail).&lt;br /&gt;
&lt;br /&gt;
It should be noted that this test only applies to session cookies, and that a persistent cookie that only stores data about some minor user preferences (e.g., site appearance) and that is not deleted when the user logs out is not to be considered a security risk.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Timeout logout'''&amp;lt;br&amp;gt;&lt;br /&gt;
The same approach that we have seen in the previous section can be applied when measuring the timeout logout. The most appropriate logout time should be a right balance between security (shorter logout time) and usability (longer logout time) and heavily depends on the criticality of the data handled by the application. A 60 minute logout time for a public forum can be acceptable, but such a long time would be way too much in a home banking application. In any case, any application that does not enforce a timeout-based logout should be considered not secure, unless such a behavior is addressing a specific functional requirement.&lt;br /&gt;
The testing methodology is very similar to the one outlined in the previous section. First, we have to check whether a timeout exists, for instance, by logging in and then killing some time reading some other Testing Guide chapter, waiting for the timeout logout to be triggered. As in the logout function, after the timeout has passed, all session tokens should be destroyed or be unusable. We also need to understand whether the timeout is enforced by the client or by the server (or both). Getting back to our cookie example, if the session cookie is non-persistent (or, more in general, the session token does not store any data about the time), we can be sure that the timeout is enforced by the server. If the session token contains some time related data (e.g., login time, or last access time, or expiration date for a persistent cookie), then we know that the client is involved in the timeout enforcing. In this case, we need to modify the token (if it's not cryptographically protected) and see what happens to our session. For instance, we can set the cookie expiration date far in the future and see whether our session can be prolonged. As a general rule, everything should be checked server-side and it should not be possible, by re-setting the session cookies to previous values, to access the application again.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Cached pages'''&amp;lt;br&amp;gt;&lt;br /&gt;
Logging out from an application obviously does not clear the browser cache of any sensitive information that might have been stored. Therefore, another test that is to be performed is to check that our application does not leak any critical data into the browser cache. In order to do that, we can use WebScarab and search through the server responses that belong to our session, checking that for every page that contains sensitive information the server instructed the browser not to cache any data. Such a directive can be issued in the HTTP response headers (POST RELEASE NOTE: Cache-Control: no-cache, no-store coupled with Expires: 0 and Pragma: no-cache is generally robust although additional flags may be necessary for the Cache-Control header in order to better prevent persistently linked files on the filesystem; these include must-revalidate, pre-check=0, post-check=0, max-age=0, and s-maxage=0.)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1:&lt;br /&gt;
Cache-Control: no-cache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.0:&lt;br /&gt;
Pragma: no-cache&lt;br /&gt;
Expires: &amp;lt;past date or illegal value (e.g., 0)&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Alternatively, the same effect can be obtained directly at the HTML level, including in each page that contains sensitive data the following code: (POST RELEASE NOTE: META TAGS ARE COMMONLY INEFFECTIVE.)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1:&lt;br /&gt;
&amp;lt;META HTTP-EQUIV=&amp;quot;Cache-Control&amp;quot; CONTENT=&amp;quot;no-cache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.0: &lt;br /&gt;
&amp;lt;META HTTP-EQUIV=&amp;quot;Pragma&amp;quot; CONTENT=&amp;quot;no-cache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;META HTTP-EQUIV=”Expires” CONTENT=”Sat, 01-Jan-2000 00:00:00 GMT”&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
For instance, if we are testing an e-commerce application, we should look for all pages that contain a credit card number or some other financial information, and check that all those pages enforce the no-cache directive.&lt;br /&gt;
On the other hand, if we find pages that contain critical information but that fail to instruct the browser not to cache their content, we know that sensitive information will be stored on the disk, and we can double-check that simply by looking for it in the browser cache. The exact location where that information is stored depends on the client operating system and on the browser that has been used. Here are some examples:&lt;br /&gt;
&lt;br /&gt;
* Mozilla Firefox:&lt;br /&gt;
** Unix/Linux: ~/.mozilla/firefox/&amp;lt;profile-id&amp;gt;/Cache/&lt;br /&gt;
** Windows: C:\Documents and Settings\&amp;lt;user_name&amp;gt;\Local Settings\Application Data\Mozilla\Firefox\Profiles\&amp;lt;profile-id&amp;gt;\Cache&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Internet Explorer:&lt;br /&gt;
** C:\Documents and Settings\&amp;lt;user_name&amp;gt;\Local Settings\Temporary Internet Files&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example == &lt;br /&gt;
As a general rule, we need to check that:&lt;br /&gt;
* The logout function effectively destroys all session token, or at least renders them unusable&lt;br /&gt;
* The server performs proper checks on the session state, disallowing an attacker to replay some previous token&lt;br /&gt;
* A timeout is enforced and it is properly checked by the server. If the server uses an expiration time that is read from a session token that is sent by the client, the token must be cryptographically protected&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For the secure cache test, the methodology is equivalent to the black box case, as in both scenarios we have full access to the server response headers and to the HTML code.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&lt;br /&gt;
* ASP.NET Forms Authentication: &amp;quot;Best Practices for Software Developers&amp;quot; - http://www.foundstone.com/resources/whitepapers/ASPNETFormsAuthentication.pdf&lt;br /&gt;
* &amp;quot;The FormsAuthentication.SignOut method does not prevent cookie reply attacks in ASP.NET applications&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;900111&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* Add N Edit Cookies (Firefox extension): https://addons.mozilla.org/firefox/573/&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Transport_Layer_Protection_Cheat_Sheet&amp;diff=156411</id>
		<title>Transport Layer Protection Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Transport_Layer_Protection_Cheat_Sheet&amp;diff=156411"/>
				<updated>2013-08-05T00:10:40Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: clairification.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction  =&lt;br /&gt;
&lt;br /&gt;
This article provides a simple model to follow when implementing transport layer protection for an application. Although the concept of SSL is known to many, the actual details and security specific decisions of implementation are often poorly understood and frequently result in insecure deployments. This article establishes clear rules which provide guidance on securely designing and configuring transport layer security for an application. This article is focused on the use of SSL/TLS between a web application and a web browser, but that we also encourage the use of SSL/TLS or other network encryption technologies, such as VPN, on back end and other non-browser based connections.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Architectural Decision  ==&lt;br /&gt;
&lt;br /&gt;
An architectural decision must be made to determine the appropriate method to protect data when it is being transmitted.  The most common options available to corporations are Virtual Private Networks (VPN) or a SSL/TLS model commonly used by web applications. The selected model is determined by the business needs of the particular organization. For example, a VPN connection may be the best design for a partnership between two companies that includes mutual access to a shared server over a variety of protocols. Conversely, an Internet facing enterprise web application would likely be best served by a SSL/TLS model. &lt;br /&gt;
&lt;br /&gt;
This cheat sheet will focus on security considerations when the SSL/TLS model is selected. This is a frequently used model for publicly accessible web applications.&lt;br /&gt;
&lt;br /&gt;
= Providing Transport Layer Protection with SSL/TLS  =&lt;br /&gt;
&lt;br /&gt;
== Benefits  ==&lt;br /&gt;
&lt;br /&gt;
The primary benefit of transport layer security is the protection of web application data from unauthorized disclosure and modification when it is transmitted between clients (web browsers) and the web application server, and between the web application server and back end and other non-browser based enterprise components. &lt;br /&gt;
&lt;br /&gt;
The server validation component of TLS provides authentication of the server to the client.  If configured to require client side certificates, TLS can also play a role in client authentication to the server. However, in practice client side certificates are not often used in lieu of username and password based authentication models for clients.&lt;br /&gt;
&lt;br /&gt;
TLS also provides two additional benefits that are commonly overlooked; integrity guarantees and replay prevention. A TLS stream of communication contains built-in controls to prevent tampering with any portion of the encrypted data. In addition, controls are also built-in to prevent a captured stream of TLS data from being replayed at a later time.&lt;br /&gt;
&lt;br /&gt;
It should be noted that TLS provides the above guarantees to data during transmission. TLS does not offer any of these security benefits to data that is at rest. Therefore appropriate security controls must be added to protect data while at rest within the application or within data stores.&lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
&lt;br /&gt;
The basic requirements for using TLS are: access to a Public Key Infrastructure (PKI) in order to obtain certificates, access to a directory or an Online Certificate Status Protocol (OCSP) responder in order to check certificate revocation status, and agreement/ability to support a minimum configuration of protocol versions and protocol options for each version.&lt;br /&gt;
&lt;br /&gt;
== SSL vs. TLS  ==&lt;br /&gt;
&lt;br /&gt;
The terms, Secure Socket Layer (SSL) and Transport Layer Security (TLS) are often used interchangeably. In fact, SSL v3.1 is equivalent to TLS v1.0. However, different versions of SSL and TLS are supported by modern web browsers and by most modern web frameworks and platforms. For the purposes of this cheat sheet we will refer to the technology generically as TLS. Recommendations regarding the use of SSL and TLS protocols, as well as browser support for TLS, can be found in the rule below title [[Transport_Layer_Protection_Cheat_Sheet#Rule_-_Only_Support_Strong_Protocols| &amp;quot;Only Support Strong Protocols&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Asvs_cryptomodule.gif|thumb|350px|right|Cryptomodule Parts and Operation]]&lt;br /&gt;
&lt;br /&gt;
== When to Use a FIPS 140-2 Validated Cryptomodule ==&lt;br /&gt;
&lt;br /&gt;
If the web application may be the target of determined attackers (a common threat model for Internet accessible applications handling sensitive data), it is strongly advised to use TLS services that are provided by [http://csrc.nist.gov/groups/STM/cmvp/validation.html FIPS 140-2 validated cryptomodules]. &lt;br /&gt;
&lt;br /&gt;
A cryptomodule, whether it is a software library or a hardware device, basically consists of three parts:&lt;br /&gt;
&lt;br /&gt;
* Components that implement cryptographic algorithms (symmetric and asymmetric algorithms, hash algorithms, random number generator algorithms, and message authentication code algorithms) &lt;br /&gt;
* Components that call and manage cryptographic functions (inputs and outputs include cryptographic keys and so-called critical security parameters) &lt;br /&gt;
* A physical container around the components that implement cryptographic algorithms and the components that call and manage cryptographic functions&lt;br /&gt;
&lt;br /&gt;
The security of a cryptomodule and its services (and the web applications that call the cryptomodule) depend on the correct implementation and integration of each of these three parts. In addition, the cryptomodule must be used and accessed securely. The includes consideration for:&lt;br /&gt;
&lt;br /&gt;
* Calling and managing cryptographic functions&lt;br /&gt;
* Securely Handling inputs and output&lt;br /&gt;
* Ensuring the secure construction of the physical container around the components&lt;br /&gt;
&lt;br /&gt;
In order to leverage the benefits of TLS it is important to use a TLS service (e.g. library, web framework, web application server) which has been FIPS 140-2 validated. In addition, the cryptomodule must be installed, configured and operated in either an approved or an allowed mode to provide a high degree of certainty that the FIPS 140-2 validated cryptomodule is providing the expected security services in the expected manner.&lt;br /&gt;
&lt;br /&gt;
If the system is legally required to use FIPS 140-2 encryption (e.g., owned or operated by or on behalf of the U.S. Government) then TLS must be used and SSL disabled. Details on why SSL is unacceptable are described in Section 7.1 of [http://csrc.nist.gov/groups/STM/cmvp/documents/fips140-2/FIPS1402IG.pdf Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Validation Program].&lt;br /&gt;
&lt;br /&gt;
Further reading on the use of TLS to protect highly sensitive data against determined attackers can be viewed in [http://csrc.nist.gov/publications/nistpubs/800-52/SP800-52.pdf SP800-52 Guidelines for the Selection and Use of Transport Layer Security (TLS) Implementations]&lt;br /&gt;
&lt;br /&gt;
== Secure Server Design  ==&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use TLS for All Login Pages and All Authenticated Pages  ===&lt;br /&gt;
&lt;br /&gt;
The login page and all subsequent authenticated pages must be exclusively accessed over TLS. The initial login page, referred to as the &amp;quot;login landing page&amp;quot;, must be served over TLS. Failure to utilize TLS for the login landing page allows an attacker to modify the login form action, causing the user's credentials to be posted to an arbitrary location. Failure to utilize TLS for authenticated pages after the login enables an attacker to view the unencrypted session ID and compromise the user's authenticated session. &lt;br /&gt;
&lt;br /&gt;
=== Rule - Use TLS on Any Networks (External and Internal) Transmitting Sensitive Data  ===&lt;br /&gt;
&lt;br /&gt;
All networks, both external and internal, which transmit sensitive data must utilize TLS or an equivalent transport layer security mechanism. It is not sufficient to claim that access to the internal network is &amp;quot;restricted to employees&amp;quot;. Numerous recent data compromises have shown that the internal network can be breached by attackers. In these attacks, sniffers have been installed to access unencrypted sensitive data sent on the internal network. &lt;br /&gt;
&lt;br /&gt;
=== Rule - Do Not Provide Non-TLS Pages for Secure Content  ===&lt;br /&gt;
&lt;br /&gt;
All pages which are available over TLS must not be available over a non-TLS connection. A user may inadvertently bookmark or manually type a URL to a HTTP page (e.g. http://example.com/myaccount) within the authenticated portion of the application. If this request is processed by the application then the response, and any sensitive data, would be returned to the user over the clear text HTTP.&lt;br /&gt;
&lt;br /&gt;
=== Rule - REMOVED - Do Not Perform Redirects from Non-TLS Page to TLS Login Page  ===&lt;br /&gt;
&lt;br /&gt;
This recommendation has been removed. Ultimately, the below guidance will only provide user education and cannot provide any technical controls to protect the user against a man-in-the-middle attack.  &lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
A common practice is to redirect users that have requested a non-TLS version of the login page to the TLS version (e.g. http://example.com/login redirects to https://example.com/login). This practice creates an additional attack vector for a man in the middle attack. In addition, redirecting from non-TLS versions to the TLS version reinforces to the user that the practice of requesting the non-TLS page is acceptable and secure.&lt;br /&gt;
&lt;br /&gt;
In this scenario, the man-in-the-middle attack is used by the attacker to intercept the non-TLS to TLS redirect message. The attacker then injects the HTML of the actual login page and changes the form to post over unencrypted HTTP. This allows the attacker to view the user's credentials as they are transmitted in the clear.&lt;br /&gt;
&lt;br /&gt;
It is recommended to display a security warning message to the user whenever the non-TLS login page is requested. This security warning should urge the user to always type &amp;quot;HTTPS&amp;quot; into the browser or bookmark the secure login page.  This approach will help educate users on the correct and most secure method of accessing the application.&lt;br /&gt;
&lt;br /&gt;
Currently there are no controls that an application can enforce to entirely mitigate this risk. Ultimately, this issue is the responsibility of the user since the application cannot prevent the user from initially typing [http://owasp.org http://example.com/login] (versus HTTPS). &lt;br /&gt;
&lt;br /&gt;
Note: [http://www.w3.org/Security/wiki/Strict_Transport_Security Strict Transport Security] will address this issue and will provide a server side control to instruct supporting browsers that the site should only be accessed over HTTPS&lt;br /&gt;
&lt;br /&gt;
=== Rule - Do Not Mix TLS and Non-TLS Content  ===&lt;br /&gt;
&lt;br /&gt;
A page that is available over TLS must be comprised completely of content which is transmitted over TLS. The page must not contain any content that is transmitted over unencrypted HTTP. This includes content from unrelated third party sites. &lt;br /&gt;
&lt;br /&gt;
An attacker could intercept any of the data transmitted over the unencrypted HTTP and inject malicious content into the user's page. This malicious content would be included in the page even if the overall page is served over TLS. In addition, an attacker could steal the user's session cookie that is transmitted with any non-TLS requests. This is possible if the cookie's 'secure' flag is not set. See the rule 'Use &amp;quot;Secure&amp;quot; Cookie Flag'&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use &amp;quot;Secure&amp;quot; Cookie Flag  ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Secure&amp;quot; flag must be set for all user cookies. Failure to use the &amp;quot;secure&amp;quot; flag enables an attacker to access the session cookie by tricking the user's browser into submitting a request to an unencrypted page on the site. This attack is possible even if the server is not configured to offer HTTP content since the attacker is monitoring the requests and does not care if the server responds with a 404 or doesn't respond at all.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Keep Sensitive Data Out of the URL ===&lt;br /&gt;
&lt;br /&gt;
Sensitive data must not be transmitted via URL arguments. A more appropriate place is to store sensitive data in a server side repository or within the user's session.  When using TLS the URL arguments and values are encrypted during transit. However, there are two methods that the URL arguments and values could be exposed.&lt;br /&gt;
&lt;br /&gt;
1. The entire URL is cached within the local user's browser history. This may expose sensitive data to any other user of the workstation.&lt;br /&gt;
&lt;br /&gt;
2. The entire URL is exposed if the user clicks on a link to another HTTPS site. This may expose sensitive data within the referral field to the third party site. This exposure occurs in most browsers and will only occur on transitions between two TLS sites. &lt;br /&gt;
&lt;br /&gt;
For example, a user following a link on [http://owasp.org https://example.com] which leads to [http://owasp.org https://someOtherexample.com] would expose the full URL of [http://owasp.org https://example.com] (including URL arguments) in the referral header (within most browsers). This would not be the case if the user followed a link on [http://owasp.org https://example.com] to [http://owasp.org http://someHTTPexample.com]&lt;br /&gt;
&lt;br /&gt;
=== Rule - Prevent Caching of Sensitive Data ===&lt;br /&gt;
&lt;br /&gt;
The TLS protocol provides confidentiality only for data in transit but it does not help with potential data leakage issues at the client or intermediary proxies. As a result, it is frequently prudent to instruct these nodes not to cache or persist sensitive data. One option is to add anticaching headers to relevant HTTP responses, (for example, &amp;quot;Cache-Control: no-cache, no-store&amp;quot; and &amp;quot;Expires: 0&amp;quot; for coverage of many modern browsers as of 2013). For compatibility with HTTP/1.0 (i.e., when user agents are really old or the webserver works around quirks by forcing HTTP/1.0) the response should also include the header &amp;quot;Pragma: no-cache&amp;quot;. More information is available in [http://www.ietf.org/rfc/rfc2616.txt HTTP 1.1 RFC 2616], section 14.9.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use HTTP Strict Transport Security ===&lt;br /&gt;
&lt;br /&gt;
A new browser security setting called HTTP Strict Transport Security (HSTS) will significantly enhance the implementation of TLS for a domain. HSTS is enabled via a special response header and this instructs [https://www.owasp.org/index.php/HTTP_Strict_Transport_Security#Browser_Support compatible browsers] to enforce the following security controls:&lt;br /&gt;
&lt;br /&gt;
* All requests to the domain will be sent over HTTPS&lt;br /&gt;
* Any attempts to send an HTTP requests to the domain will be automatically upgraded by the browser to HTTPS before the request is sent&lt;br /&gt;
* If a user encounters a bad SSL certificate, the user will receive an error message and will not be allowed to override the warning message&lt;br /&gt;
&lt;br /&gt;
Additional information on HSTS can be found at [https://www.owasp.org/index.php/HTTP_Strict_Transport_Security https://www.owasp.org/index.php/HTTP_Strict_Transport_Security] and also on the OWASP [http://www.youtube.com/watch?v=zEV3HOuM_Vw&amp;amp;feature=youtube_gdata AppSecTutorial Series - Episode 4]&lt;br /&gt;
&lt;br /&gt;
=== Rule - Prefer Ephemeral Key Exchanges ===&lt;br /&gt;
&lt;br /&gt;
Ephemeral key exchanges are based on Diffie-Hellman and use per-session, temporary keys during the initial SSL/TLS handshake. They provide perfect forward secrecy (PFS), which means a compromise of the server's long term signing key does not compromise the confidentiality of past session. When the server uses an ephemeral key, the server will sign the temporary key with its long term key (the long term key is the customary key available in its certificate).&lt;br /&gt;
&lt;br /&gt;
If you have a server farm and are providing forward secrecy, then you might have to disable session resumption. For example, Apache writes the session id's and master secrets to disk so all servers in the farm can participate in resuming a session (there is currently no in-memory mechanism to achieve the sharing). Writing the session id and master secret to disk undermines forward secrecy.&lt;br /&gt;
&lt;br /&gt;
== Server Certificate and Protocol Configuration  ==&lt;br /&gt;
&lt;br /&gt;
Note: If using a FIPS 140-2 cryptomodule disregard the following rules and defer to the recommended configuration for the particular cryptomodule.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use an Appropriate Certification Authority for the Application's User Base  ===&lt;br /&gt;
&lt;br /&gt;
An application user must never be presented with a warning that the certificate was signed by an unknown or untrusted authority. The application's user population must have access to the public certificate of the certification authority which issued the server's certificate. For Internet accessible websites, the most effective method of achieving this goal is to purchase the TLS certificate from a recognize certification authority. Popular Internet browsers already contain the public certificates of these recognized certification authorities. &lt;br /&gt;
&lt;br /&gt;
Internal applications with a limited user population can use an internal certification authority provided its public certificate is securely distributed to all users. However, remember that all certificates issued by this certification authority will be trusted by the users. Therefore, utilize controls to protect the private key and ensure that only authorized individuals have the ability to sign certificates. &lt;br /&gt;
&lt;br /&gt;
The use of self signed certificates is never acceptable. Self signed certificates negate the benefit of end-point authentication and also significantly decrease the ability for an individual to detect a man-in-the-middle attack. &lt;br /&gt;
&lt;br /&gt;
=== Rule - Only Support Strong Protocols ===&lt;br /&gt;
&lt;br /&gt;
SSL/TLS is a collection of protocols. Weaknesses have been identified with earlier SSL protocols, including [http://www.schneier.com/paper-ssl-revised.pdf SSLv2] and [http://www.yaksman.org/~lweith/ssl.pdf SSLv3]. The best practice for transport layer protection is to only provide support for the TLS protocols - TLS1.0, TLS 1.1 and TLS 1.2. This configuration will provide maximum protection against skilled and determined attackers and is appropriate for applications handling sensitive data or performing critical operations.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers Nearly all modern browsers support at least TLS 1.0]. As of February 2013, contemporary browsers (Chrome v20+, IE v8+, Opera v10+, and Safari v5+) [http://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers support TLS 1.1 and TLS 1.2]. You should provide support for TLS 1.1 and TLS 1.2 to accommodate clients which support the protocols.&lt;br /&gt;
&lt;br /&gt;
In situations where lesser security requirements are necessary, it may be acceptable to also provide support for SSL 3.0 and TLS 1.0. [http://www.yaksman.org/~lweith/ssl.pdf SSLv3 has known weaknesses] which severely compromise the channel's security. TLS 1.0 suffers [http://www.yassl.com/yaSSL/Blog/Entries/2010/10/7_Differences_between_SSL_and_TLS_Protocol_Versions.html CBC Chaining attacks and Padding Oracle attacks]. SSLv3 and TLSv1.0 should only be used only after risk analysis and acceptance.&lt;br /&gt;
&lt;br /&gt;
Under no circumstances should SSLv2 be enabled as a protocol selection. The [http://www.schneier.com/paper-ssl-revised.pdf SSLv2 protocol is broken] and does not provide adequate transport layer protection.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Only Support Strong Cryptographic Ciphers  ===&lt;br /&gt;
&lt;br /&gt;
Each protocol (SSLv3, TLSv1.0, etc) provides cipher suites. As of TLS 1.2, [http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-3 there is support for over 300 suites (320+ and counting)], including [http://www.mail-archive.com/cryptography@randombit.net/msg03785.html national vanity cipher suites]. The strength of the encryption used within a TLS session is determined by the encryption cipher negotiated between the server and the browser. In order to ensure that only strong cryptographic ciphers are selected the server must be modified to disable the use of weak ciphers. It is recommended to configure the server to only support strong ciphers and to use sufficiently large key sizes. In general, the following should be observed when selecting CipherSuites:&lt;br /&gt;
&lt;br /&gt;
* Disable cipher suites that do not offer authentication (NULL ciphersuites, aNULL or eNULL)&lt;br /&gt;
* Disable anonymous Diffie-Hellman key exchange (ADH)&lt;br /&gt;
* Disable export level ciphers (EXP, eg. ciphers containing DES)&lt;br /&gt;
* Disable key sizes smaller than 128 bits for encrypting payload traffic&lt;br /&gt;
* Disable the use of MD5 as a hashing mechanism for payload traffic&lt;br /&gt;
* Use AES, 3-key 3DES for encryption operated in CBC mode &lt;br /&gt;
* Stream Ciphers which XOR the key stream with plaintext (such as AES/CTR mode)&lt;br /&gt;
* Use SHA1 or above for digests, prefer SHA2 (or equivalent)&lt;br /&gt;
* Support ephemeral Diffie-Hellman key exchange&lt;br /&gt;
&lt;br /&gt;
Note: The TLS usage of MD5 does not expose the TLS protocol to any of the weaknesses of the MD5 algorithm (see FIPS 140-2 IG). However, MD5 must never be used outside of TLS protocol (e.g. for general hashing). For example, the RSA client authentication signature always uses both SHA-1 and MD5, and that usage is allowed.&lt;br /&gt;
&lt;br /&gt;
Note: Use of Ephemeral Diffie-Hellman key exchange will protect confidentiality of the transmitted plaintext data even if the corresponding RSA or DSS server private key got compromised. An attacker would have to perform active man-in-the-middle attack at the time of the key exchange to be able to extract the transmitted plaintext. All modern browsers support this key exchange with the notable exception of Internet Explorer prior to Windows Vista.&lt;br /&gt;
&lt;br /&gt;
Additional information can be obtained within the [http://www.ietf.org/rfc/rfc4346.txt TLS 1.1 RFC 4346] and [http://csrc.nist.gov/groups/STM/cmvp/documents/fips140-2/FIPS1402IG.pdf FIPS 140-2 IG], and [&lt;br /&gt;
&lt;br /&gt;
=== Rule - Support TLS-PSK and TLS-SRP for Mutual Authentication ===&lt;br /&gt;
&lt;br /&gt;
When using a shared secret or password offer TLS-PSK (Pre-Shared Key) or TLS-SRP (Secure Remote Password), which are known as Password Authenticated Key Exchange (PAKEs). TLS-PSK and TLS-SRP properly bind the channel, which refers to the cryptographic binding between the outer tunnel and the inner authentication protocol. IANA currently reserves [http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-3 79 PSK cipehr suites] and [http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-3 9 SRP cipher suites].&lt;br /&gt;
&lt;br /&gt;
Basic authentication places the user's password on the wire in the plain text after a server authenticates itself. Basic authentication only provides unilateral authentication. In contrast, both TLS-PSK and TLS-SRP provide mutual authentication, meaning each party proves it knows the password without placing the password on the wire in the plain text.&lt;br /&gt;
&lt;br /&gt;
Finally, using a PAKE removes the need to trust an outside party, such as a Certification Authority (CA).&lt;br /&gt;
&lt;br /&gt;
=== Rule - Only Support Secure Renegotiations  ===&lt;br /&gt;
&lt;br /&gt;
A design weakness in TLS, identified as [http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-3555 CVE-2009-3555], allows an attacker to inject a plaintext of his choice into a TLS session of a victim. In the HTTPS context the attacker might be able to inject his own HTTP requests on behalf of the victim. The issue can be mitigated either by disabling support for TLS renegotiations or by supporting only renegotiations compliant with [http://www.ietf.org/rfc/rfc5746.txt RFC 5746]. All modern browsers have been updated to comply with this RFC.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Disable Compression ===&lt;br /&gt;
&lt;br /&gt;
Compression Ratio Info-leak Made Easy (CRIME) is an exploit against the data compression scheme used by the TLS and SPDY protocols. The exploit allows an adversary to recover user authentication cookies from HTTPS. The recovered cookie can be subsequently used for session hijacking attacks.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use Strong Keys &amp;amp; Protect Them ===&lt;br /&gt;
&lt;br /&gt;
The private key used to generate the cipher key must be sufficiently strong for the anticipated lifetime of the private key and corresponding certificate. The current best practice is to select a key size of at least 2048. Keys of length 1024 will be obsolete beginning in 2010.  Additional information on key lifetimes and comparable key strengths can be found in [http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf NIST SP 800-57]. In addition, the private key must be stored in a location that is protected from unauthorized access.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use a Certificate That Supports Required Domain Names ===&lt;br /&gt;
&lt;br /&gt;
A user should never be presented with a certificate error, including prompts to reconcile domain or hostname mismatches, or expired certificates. If the application is available at both [https://owasp.org https://www.example.com] and [https://owasp.org https://example.com] then an appropriate certificate, or certificates, must be presented to accommodate the situation. The presence of certificate errors desensitizes users to TLS error messages and increases the possibility an attacker could launch a convincing phishing or man-in-the-middle attack.&lt;br /&gt;
&lt;br /&gt;
For example, consider a web application accessible at [https://owasp.org https://abc.example.com] and [https://owasp.org https://xyz.example.com]. One certificate should be acquired for the host or server ''abc.example.com''; and a second certificate for host or server ''xyz.example.com''. In both cases, the hostname would be present in the Subject's Common Name (CN).&lt;br /&gt;
&lt;br /&gt;
Alternatively, the Subject Alternate Names (SANs) can be used to provide a specific listing of multiple names where the certificate is valid. In the example above, the certificate could list the Subject's CN as ''example.com'', and list two SANs: ''abc.example.com'' and ''xyz.example.com''. These certificates are sometimes referred to as &amp;quot;multiple domain certificates&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Rule - Use Fully Qualified Names in Certificates ===&lt;br /&gt;
&lt;br /&gt;
Use fully qualified names in the DNS name field, and do not use unqualifed names (e.g., 'www'), local names (e.g., 'localhost'), or private IP addresses (e.g., 192.168.1.1) in the DNS name field. Unqualifed names, local names, or private IP addresses violate the certificate specification.&lt;br /&gt;
 &lt;br /&gt;
=== Rule - Do Not Use Wildcard Certificates ===&lt;br /&gt;
&lt;br /&gt;
You should refrain from using wildcard certificates. Though they are expedient at circumventing annoying user prompts, they also [[Least_privilege|violate the principal of least privilege]] and asks the user to trust all machines, including developer's machines, the secretary's machine in the lobby and the sign-in kiosk. Obtaining access to the private key is left as an exercise for the attacker, but its made much easier when stored on the file system unprotected.&lt;br /&gt;
&lt;br /&gt;
Statistics gathered by Qualys for [http://media.blackhat.com/bh-us-10/presentations/Ristic/BlackHat-USA-2010-Ristic-Qualys-SSL-Survey-HTTP-Rating-Guide-slides.pdf Internet SSL Survey 2010] indicate wildcard certificates have a 4.4% share, so the practice is not standard for public facing hosts. Finally, wildcard certificates violate [https://www.cabforum.org/EV_Certificate_Guidelines.pdf EV Certificate Guidelines].&lt;br /&gt;
&lt;br /&gt;
=== Rule - Do Not Use RFC 1918 Addresses in Certificates ===&lt;br /&gt;
&lt;br /&gt;
Certificates should not use private addresses. RFC 1918 is [http://tools.ietf.org/rfc/rfc1918.txt Address Allocation for Private Internets]. Private addresses are Internet Assigned Numbers Authority (IANA) reserved and include 192.168/16, 172.16/12, and 10/8.&lt;br /&gt;
&lt;br /&gt;
Certificates issued with private addresses violate [https://www.cabforum.org/EV_Certificate_Guidelines.pdf EV Certificate Guidelines]. In addition, Peter Gutmann writes in in [http://www.cs.auckland.ac.nz/~pgut001/pubs/book.pdf Engineering Security]: &amp;quot;This one is particularly troublesome because, in combination with the router-compromise attacks... and ...OSCP-defeating measures, it allows an attacker to spoof any EV-certificate site.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Rule - Always Provide All Needed Certificates ===&lt;br /&gt;
&lt;br /&gt;
Clients attempt to solve the problem of identifying a server or host using PKI and X509 certificate. When a user receives a server or host's certificate, the certificate must be validated back to a trusted root certification authority. This is known as path validation.&lt;br /&gt;
&lt;br /&gt;
There can be one or more intermediate certificates in between the end-entity (server or host) certificate and root certificate. In addition to validating both endpoints, the user will also have to validate all intermediate certificates. Validating all intermediate certificates can be tricky because the user may not have them locally. This is a well-known PKI issue called the “Which Directory?&amp;quot; problem.&lt;br /&gt;
&lt;br /&gt;
To avoid the “Which Directory?&amp;quot; problem, a server should provide the user with all required certificates used in a path validation.&lt;br /&gt;
&lt;br /&gt;
== Client (Browser) Configuration  ==&lt;br /&gt;
&lt;br /&gt;
The validation procedures to ensure that a certificate is valid are complex and difficult to correctly perform.  In a typical web application model, these checks will be performed by the client's web browser in accordance with local browser settings and are out of the control of the application. However, these items do need to be addressed in the following scenarios:&lt;br /&gt;
&lt;br /&gt;
* The application server establishes connections to other applications over TLS for purposes such as web services or any exchange of data&lt;br /&gt;
* A thick client application is connecting to a server via TLS&lt;br /&gt;
&lt;br /&gt;
In these situations extensive certificate validation checks must occur in order to establish the validity of the certificate. Consult the following resources to assist in the design and testing of this functionality. The NIST PKI testing site includes a full test suite of certificates and expected outcomes of the test cases.&lt;br /&gt;
* [http://csrc.nist.gov/groups/ST/crypto_apps_infra/pki/pkitesting.html NIST PKI Testing]&lt;br /&gt;
* [http://www.ietf.org/rfc/rfc5280.txt IETF RFC 5280]&lt;br /&gt;
&lt;br /&gt;
As specified in the above guidance, if the certificate can not be validated for any reason then the connection between the client and server must be dropped. Any data exchanged over a connection where the certificate has not properly been validated could be exposed to unauthorized access or modification.&lt;br /&gt;
&lt;br /&gt;
== Additional Controls  ==&lt;br /&gt;
&lt;br /&gt;
=== Extended Validation Certificates  ===&lt;br /&gt;
&lt;br /&gt;
Extended validation certificates (EV Certificates) proffer an enhanced investigation by the issuer into the requesting party due to the industry's race to the bottom. The purpose of EV certificates is to provide the user with greater assurance that the owner of the certificate is a verified legal entity for the site. Browsers with support for EV certificates distinguish an EV certificate in a variety of ways. Internet Explorer will color a portion of the URL in green, while Mozilla will add a green portion to the left of the URL indicating the company name. &lt;br /&gt;
&lt;br /&gt;
High value websites should consider the use of EV certificates to enhance customer confidence in the certificate. It should also be noted that EV certificates do not provide any greater technical security for the TLS. The purpose of the EV certificate is to increase user confidence that the target site is indeed who it claims to be.&lt;br /&gt;
&lt;br /&gt;
=== Client-Side Certificates  ===&lt;br /&gt;
&lt;br /&gt;
Client side certificates can be used with TLS to prove the identity of the client to the server. Referred to as &amp;quot;two-way TLS&amp;quot;, this configuration requires the client to provide their certificate to the server, in addition to the server providing their's to the client. If client certificates are used, ensure that the same validation of the client certificate is performed by the server, as indicated for the validation of server certificates above. In addition, the server should be configured to drop the TLS connection if the client certificate cannot be verified or is not provided. &lt;br /&gt;
&lt;br /&gt;
The use of client side certificates is relatively rare currently due to the complexities of certificate generation, safe distribution, client side configuration, certificate revocation and reissuance, and the fact that clients can only authenticate on machines where their client side certificate is installed. Such certificates are typically used for very high value connections that have small user populations.&lt;br /&gt;
&lt;br /&gt;
=== Certificate and Public Key Pinning ===&lt;br /&gt;
&lt;br /&gt;
Hybrid and native applications can take advantage of [[Certificate_and_Public_Key_Pinning|certificate and public key pinning]]. Pinning associates a host (for example, server) with an identity (for example, certificate or public key), and allows an application to leverage knowledge of the pre-existing relationship. At runtime, the application would inspect the certificate or public key received after connecting to the server. If the certificate or public key is expected, then the application would proceed as normal. If unexpected, the application would stop using the channel and close the connection since an adversary could control the channel or server.&lt;br /&gt;
&lt;br /&gt;
Pinning still requires customary X509 checks, such as revocation, since CRLs and OCSP provides real time status information. Otherwise, an application could possibly (1) accept a known bad certificate; or (2) require an out-of-band update, which could result in a lengthy App Store approval.&lt;br /&gt;
&lt;br /&gt;
Browser based applications are at a disadvantage since most browsers do not allow the user to leverage pre-existing relationships and ''a priori'' knowledge. In addition, Javascript and Websockets do not expose methods to for a web app to query the underlying secure connection information (such as the certificate or public key). It is noteworthy that Chromium based browsers perform pinning on selected sites, but the list is currently maintained by the vendor.&lt;br /&gt;
&lt;br /&gt;
For more information, please see the [[Pinning Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
= Providing Transport Layer Protection for Back End and Other Connections  =&lt;br /&gt;
&lt;br /&gt;
Although not the focus of this cheat sheet, it should be stressed that transport layer protection is necessary for back-end connections and any other connection where sensitive data is exchanged or where user identity is established. Failure to implement an effective and robust transport layer security will expose sensitive data and undermine the effectiveness of any authentication or access control mechanism. &lt;br /&gt;
&lt;br /&gt;
== Secure Internal Network Fallacy  ==&lt;br /&gt;
&lt;br /&gt;
The internal network of a corporation is not immune to attacks. Many recent high profile intrusions, where thousands of sensitive customer records were compromised, have been perpetrated by attackers that have gained internal network access and then used sniffers to capture unencrypted data as it traversed the internal network.&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
* OWASP – [[Testing for SSL-TLS (OWASP-CM-001)|Testing for SSL-TLS]], and OWASP [[Guide to Cryptography]] &lt;br /&gt;
* OWASP – [http://www.owasp.org/index.php/ASVS Application Security Verification Standard (ASVS) – Communication Security Verification Requirements (V10)]&lt;br /&gt;
* OWASP – ASVS Article on [[Why you need to use a FIPS 140-2 validated cryptomodule]]&lt;br /&gt;
* SSL Labs http://www.ssllabs.com/projects/rating-guide/index.html SSL Server Rating Guide]&lt;br /&gt;
* yaSSL – [http://www.yassl.com/yaSSL/Blog/Entries/2010/10/7_Differences_between_SSL_and_TLS_Protocol_Versions.html Differences between SSL and TLS Protocol Versions]&lt;br /&gt;
* NIST – [http://csrc.nist.gov/publications/nistpubs/800-52/SP800-52.pdf SP 800-52 Guidelines for the selection and use of transport layer security (TLS) Implementations]&lt;br /&gt;
* NIST – [http://csrc.nist.gov/publications/fips/fips140-2/fips1402.pdf FIPS 140-2 Security Requirements for Cryptographic Modules]&lt;br /&gt;
* NIST – [http://csrc.nist.gov/groups/STM/cmvp/documents/fips140-2/FIPS1402IG.pdf Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Validation Program]&lt;br /&gt;
* NIST – [http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf SP 800-57 Recommendation for Key Management, Revision 2]&lt;br /&gt;
* NIST – [http://csrc.nist.gov/publications/drafts.html#sp800-95 SP 800-95 Guide to Secure Web Services] &lt;br /&gt;
* IETF – [http://www.ietf.org/rfc/rfc5280.txt RFC 5280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile]&lt;br /&gt;
* IETF – [http://www.ietf.org/rfc/rfc2246.txt RFC 2246 The Transport Layer Security (TLS) Protocol Version 1.0 (JAN 1999)]&lt;br /&gt;
* IETF – [http://www.ietf.org/rfc/rfc4346.txt RFC 4346 The Transport Layer Security (TLS) Protocol Version 1.1 (APR 2006)]&lt;br /&gt;
* IETF – [http://www.ietf.org/rfc/rfc5246.txt RFC 5246 The Transport Layer Security (TLS) Protocol Version 1.2 (AUG 2008)]&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
&lt;br /&gt;
Michael Coates - michael.coates[at]owasp.org &amp;lt;br/&amp;gt;&lt;br /&gt;
Dave Wichers - dave.wichers[at]aspectsecurity.com &amp;lt;br/&amp;gt;&lt;br /&gt;
Michael Boberski - boberski_michael[at]bah.com&amp;lt;br/&amp;gt;&lt;br /&gt;
Tyler Reguly -treguly[at]sslfail.com&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>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156410</id>
		<title>OWASP Application Security FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156410"/>
				<updated>2013-08-05T00:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Removing because highly ambiguous.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Login Issues  =&lt;br /&gt;
&lt;br /&gt;
==What are the best practices I should remember while designing the login pages?  ==&lt;br /&gt;
&lt;br /&gt;
* From the login page, the user should be sent to a page for authentication. Once authenticated, the user should be sent to the next page. This is explained in the answer to the next question. &lt;br /&gt;
* The password should never be sent in clear text (unencrypted) because it can be stolen by sniffing; saving the password in clear text in the database is dangerous too. The best method of sending passwords is the Salted MD5 hashing technique and the passwords should be hashed and then stored in the database.&lt;br /&gt;
* The best way to manage sessions would be to use one session token with two values during authentication. One value before authentication and one after.&lt;br /&gt;
&lt;br /&gt;
==Is it really required to redirect the user to a new page after login?  ==&lt;br /&gt;
&lt;br /&gt;
Is it really required to redirect the user to a new page after login? &lt;br /&gt;
&lt;br /&gt;
Yes. Consider the application has a login page that sends the username and password as a POST request to the server. If a user clicks refresh on the second page (the page after login), the same request including the username and password in the POST will be sent again. Now suppose a valid user browses through our application and logs out, but does not close the window. The attackers come along and click the back button of the browser till they reach the second page. They only have to do a refresh and since the username and password are resubmitted and revalidated, the attackers can login as the user. Now let's assume the application has a login page which takes the user to an intermediate page for authentication. Once authenticated, the user is redirected to the second page with a session token. In this case, even if the attackers reach the second page and do a refresh, the username and password will not be resubmitted. This is so because the request that will be submitted is the one for the second page which does not contain the username and password. Therefore, it is always better to redirect the user. &lt;br /&gt;
&lt;br /&gt;
==How does the salted MD5 technique work?  ==&lt;br /&gt;
&lt;br /&gt;
Here is how the salted MD5 technique works: the database stores a MD5 hash of the password. (MD5 hash is a cryptographic technique in which the actual value can never be recovered.) When a client requests for the login page, the server generates a random number, the salt, and sends it to the client along with the page. A JavaScript code on the client computes the MD5 hash of the password entered by the user. It then concatenates the salt to the hash and re-computes the MD5 hash. This result is then sent to the server. The server picks the hash of the password from its database, concatenates the salt and computes the MD5 hash. If the user entered the correct password these two hashes should match. The server compares the two and if they match, the user is authenticated. &lt;br /&gt;
&lt;br /&gt;
==How can my &amp;quot;Forgot Password&amp;quot; feature be exploited?  ==&lt;br /&gt;
&lt;br /&gt;
The Forgot Password feature is implemented in a number of different ways. One common way is to ask the user a hint question for which the user has submitted the answer during registration. These are questions like What is your favorite color? or What is your favorite pastime? If the answer is correct, either the original password is displayed or a temporary password is displayed which can be used to log in. In this method, an attacker trying to steal the password of a user may be able to guess the correct answer of the hint question and even reset the password. &lt;br /&gt;
&lt;br /&gt;
==In &amp;quot;Forgot Password&amp;quot;, is it safe to display the old password?  ==&lt;br /&gt;
&lt;br /&gt;
If the old password is displayed on the screen, it can be seen by shoulder surfers. So it is a good idea not to display the password and let the user change to a new one. Moreover, displaying the password means it has to be stored in a recoverable form in the database which is not a good practice. If the password is stored as a one way hash in the database, the only way Forgot Password can be implemented is by letting the user reset the old password. So, it is always better to force the users reset their passwords when they forget their passwords. (A one way hash is the result obtained when we pass a string to a one way hash function. The result is such that it is impossible to get back the original value from it. Passwords are best stored as non-recoverable hashes in the database.) &lt;br /&gt;
&lt;br /&gt;
==Is there any risk in emailing the new password to the user's authorized mail id?  ==&lt;br /&gt;
&lt;br /&gt;
Emailing the actual password in clear text can be risky as an attacker can obtain it by sniffing. Also the mail containing the password might have a long life time and could be viewed by an attacker while it is lying in the mailbox of the user.&lt;br /&gt;
&lt;br /&gt;
Apart form the above threats, a malicious user can do shoulder-surfing to view the password or login credentials.&lt;br /&gt;
&lt;br /&gt;
==What is the most secure way to design the Forgot Password feature?  ==&lt;br /&gt;
&lt;br /&gt;
We should first ask the user to supply some details like personal details or ask a hint question. Then we should send a mail to the users authorized mail id with a link which will take the user to a page for resetting the password. This link should be active for only a short time, and should be SSL- enabled. This way the actual password is never seen. The security benefits of this method are: the password is not sent in the mail; since the link is active for a short time, there is no harm even if the mail remains in the mailbox for a long time. &lt;br /&gt;
&lt;br /&gt;
==How do I protect against automated password guessing attacks?  ==&lt;br /&gt;
&lt;br /&gt;
Password guessing with automated tools is a serious problem since there are a number of tools available for this purpose. These tools essentially keep trying out different passwords till one matches. Locking out the account after 5 failed attempts is a good defense against these tools. However, the important point then is how long you lock out the account for. If it is for too long, service to valid users might be denied as the attackers repeatedly lock out your users. If the time is too short say about 1-2 minutes, the tool could start again after the timeout. So the best method would be to insist on human intervention after a few failed attempts. A method used by a number of sites these days is to have the user read and enter a random word that appears in an image on the page. Since this cannot be done by a tool, we can thwart automated password guessing. The following are some tools that guess passwords of web applications: Brutus - http://www.hoobie.net/brutus/ WebCracker http://www.securityfocus.com/tools/706&lt;br /&gt;
&lt;br /&gt;
==How can I protect against keystroke loggers on the client machine?  ==&lt;br /&gt;
&lt;br /&gt;
Keystroke loggers on the end users machines can sometimes ruin all our efforts of securely transmitting and storing the passwords. The users themselves may not be aware that a key logger has been installed on their machines and records each key pressed. Since the highest risk is with the password, if we can authenticate the users without having them use the keyboard, or reveal the entire password, we solve the problem. The different ways of doing this are: &lt;br /&gt;
&lt;br /&gt;
* Having a graphical keyboard where the users can enter the characters they want by clicking the mouse on it. This is especially useful for numeric PINs. &lt;br /&gt;
* Asking the users to type a part of their password each time and not the whole password. For example you could say &amp;quot;Please enter the 1st, 3rd and 6th letters of your password&amp;quot; and this rule could be a random one each time. &lt;br /&gt;
==My site will be used from publicly shared computers. What precautions must I take?  ==&lt;br /&gt;
&lt;br /&gt;
If your application will be accessed from publicly shared computers like libraries, you could take the following precautions: &lt;br /&gt;
&lt;br /&gt;
* You can make sure your pages do not get cached on the system by setting the correct cache control directives. &lt;br /&gt;
* You could take care that no sensitive information is included in the URLs since the history of the client browser will store these. &lt;br /&gt;
* Have a graphical keyboard for entering the password or ask the user to enter a different part of the password each time. This protects the password against keystroke loggers. &lt;br /&gt;
* To prevent sniffing of passwords and replay attacks using those, you should either use SSL or salted MD5 for passwords. The clear text password in the memory should be reset after computing the MD5. &lt;br /&gt;
=SQL Injection  =&lt;br /&gt;
&lt;br /&gt;
==What is SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
SQL Injection is a technique by which attackers can execute SQL statements of their choice on the backend database by manipulating the input to the application. Let's understand SQL Injection through the example of a login page in a web application where the database is SQL Server. The user needs to input Username and Password in the text boxes in Login.asp page. Suppose the user enters the following: Username : Obelix and Password : Dogmatix This input is then used to build a query dynamically which would be something like: SELECT * FROM Users WHERE username= 'Obelix' and password='Dogmatix' This query would return to the application a row from the database with the given values. The user is considered authenticated if the database returns one or more rows to the application. Now, suppose an attacker enters the following input in the login page: Username : ' or 1=1-- The query built will look like this: SELECT * FROM Users WHERE username='' or 1=1-- and password='' -- in SQL Server is used to comment out the rest of the line. So, our query is now effectively: SELECT * FROM Users WHERE username='' or 1=1 This query will look in the database for a row where either username is blank or the condition 1=1 is met. Since the latter always evaluates to true, the query will return all rows of the Users table and the user is authenticated. The attacker has been successful in logging into the application without a username and password. You can read more on this at the Securiteam site: http://www.securiteam.com/securityreviews/5DP0N1P76E.html &lt;br /&gt;
&lt;br /&gt;
==Is it just ASP and SQL Server or are all platforms vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Almost all platforms are vulnerable to SQL Injection. Inadequate checking of user input and the use of dynamic SQL queries are what make an application vulnerable to these attacks. The syntax of the input entered for SQL Injection will depend on the database being used. During our application security audits we have found many applications using other databases to be vulnerable. The above example would work on SQL Server, Oracle and MySQL. This shows that the problem is with the inadequate checking of user input and the use of dynamic SQL and not the underlying database. &lt;br /&gt;
&lt;br /&gt;
==Apart from username and password which variables are candidates for SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
Any input field that makes up the where clause of a database query is a candidate for SQL Injection, eg. account numbers, and credit card numbers in the case of an online banking application. In addition to form fields, an attacker can use hidden fields and query strings also for injecting commands.&lt;br /&gt;
&lt;br /&gt;
Apart from input fields, URL parameters are also vulnerable to SQL Injection as well as other input based attacks.&lt;br /&gt;
&lt;br /&gt;
==How do we prevent SQL Injection in our applications?  ==&lt;br /&gt;
&lt;br /&gt;
It is quite simple to prevent SQL injection while developing the application. You need to check all input coming from the client before building a SQL query. The best method is to remove all unwanted input and accept only expected input. While server side input validation is the most effective method of preventing SQL Injection, the other method of prevention is not using dynamic SQL queries. This can be achieved by using stored procedures or bind variables in databases that support these features. For applications written in Java, CallableStatements and PreparedStatements can be used. For ASP applications, ADO Command Objects can be used. You can check the following article for more on SQL Injection in Oracle: http://www.integrigy.com/info/IntegrigyIntrotoSQLInjectionAttacks.pdf &lt;br /&gt;
&lt;br /&gt;
==I'm using stored procedures for authentication, am I vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Maybe, but probably no. Using stored procedures can prevent SQL Injection because the user input is no longer used to build the query dynamically. Since a stored procedure is a group of precompiled SQL statements and the procedure accepts input as parameters, a dynamic query is avoided. Although input is put into the precompiled query as is, since the query itself is in a different format, it does not have the effect of changing the query as expected. By using stored procedures we are letting the database handle the execution of the query instead of asking it to execute a query we have built. The exception to this is where the stored procedure takes a string as input and uses this string to build the query without validating it. While this is more difficult to exploit, this scenario still often leads to successful SQL Injection. This article explains how SQL Injection affects stored procedures in more detail: http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/&lt;br /&gt;
&lt;br /&gt;
==I'm using client side JavaScript code for checking user input. Isn't that enough?  ==&lt;br /&gt;
&lt;br /&gt;
No. Although client side checking disallows the attacker to enter malicious data directly into the input fields, that alone is not enough to prevent SQL Injection. Client side scripts only check for input in the browser. But this does not guarantee that the information will remain the same till it reaches the server. To bypass client side JavaScript, the attacker can trap the request in a proxy (eg. WebScarab, [http://www.parosproxy.org Paros]) after it leaves the browser and before it reaches the server and there he can alter input fields. The attacker can also inject commands into the querystring variables which are not checked by the client side scripts, or could disable JavaScript rendering client-side scripting useless.&lt;br /&gt;
&lt;br /&gt;
==Are Java servlets vulnerable to SQL injection?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, they are if the user input is not checked properly, and if they build SQL queries dynamically. But Java servlets also have certain features that prevent SQL Injection like CallableStatements and PreparedStatements. Like stored procedures and bind variables, they avoid the need of dynamic SQL statements.&lt;br /&gt;
&lt;br /&gt;
==Can an automated scanner discover SQL Injection? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes yes, sometimes no. Whether a scanner can discover SQL injection or not depends on a variety of factors: the discovery technique used, the response from the application when a malformed SQL snippet is added, and some luck. Specifically, scanners that use Blind SQL Injection are most likely to detect SQL Injection. Scanners that claim hundreds of test cases for SQL Injection are misleading. This entry from the [http://www.plynt.com/resources/learn/tools/do_scanners_catch_sql_injectio_1/  Penetration Testing Learning Center] explains this in detail.&lt;br /&gt;
&lt;br /&gt;
=Variable Manipulation  =&lt;br /&gt;
&lt;br /&gt;
==Why can't I trust the information coming from the browser?  ==&lt;br /&gt;
&lt;br /&gt;
There are chances that the information is modified before it reaches the server. Attackers browsing the site can manipulate the information in a GET or POST request. There are a number of HTTP/HTTPS proxy tools like [http://www.mavensecurity.com/achilles Achilles], Paros, WebScarab, etc which are capable of intercepting all this information and allow the attacker running the tool to modify it. Also, the information that the user sees or provides on a web page has to travel through the internet before it reaches the server. Although the client and the server may be trusted, we cannot be sure that the information is not modified after it leaves the browser. Attackers can capture the information on the way and manipulate it.&lt;br /&gt;
&lt;br /&gt;
==What information can be manipulated by the attacker?  ==&lt;br /&gt;
&lt;br /&gt;
Manipulating the variables in the URL is simple. But attackers can also manipulate almost all information going from the client to the server like form fields, hidden fields, content-length, session-id and http methods.&lt;br /&gt;
&lt;br /&gt;
==How do attackers manipulate the information? What tools do they use?  ==&lt;br /&gt;
&lt;br /&gt;
For manipulating any information, including form fields, hidden variables and cookies, attackers use tools known as HTTP/HTTPS proxy tools. Once the browser's proxy settings are configured to go through the HTTP/HTTPS proxy, the tool can see all information flowing between the client and the server; it even allows the attacker to modify any part of the request before sending it. Some such tools are: WebScarab can be downloaded from the OWASP site. Odysseus can be found at http://www.bindshell.net/tools/odysseus Paros can be downloaded from http://www.parosproxy.org&lt;br /&gt;
&lt;br /&gt;
==I'm using SSL. Can attackers still modify information?  ==&lt;br /&gt;
&lt;br /&gt;
Although SSL provides a lot of security, SSL alone is not enough to prevent variable manipulation attacks. SSL was supposed to prevent against Man in the Middle attacks but it is vulnerable to it. To successfully carry out the MITM attack, first the attacker has to divert the victim's requests to his machine i.e. redirecting the packets meant for the server to himself. He can do this by ARP poisoning / DNS Cache poisoning. Once he is able to redirect, he can see all the requests the victim is trying to make. Now when the victim tries to establish an SSL connection with a legitimate server, he gets connected to the attacker. The attacker, during the SSL Handshaking, provides a fake certificate to the victim, which the victim accepts even though the browser warns him. Thus, the victim establishes an SSL connection with the attacker instead of the server. The attacker establishes a different SSL connection with that legitimate server, which the victim was trying to connect. Now all data flow between the victim and the server will be routed through the attacker and the attacker can see all data the victim (as well as the server) sends. This is because the victim will encrypt all data with the attacker's public key, which the attacker can decrypt with his private key. The attacker can then manipulate all data that is passing through his machine.&lt;br /&gt;
&lt;br /&gt;
==Is there some way to prevent these proxy tools from editing the data?  ==&lt;br /&gt;
&lt;br /&gt;
The main threat these proxy tools pose is editing the information sent from the client to the server. One way to prevent it is to sign the message sent from the client with a Java Applet downloaded onto the client machine. Since the applet we developed will be the one validating the certificate and not the browser, a proxy tool will not be able to get in between the client and the server with a fake certificate. The applet will reject the fake certificate. The public key of this certificate can then be used to digitally sign each message sent between the client and the server. An attacker would then have to replace the embedded certificate in the applet with a fake certificate to succeed - that raises the barrier for the attacker. &lt;br /&gt;
&lt;br /&gt;
=Browser Cache  =&lt;br /&gt;
&lt;br /&gt;
==How can the browser cache be used in attacks?  ==&lt;br /&gt;
&lt;br /&gt;
The browser has a capability to temporarily store some of the pages browsed. These cached files are stored in a folder, like the Temporary Internet Files folder in the case of Internet Explorer. When we ask for these pages again, the browser displays them from its cache. This is much faster than downloading the page from the server. Let's consider the particular scenario where a user has logged in to an application with username and password. The user browses the different pages which contain sensitive information. Let's suppose a page with the user's credit card information gets cached in the browser and the user logs out of the application. Now suppose the attackers access the same machine and searches through the Temporary Internet Files, they will get the credit card details. The attackers do not need to know the username and password of the user to steal the information. &lt;br /&gt;
&lt;br /&gt;
==How do I ensure that sensitive pages are not cached on the user's browser?  ==&lt;br /&gt;
&lt;br /&gt;
The response header sent from the server has some cache control directives that can be set from your code. These directives control the caching of content on any cache. The directives to be set are Cache-Control : no-cache, no-store and Expires: 0. But since legacy HTTP 1.0 servers do not support the Cache-Control headers, universally, Pragma: no-cache header should be used, too.&lt;br /&gt;
&lt;br /&gt;
==What's the difference between the cache-control directives: no-cache, and no-store?  ==&lt;br /&gt;
&lt;br /&gt;
The no-cache directive in a response indicates that the response must not be used to serve a subsequent request i.e. the cache must not display a response that has this directive set in the header but must let the server serve the request. The no-cache directive can include some field names; in which case the response can be shown from the cache except for the field names specified which should be served from the server. The no-store directive applies to the entire message and indicates that the cache must not store any part of the response or any request that asked for it. &lt;br /&gt;
&lt;br /&gt;
==Am I totally safe with these directives?  ==&lt;br /&gt;
&lt;br /&gt;
No. But generally, use both Cache-Control: no-cache, no-store and Pragma: no-cache, in addition to Expires: 0 (or a sufficiently backdated GMT date such as the UNIX epoch).  Non-html content types like pdf, word documents, excel spreadsheets, etc often get cached even when the above cache control directives are set (although this varies by version and additional use of must-revalidate, pre-check=0, post-check=0, max-age=0, and s-maxage=0 in practice can sometimes result at least in file deletion upon browser closure in some cases due to browser quirks and HTTP implementations). Also, 'Autocomplete' feature allows a browser to cache whatever the user types in an input field of a form. To check this, the form tag or the individual input tags should include 'Autocomplete=&amp;quot;Off&amp;quot; ' attribute. However, it should be noted that this attribute is non-standard (although it is supported by the major browsers) so it will break XHTML validation.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about caching?  ==&lt;br /&gt;
&lt;br /&gt;
Some useful links that talk about caching are - Caching Tutorial for Web Authors and Webmasters by Mark Nottingham at http://www.mnot.net/cache_docs/ and HTTP RFC (sec14.9.1) at http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;br /&gt;
&lt;br /&gt;
=Cross Site Scripting  =&lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Scripting?  ==&lt;br /&gt;
&lt;br /&gt;
Cross Site scripting (XSS) is a type of attack that can be carried out to steal sensitive information belonging to the users of a web site. This relies on the server reflecting back user input without checking for embedded javascript. This can be used to steal cookies and session IDs. Let's see how it works. We would all have come across the following situation sometime - we type a URL in the browser, say www.abcd.com/mypage.asp, and receive an error page that says &amp;quot;Sorry www.abcd.com/mypage.asp does not exist&amp;quot; or a page with a similar message. In other words, pages that display the user input back on the browser. Pages like this could be exploited using XSS. Instead of a normal input, think what will happen if the input contains a script in it. While reflecting back the input, instead of rendering it as normal HTML output, the browser treats it as a script and executes it. This script could contain some malicious code. The attackers can send a link that contains a script as part of the URL to a user. When the user clicks it, the script gets executed on the user's browser. This script may have been written to collect important information about the user and send it to the attacker. Kevin Spett's paper Cross Site Scripting, Are your web applications vulnerable? is a good source of information on this topic and is available at http://www.spidynamics.com/whitepapers/SPIcross-sitescripting.pdf The Cross Site Scripting FAQ at CGI Security is another good place to learn more on XSS. &lt;br /&gt;
&lt;br /&gt;
==What information can an attacker steal using XSS?  ==&lt;br /&gt;
&lt;br /&gt;
The attackers can steal the session ID of a valid user using XSS. The session ID is very valuable because it is the secret token that the user presents after login as proof of identity until logout. If the session ID is stored in a cookie, the attackers can write a script which will run on the user's browser, query the value in the cookie and send it to the attackers. The attackers can then use the valid session ID to browse the site without logging in. The script could also collect other information from the page, including the entire contents of the page. &lt;br /&gt;
&lt;br /&gt;
==Apart from mailing links of error pages, are there other methods of exploiting XSS?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are other methods. Let's take the example of a bulletin board application that has a page where data entered by one user can be viewed by other users. The attackers enter a script into this page. When a valid user tries to view the page, the script gets executed on the user's browser. It will send the user's information to the attackers. &lt;br /&gt;
&lt;br /&gt;
==How can I prevent XSS?  ==&lt;br /&gt;
&lt;br /&gt;
XSS can be prevented while coding the application. You should be validating all input and output to and from the application and escape all special characters that may be used in a script. If the code replaces the special characters by the following before displaying the output, XSS can be prevented to some extent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;   &amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;   &amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
(   &amp;amp;*40; &lt;br /&gt;
&lt;br /&gt;
)   &amp;amp;*41; &lt;br /&gt;
&lt;br /&gt;
*   &amp;amp;*35; &lt;br /&gt;
&amp;amp;   &amp;amp;*38;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gunter Ollmann has written an excellent paper on the use of special characters in XSS attacks. For instance, the above technique of escaping special characters cannot protect against a script injected like &amp;quot;javascript:self.location.href = 'www.evil.org' &amp;quot; as this script does not use any of the special characters.&lt;br /&gt;
&lt;br /&gt;
==Can XSS be prevented without modifying the source code?  ==&lt;br /&gt;
&lt;br /&gt;
There is a method that requires minimal coding as compared to performing input, output validation to prevent the stealing of cookies by XSS. Internet Explorer 6 has an attribute called HTTP Only that can be set for cookies. Using this attribute makes sure that the cookie can not be accessed by any scripts. More details are available at the MSDN site on httpcookies at http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_cookies.asp Mozilla also has plans to implement a similar feature. Researchers have found a method to beat this. It is known as Cross Site Tracing. &lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Tracing (XST)? How can it be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
Attackers are able to bypass the HTTP Only attribute to steal cookie information by Cross Site tracing (XST). TRACE is a HTTP method that can be sent to the server. The server sends back anything included in the TRACE request back to the browser. In a site that uses cookies, the cookie information is sent to the server in each request. If we send a TRACE request in a URL of such a site, the server will send back all cookie information to the browser. Now imagine a situation similar to the one described in XSS but the site in this case is using the HTTP Only cookies. The attackers make a valid user click on a link that contains a script that calls the TRACE method. When the user clicks on the link the TRACE request as well as all the cookie information is sent to the server. The server then sends back the cookie information back to the script in the browser. Suppose that the malicious script also contains code to send this information to the attackers. The attackers have succeeded again in stealing the cookies although HTTP Only Cookies were used. To summarize, HTTP Only cookies prevent the JavaScript from directly accessing the cookies but the attacker was able to retrieve it through an indirect method. XST can be prevented by disabling the TRACE method on the web server. This paper by Jeremiah Grossman discusses XST in greater detail http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf &lt;br /&gt;
&lt;br /&gt;
=Web Server Fingerprinting  =&lt;br /&gt;
&lt;br /&gt;
==How do attackers identify which web server I'm using?  ==&lt;br /&gt;
&lt;br /&gt;
Identifying the application running on a remote web server is known as fingerprinting the server. The simplest way to do this is to send a request to the server and see the banner sent in the response. Banners will generally have the server name and the version number in it. We can address this problem by either configuring the server not to display the banner at all or by changing it to make the server look like something else.&lt;br /&gt;
&lt;br /&gt;
==How can I fake the banners or rewrite the headers from my web server?  ==&lt;br /&gt;
&lt;br /&gt;
There are a number of tools that help in faking the banners. URLScan is a tool that can change the banner of an IIS web server. http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/tools/URLScan.asp mod_security has a feature for changing the identity of the Apache web server. It can be found at http://www.modsecurity.org/ Servermask for faking banners of IIS, can be found at http://www.servermask.com/ &lt;br /&gt;
&lt;br /&gt;
==Once I fake the banners, can my web server still be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Yes. Unfortunately there are tools that fingerprint the web server without relying on the banners. Different web servers may implement features not specified in HTTP RFCs differently. Suppose we make a database of these special requests and the responses of each web server. We can now send these requests to the web server we want to fingerprint and compare the responses with the database. This is the technique used by tools like Fire &amp;amp; Water. This tool can be found at http://www.ntobjectives.com/products/firewater/ There is a paper by Saumil Shah that discusses the tool httprint at http://net-square.com/httprint/httprint_paper.html httprint can be found at http://net-square.com/httprint/ &lt;br /&gt;
&lt;br /&gt;
==A friend told me it's safer to run my web server on a non-standard port. Is that right?  ==&lt;br /&gt;
&lt;br /&gt;
A web server generally needs to be accessed by a lot of people on the internet. Since it normally runs on port 80 and all browsers are configured to access port 80 of the web server, users are able to browse the site. If we change the port, the users will have to specify the port in addition to the domain name. But this is a good idea for an intranet application where all users know where to connect. It is more secure since the web server will not be targeted by automated attacks like worms that scan port 80 and other standard ports. &lt;br /&gt;
&lt;br /&gt;
==Should I really be concerned that my web server can be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Well, there are two schools of thought here. According to the first school, yes you should take precaution against fingerprinting as correctly identiying the web server maybe the first step in a more dangerous attack. Once attackers have found out that the web server is say IIS 5, they will search for known vulnerabilities for IIS 5. If the web server is not patched for all known vulnerabilities or the attackers find one for which a patch has not been released yet, there is nothing to stop them from attacking it. Also automated tools and worms can be fooled by changing the version information. Some determined and focused attackers might go to additional lengths to identify the server but the hurdles that the attackers have to overcome have increased when it's more difficult to fingerprint the web server name and version. Jeremiah Grossman pointed out the other school of thought. Evasive measures are futile as any scanner targeting a web site, will normally not care what the web server is. The scanner will run ALL its tests no matter if they apply to the system or not. This is a typical shotgun approach. A bad guy targeting the site might be hampered by not knowing the exact version, but if he's determined he would still try out all related exploits and try to break in. &lt;br /&gt;
&lt;br /&gt;
=Testing  =&lt;br /&gt;
&lt;br /&gt;
==I want to chain my proxy tool with a proxy server; are there tools that let me do that?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are several tools that allow proxy chaining. Some of these are: WebScarab - http://www.owasp.org/development/webscarab Exodus - http://home.intekom.com/rdawes/exodus.html Odysseus - http://www.wastelands.gen.nz/odysseus/index.php &lt;br /&gt;
&lt;br /&gt;
==Can't web application testing be automated? Are there any tools for that?  ==&lt;br /&gt;
&lt;br /&gt;
There are tools that scan applications for security flaws. But these tools can only look for a limited number of vulnerabilities, and do not find all the problems in the application. Moreover, a lot of attacks require understanding of the business context of the application to decide on the variables to manipulate in a particular request, which a tool is incapable of doing. A presentation by Jeremiah Grossman of White Hat Security which talks about the [http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-grossman-up.pdf limitations of automated scanning]. &lt;br /&gt;
&lt;br /&gt;
This piece explains [http://www.plynt.com/resources/learn/tools/what_cant_a_scanner_find_1/ what a scanner can't find].&lt;br /&gt;
&lt;br /&gt;
In our tests using a slightly modified WebGoat the best Black-box scanning tool found less than 20% of the issues ! Some tools for automated scanning are: SpikeProxy, open source and freely available at http://www.immunitysec.com/spikeproxy.html WebInspect, can be found at http://www.spidynamics.com/productline/WE_over.html&lt;br /&gt;
&lt;br /&gt;
==Where can I try out my testing skills? Is there a sample application I can practice with?  ==&lt;br /&gt;
&lt;br /&gt;
OWASP provides a sample application that can be used for this purpose called . As the site says, the WebGoat project's goal is to teach web security in an interactive teaching environment. There are lessons on most of the common vulnerabilities. Another interesting site is Hackingzone which has a game on SQL Injection at http://www.hackingzone.org/sql/index.php &lt;br /&gt;
&lt;br /&gt;
==Are there source code scanning tools for .NET languages, Java, PHP etc that predict vulnerabilities in the source code?  ==&lt;br /&gt;
&lt;br /&gt;
Rough Auditing Tool for Security (RATS) is a tool that scans the source code for security flaws in C, C++, Python, Perl and PHP programs. It can be found at http://code.google.com/p/rough-auditing-tool-for-security/downloads/list FX Cop was created by the Microsoft Team at the GotDotNet community site to check for the .NET Frameowork guidelines which include security. Prexis is a commercial source code and run-time analyzer. Flawfinder is a static source code analyzer. Compaq ESC is a run-time analyzer for Java. Parasoft AEP is a commercial source code analyzer for Java. Fortify SCA from Fortify Software is another source code analyzer that supports mixed language analysis of C, C++, C#, ASP.NET, Java, JSP, PL/SQL, VB.NET, XML, etc. Secure Coding plugins are also available. Similar source code analyzers are Klocwork K7 for C, C++ and Java; Coverity Prevent for detecting security violations and defects in code; Ounce Solutions for C, C++, C#, ASP.NET, Java and JSP. We would like to know about more tools for scanning source code. If you know about any, please inform us and we'll add to this FAQ&lt;br /&gt;
&lt;br /&gt;
==Can non-HTTP protocols also be intercepted and played with like this?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, Interactive TCP Replay is a tool that acts as a proxy for non-HTTP applications and also allows modifying the traffic. It allows editing of the messages in a hex editor. ITR also logs all the messages passing between the client and the server. It can use different types of character encoding like ASCII or EBCDIC for editing and logging. More information on this can be found at http://www.webcohort.com/web_application_security/research/tools.html &lt;br /&gt;
&lt;br /&gt;
=Cryptography/SSL  =&lt;br /&gt;
&lt;br /&gt;
==What is SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer (SSL) gives us assurance of two things. Firstly when a client connects to a web server, the client can be sure that it is talking to the right server by checking the certificate the server sends it. Secondly, SSL assures you of the confidentiality of the data, as the client and the server exchange encrypted messages that cannot be understood by anybody else. This is how SSL works: When the client requests for a SSL page, the server sends a certificate that it has obtained from a trusted certificate authority. This certificate contains the public key of the server. After satisfying itself that the certificate is correct and the server is a genuine one, the client generates one random number, the session key. This key is encrypted by the public key of the server and sent across. The server decrypts the message with its private key. Now both sides have a session key known only to the two of them. All communication to and fro is encrypted and decrypted with the session key. An interesting link on SSL is http://www.rsasecurity.com/standards/ssl/basics.html &lt;br /&gt;
&lt;br /&gt;
==Should I use 40-bit or 128-bit SSL?  ==&lt;br /&gt;
&lt;br /&gt;
There are 2 strengths in SSL - 40-bit and 128-bit. These refer to the length of the secret key used for encrypting the session. This key is generated for every SSL session and is used to encrypt the rest of the session. The longer the key the more difficult it is to break the encrypted data. So, 128-bit encryption is much more secure than 40-bit. Most browsers today support 128-bit encryption. There are a few countries which have browsers with only 40-bit support. In case you are using 40-bit SSL, you may need to take further precautions to protect sensitive data. Salted hash for transmitting passwords is a good technique. This ensures that the password can not be stolen even if the SSL key is broken. &lt;br /&gt;
&lt;br /&gt;
==Is 40-bit SSL really unsafe?  ==&lt;br /&gt;
&lt;br /&gt;
40-bit SSL is not really unsafe. It's just that it is computationally feasible to break the key used in 40-bit but not the key used in 128-bit. Even though 40-bit can be broken, it takes a fairly large number of computers to break it. Nobody would even attempt to do that for a credit card number or the like. But there are claims of breaking the 40-bit RC4 key in a few hours. So depending on the data your application deals with, you can decide on the SSL strength. Using 128-bit is definitely safer.&lt;br /&gt;
&lt;br /&gt;
With home computers gtting faster day by day, a dedicated, expensive and very fast computer can break 40-bit encryption in few minutes (ideally testing a million keys per second). On the other hand, 128-bit encryotion will have about 339,000,000,000,000,000,000,000,000,000,000,000 (Couple of Trillions or 2^128) possible key combinations and it will take around 1000 Years to break 128-bit encryptions with the help of a cluster of very fast computers.&lt;br /&gt;
&lt;br /&gt;
==What all are encrypted when I use SSL? Is the page request also encrypted?  ==&lt;br /&gt;
&lt;br /&gt;
After the initial SSL negotiation is done and the connection is on HTTPS, everything is encrypted including the page request. So any data sent in the query string will also be encrypted. &lt;br /&gt;
&lt;br /&gt;
==Which cryptographic algorithms do SSL use?  ==&lt;br /&gt;
&lt;br /&gt;
SSL supports a number of cryptographic algorithms. During the initial &amp;quot;handshaking&amp;quot; phase, it uses the RSA public key algorithm. For encrypting the data with the session key the following algorithms are used - RC2, RC4, IDEA, DES, triple-DES and MD5 message digest algorithm. &lt;br /&gt;
&lt;br /&gt;
==I want to use SSL. Where do I begin?  ==&lt;br /&gt;
&lt;br /&gt;
There are several Certificate Authorities that you can buy a SSL certificate from. Whichever CA you choose, the basic procedure will be as follows - &lt;br /&gt;
&lt;br /&gt;
* Create key pair for the server &lt;br /&gt;
* Create the Certificate Signing Request. This will require you to provide certain details like location and fully qualified domain name of the server. &lt;br /&gt;
* Submit the CSR to the CA along with documentary proof of identity. &lt;br /&gt;
* Install the certificate sent by the CA&lt;br /&gt;
The first two steps are done from the web server. All servers have these features. While installing the certificate issued by the CA, you will have to specify which web pages are to be on SSL.&lt;br /&gt;
&lt;br /&gt;
A good starting point for working on POC in a Windows development environment could be: &amp;quot;HOW TO: Secure XML Web Services with Secure Socket Layer in Windows 2000&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;q307267&amp;amp;sd=tech&lt;br /&gt;
&lt;br /&gt;
=Cookies and Session Management  =&lt;br /&gt;
&lt;br /&gt;
==Are there any risks in using persistent vs non-persistent cookies?  ==&lt;br /&gt;
&lt;br /&gt;
Persistent cookies are data that a web site places on the user's hard drive (or equivalent) for maintaining information over more than one browser session. This data will stay in the user's system and can be accessed by the site the next time the user browses the site. Non-persistent cookies on the other hand are those that are used only in the browser session that creates it. They stay only in the memory of the machine and are not persisted on the hard disk. The security risk with persistent cookies is that they are generally stored in a text file on the client and an attacker with access to the victim's machine can steal this information. &lt;br /&gt;
&lt;br /&gt;
==Can another web site steal the cookies that my site places on a user's machine?  ==&lt;br /&gt;
&lt;br /&gt;
No, it is not possible for a website to access another site's cookies. Cookies have a domain attribute associated with them. Only a request coming from the domain specified in the attribute can access the cookie. This attribute can have only one value. &lt;br /&gt;
&lt;br /&gt;
==Which is the best way to transmit session ids- in cookies, or URL or a hidden variable?  ==&lt;br /&gt;
&lt;br /&gt;
Transmitting session IDs in the URL can lead to several risks. Shoulder surfers can see the session ID; if the URL gets cached on the client system, the session ID will also be stored; the session ID will get stored in the referrer logs of other sites. Hidden variables are not always practical as every request might not be a POST. Cookies are the safest method as cookies do not get cached, are not visible in the W3C or referrer logs, and most users anyway accept cookies. &lt;br /&gt;
&lt;br /&gt;
==What are these secure cookies?  ==&lt;br /&gt;
&lt;br /&gt;
A cookie can be marked as &amp;quot;secure&amp;quot; which ensures the cookie is used only over SSL sessions. If &amp;quot;secure&amp;quot; is not specified, the cookie will be sent unencrypted over non-SSL channels. Sensitive cookies like session tokens should be marked as secure if all pages in the web site requiring session tokens are SSL-enabled. One thing to keep in mind here is that images are generally not downloaded over SSL and they usually don't require a session token to be presented. By setting the session cookie to be secure, we ensure that the browser does not send the cookie while downloading the image over the non-SSL connection.&amp;lt;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==If I use a session ID that is a function of the client's IP address, will session hijacking be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
An attacker can hijack another user's session by stealing the session token. Methods have been suggested to prevent the session from being hijacked even if the session token is stolen. For instance, using a session token that is a function of the user's IP address. In this approach, even if the attacker stole the token, he would need the same IP address as the user to successfully hijack a session. However, session hijacking can still be possible. Suppose the attacker is on the same LAN as the user and uses the same Proxy IP as the user to access the web site. The attacker can still steal the session if he is able to sniff the session token. It may also be not possible to implement this if the IP of the client changes during a session, making the session invalid if the token is tied to the initial IP address. This may happen if the client is coming from behind a bank of proxy servers. &lt;br /&gt;
&lt;br /&gt;
==How about encrypting the session id cookies instead of using SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Encrypting just the session ID over a non-SSL connection will not serve any purpose. Since the session ID will be encrypted once and the same value will be sent back and forth each time, an attacker can use the encrypted value to hijack the session. &lt;br /&gt;
&lt;br /&gt;
==What is the concept of using a page id, in addition to the session id?  ==&lt;br /&gt;
&lt;br /&gt;
A Session ID or token has the lifetime of a session and is tied to the logged in user. A page ID or token has a lifetime of a page and is tied to a page that is served. It is a unique token given when a page is downloaded and is presented by the user when accessing the next page. The server expects a particular value for the user to access the next page. Only if the token submitted matches what the server is expecting is the next page served. An application can use this to ensure that a user accesses pages only in the sequence determined by the application. The user cannot paste a deep URL in the browser and skip pages just because he has a session token, as the page token would not be authorized to access the deeper URL directly. Good Read: [http://palisade.plynt.com/issues/2005Aug/page-tokens/ Secure your sessions with Page Tokens]&lt;br /&gt;
&lt;br /&gt;
=Logging and Audit Trails  =&lt;br /&gt;
&lt;br /&gt;
==What are these W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
W3C is a logging format used for Web server log files. W3C logs record access details of each request: the timestamp, source IP, page requested, the method used, http protocol version, browser type, the referrer page, the response code etc. Note that these are access logs, and so a separate record is maintained for each request. When a page with multiple gif files is downloaded, it would be recorded as multiple entries in the W3C log; so, W3C logs tend to be voluminous. &lt;br /&gt;
&lt;br /&gt;
==Do I need to have logging in my application even if I've W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, it's important that your application maintains &amp;quot;application level&amp;quot; logs even when W3C logging is used. As W3C logs contain records for every http request, it is difficult (and, at times impossible) to extract a higher level meaning from these logs. For instance, the W3C logs are cumbersome to identify a specific session of user and the activities that the user performed. It's better that the application keeps a trail of important activities, rather than decode it from W3C logs. &lt;br /&gt;
&lt;br /&gt;
==What should I log from within my application?  ==&lt;br /&gt;
&lt;br /&gt;
Keep an audit trail of activity that you might want to review while troubleshooting or conducting forensic analysis. Please note that it is inadvisable to keep sensitive business information itself in these logs, as administrators have access to these logs for troubleshooting. Activities commonly kept track of are: &lt;br /&gt;
&lt;br /&gt;
* Login and logout of users &lt;br /&gt;
* Critical transactions (eg. fund transfer across accounts) &lt;br /&gt;
* Failed login attempts &lt;br /&gt;
* Account lockouts &lt;br /&gt;
* Violation of policies &lt;br /&gt;
The data that is logged for each of these activities usually include: &lt;br /&gt;
&lt;br /&gt;
* User ID &lt;br /&gt;
* Time stamp &lt;br /&gt;
* Source IP &lt;br /&gt;
* Error codes, if any &lt;br /&gt;
* Priority &lt;br /&gt;
==Should I encrypt my logs? Isn't that a performance hit?  ==&lt;br /&gt;
&lt;br /&gt;
Encryption is required when information has to be protected from being read by unauthorized users. Yes, encryption does take a performance hit, so if your logs do not contain sensitive information you might want to forego encryption. However, we strongly urge that you protect your logs from being tampered by using digital signatures. Digital signatures are less processor intensive than encryption and ensure that your logs are not tampered. &lt;br /&gt;
&lt;br /&gt;
==Can I trust the IP address of a user I see in my audit logs? Could a user be spoofing/impersonating their IP address?  ==&lt;br /&gt;
&lt;br /&gt;
A bad guy who wants to hide his actual IP address might use a service like anonymizer, or use open HTTP relays. [HTTP open relays are improperly configured web servers on the web that are used as a HTTP proxy to connect to other sites.] In such cases, the IP address you see in your log files will be those of these services or the open relay that is being used. So, the IP address you see in your log files might not always be trustworthy. &lt;br /&gt;
&lt;br /&gt;
=Miscellaneous  =&lt;br /&gt;
&lt;br /&gt;
==What are Buffer Overflows? ==&lt;br /&gt;
&lt;br /&gt;
Buffer overflow vulnerability affects the web applications that require user input. The application stores the input in a buffer which is of a fixed size, as defined by the programmer. When the input that is sent to the application is more than the buffer capacity and the buffers are left unchecked, buffer overflow occurs. The severity depends on the user input. If a malicious code executes as a result of the overflow, it can even compromise the whole system.&lt;br /&gt;
To learn more, please read the OWASP article on [http://www.owasp.org/index.php/Buffer_Overflow buffer overflows.]&lt;br /&gt;
&lt;br /&gt;
==What are application firewalls? How good are they really?  ==&lt;br /&gt;
&lt;br /&gt;
Application firewalls analyze the requests at the application level. These firewalls are used for specific applications like a web server or a database server. The web application firewalls protect the web server from HTTP based attacks. They monitor the requests for attacks that involve SQL Injection, XSS, URL encoding etcetera. However, application layer firewalls cannot protect against attacks that require an understanding of the business context - this includes most attacks that rely on variable manipulation. Some application firewalls are: Netcontinuum's NC-1000 Kavado Inc.'s InterDo Teros Inc.'s Teros-100 APS&lt;br /&gt;
&lt;br /&gt;
==What is all this about &amp;quot;referrer logs&amp;quot;, and sensitive URLs?  ==&lt;br /&gt;
&lt;br /&gt;
The HTTP header contains a field known as Referrer. For visiting a web page we may either: &lt;br /&gt;
&lt;br /&gt;
* Type its URL directly into the address bar of the browser &lt;br /&gt;
* Click a link on some other page that brings us there &lt;br /&gt;
* Be redirected there by some page. &lt;br /&gt;
In the first case, the referrer field will be empty but in the other two cases it will contain the URL of the previous page. The URL of the first page will get stored in the web server access logs of the second page when the user reaches the second page from the first page. Now suppose, the two pages belong to different sites and the first URL contains sensitive information like a user's session ID. If the second site belongs to attackers, they can obtain this information by just going through the logs. Information in the URLs will get stored in the referrer logs as well as the history of the browser. Therefore, we should be careful not to have any sensitive information in the URL. &lt;br /&gt;
&lt;br /&gt;
==I want to use the most secure language; which language do you recommend?  ==&lt;br /&gt;
&lt;br /&gt;
Any language can be used since secure programming practices are what make applications safe. Most security techniques can be implemented in any language. Our advice would be to use any language you are comfortable with. But some languages like Java have additional features like bind variables that aid security; you could use those additional features if you decide to program in that language. &lt;br /&gt;
&lt;br /&gt;
==What are the good books to learn secure programming practices?  ==&lt;br /&gt;
&lt;br /&gt;
The OWASP Guide to Building Secure Web Application and Web Services is a good guide for web application developers. You can download it from http://www.owasp.org/documentation/guide Writing Secure Code by Michael Howard and David LeBlanc has a chapter on Securing Web-Based Services. More information on this book can be found at: http://www.microsoft.com/mspress/books/toc/5612.asp Secure Programming for Linux and Unix HOWTO by David Wheeler talks about writing secure applications including web applications; it also specifies guidance for a number of languages. The book can be found at: http://www.dwheeler.com/secure-programs&lt;br /&gt;
&lt;br /&gt;
Another good book on application security, which also covers some web service specific topics: 19 Deadly Sins of Software Security, by: Michael Howard, David LeBlanc and John Viega (http://books.mcgraw-hill.com/getbook.php?isbn=0072260858).&lt;br /&gt;
&lt;br /&gt;
==Are there any training programs on secure programming that I can attend?  ==&lt;br /&gt;
&lt;br /&gt;
Microsoft offers training programs on Developing Security-Enhanced Web Applications and Developing and Deploying Secure Microsoft .NET Framework Application. More information can be found at http://www.microsoft.com/traincert/syllabi/2300AFinal.asp and http://www.microsoft.com/traincert/syllabi/2350BFinal.asp Foundstone offers secure coding training through Global Knowledge Aspect Security offers a similar course. &lt;br /&gt;
&lt;br /&gt;
OWASP_FAQ_Ver3.doc&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156409</id>
		<title>OWASP Application Security FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156409"/>
				<updated>2013-08-04T23:52:10Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: quick updates of stale content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Login Issues  =&lt;br /&gt;
&lt;br /&gt;
==What are the best practices I should remember while designing the login pages?  ==&lt;br /&gt;
&lt;br /&gt;
* From the login page, the user should be sent to a page for authentication. Once authenticated, the user should be sent to the next page. This is explained in the answer to the next question. &lt;br /&gt;
* The password should never be sent in clear text (unencrypted) because it can be stolen by sniffing; saving the password in clear text in the database is dangerous too. The best method of sending passwords is the Salted MD5 hashing technique and the passwords should be hashed and then stored in the database.&lt;br /&gt;
* The best way to manage sessions would be to use one session token with two values during authentication. One value before authentication and one after.&lt;br /&gt;
&lt;br /&gt;
==Is it really required to redirect the user to a new page after login?  ==&lt;br /&gt;
&lt;br /&gt;
Is it really required to redirect the user to a new page after login? &lt;br /&gt;
&lt;br /&gt;
Yes. Consider the application has a login page that sends the username and password as a POST request to the server. If a user clicks refresh on the second page (the page after login), the same request including the username and password in the POST will be sent again. Now suppose a valid user browses through our application and logs out, but does not close the window. The attackers come along and click the back button of the browser till they reach the second page. They only have to do a refresh and since the username and password are resubmitted and revalidated, the attackers can login as the user. Now let's assume the application has a login page which takes the user to an intermediate page for authentication. Once authenticated, the user is redirected to the second page with a session token. In this case, even if the attackers reach the second page and do a refresh, the username and password will not be resubmitted. This is so because the request that will be submitted is the one for the second page which does not contain the username and password. Therefore, it is always better to redirect the user. &lt;br /&gt;
&lt;br /&gt;
==How does the salted MD5 technique work?  ==&lt;br /&gt;
&lt;br /&gt;
Here is how the salted MD5 technique works: the database stores a MD5 hash of the password. (MD5 hash is a cryptographic technique in which the actual value can never be recovered.) When a client requests for the login page, the server generates a random number, the salt, and sends it to the client along with the page. A JavaScript code on the client computes the MD5 hash of the password entered by the user. It then concatenates the salt to the hash and re-computes the MD5 hash. This result is then sent to the server. The server picks the hash of the password from its database, concatenates the salt and computes the MD5 hash. If the user entered the correct password these two hashes should match. The server compares the two and if they match, the user is authenticated. &lt;br /&gt;
&lt;br /&gt;
==How can my &amp;quot;Forgot Password&amp;quot; feature be exploited?  ==&lt;br /&gt;
&lt;br /&gt;
The Forgot Password feature is implemented in a number of different ways. One common way is to ask the user a hint question for which the user has submitted the answer during registration. These are questions like What is your favorite color? or What is your favorite pastime? If the answer is correct, either the original password is displayed or a temporary password is displayed which can be used to log in. In this method, an attacker trying to steal the password of a user may be able to guess the correct answer of the hint question and even reset the password. &lt;br /&gt;
&lt;br /&gt;
==In &amp;quot;Forgot Password&amp;quot;, is it safe to display the old password?  ==&lt;br /&gt;
&lt;br /&gt;
If the old password is displayed on the screen, it can be seen by shoulder surfers. So it is a good idea not to display the password and let the user change to a new one. Moreover, displaying the password means it has to be stored in a recoverable form in the database which is not a good practice. If the password is stored as a one way hash in the database, the only way Forgot Password can be implemented is by letting the user reset the old password. So, it is always better to force the users reset their passwords when they forget their passwords. (A one way hash is the result obtained when we pass a string to a one way hash function. The result is such that it is impossible to get back the original value from it. Passwords are best stored as non-recoverable hashes in the database.) &lt;br /&gt;
&lt;br /&gt;
==Is there any risk in emailing the new password to the user's authorized mail id?  ==&lt;br /&gt;
&lt;br /&gt;
Emailing the actual password in clear text can be risky as an attacker can obtain it by sniffing. Also the mail containing the password might have a long life time and could be viewed by an attacker while it is lying in the mailbox of the user.&lt;br /&gt;
&lt;br /&gt;
Apart form the above threats, a malicious user can do shoulder-surfing to view the password or login credentials.&lt;br /&gt;
&lt;br /&gt;
==What is the most secure way to design the Forgot Password feature?  ==&lt;br /&gt;
&lt;br /&gt;
We should first ask the user to supply some details like personal details or ask a hint question. Then we should send a mail to the users authorized mail id with a link which will take the user to a page for resetting the password. This link should be active for only a short time, and should be SSL- enabled. This way the actual password is never seen. The security benefits of this method are: the password is not sent in the mail; since the link is active for a short time, there is no harm even if the mail remains in the mailbox for a long time. &lt;br /&gt;
&lt;br /&gt;
==How do I protect against automated password guessing attacks?  ==&lt;br /&gt;
&lt;br /&gt;
Password guessing with automated tools is a serious problem since there are a number of tools available for this purpose. These tools essentially keep trying out different passwords till one matches. Locking out the account after 5 failed attempts is a good defense against these tools. However, the important point then is how long you lock out the account for. If it is for too long, service to valid users might be denied as the attackers repeatedly lock out your users. If the time is too short say about 1-2 minutes, the tool could start again after the timeout. So the best method would be to insist on human intervention after a few failed attempts. A method used by a number of sites these days is to have the user read and enter a random word that appears in an image on the page. Since this cannot be done by a tool, we can thwart automated password guessing. The following are some tools that guess passwords of web applications: Brutus - http://www.hoobie.net/brutus/ WebCracker http://www.securityfocus.com/tools/706&lt;br /&gt;
&lt;br /&gt;
==How can I protect against keystroke loggers on the client machine?  ==&lt;br /&gt;
&lt;br /&gt;
Keystroke loggers on the end users machines can sometimes ruin all our efforts of securely transmitting and storing the passwords. The users themselves may not be aware that a key logger has been installed on their machines and records each key pressed. Since the highest risk is with the password, if we can authenticate the users without having them use the keyboard, or reveal the entire password, we solve the problem. The different ways of doing this are: &lt;br /&gt;
&lt;br /&gt;
* Having a graphical keyboard where the users can enter the characters they want by clicking the mouse on it. This is especially useful for numeric PINs. &lt;br /&gt;
* Asking the users to type a part of their password each time and not the whole password. For example you could say &amp;quot;Please enter the 1st, 3rd and 6th letters of your password&amp;quot; and this rule could be a random one each time. &lt;br /&gt;
==My site will be used from publicly shared computers. What precautions must I take?  ==&lt;br /&gt;
&lt;br /&gt;
If your application will be accessed from publicly shared computers like libraries, you could take the following precautions: &lt;br /&gt;
&lt;br /&gt;
* You can make sure your pages do not get cached on the system by setting the correct cache control directives. &lt;br /&gt;
* You could take care that no sensitive information is included in the URLs since the history of the client browser will store these. &lt;br /&gt;
* Have a graphical keyboard for entering the password or ask the user to enter a different part of the password each time. This protects the password against keystroke loggers. &lt;br /&gt;
* To prevent sniffing of passwords and replay attacks using those, you should either use SSL or salted MD5 for passwords. The clear text password in the memory should be reset after computing the MD5. &lt;br /&gt;
=SQL Injection  =&lt;br /&gt;
&lt;br /&gt;
==What is SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
SQL Injection is a technique by which attackers can execute SQL statements of their choice on the backend database by manipulating the input to the application. Let's understand SQL Injection through the example of a login page in a web application where the database is SQL Server. The user needs to input Username and Password in the text boxes in Login.asp page. Suppose the user enters the following: Username : Obelix and Password : Dogmatix This input is then used to build a query dynamically which would be something like: SELECT * FROM Users WHERE username= 'Obelix' and password='Dogmatix' This query would return to the application a row from the database with the given values. The user is considered authenticated if the database returns one or more rows to the application. Now, suppose an attacker enters the following input in the login page: Username : ' or 1=1-- The query built will look like this: SELECT * FROM Users WHERE username='' or 1=1-- and password='' -- in SQL Server is used to comment out the rest of the line. So, our query is now effectively: SELECT * FROM Users WHERE username='' or 1=1 This query will look in the database for a row where either username is blank or the condition 1=1 is met. Since the latter always evaluates to true, the query will return all rows of the Users table and the user is authenticated. The attacker has been successful in logging into the application without a username and password. You can read more on this at the Securiteam site: http://www.securiteam.com/securityreviews/5DP0N1P76E.html &lt;br /&gt;
&lt;br /&gt;
==Is it just ASP and SQL Server or are all platforms vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Almost all platforms are vulnerable to SQL Injection. Inadequate checking of user input and the use of dynamic SQL queries are what make an application vulnerable to these attacks. The syntax of the input entered for SQL Injection will depend on the database being used. During our application security audits we have found many applications using other databases to be vulnerable. The above example would work on SQL Server, Oracle and MySQL. This shows that the problem is with the inadequate checking of user input and the use of dynamic SQL and not the underlying database. &lt;br /&gt;
&lt;br /&gt;
==Apart from username and password which variables are candidates for SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
Any input field that makes up the where clause of a database query is a candidate for SQL Injection, eg. account numbers, and credit card numbers in the case of an online banking application. In addition to form fields, an attacker can use hidden fields and query strings also for injecting commands.&lt;br /&gt;
&lt;br /&gt;
Apart from input fields, URL parameters are also vulnerable to SQL Injection as well as other input based attacks.&lt;br /&gt;
&lt;br /&gt;
==How do we prevent SQL Injection in our applications?  ==&lt;br /&gt;
&lt;br /&gt;
It is quite simple to prevent SQL injection while developing the application. You need to check all input coming from the client before building a SQL query. The best method is to remove all unwanted input and accept only expected input. While server side input validation is the most effective method of preventing SQL Injection, the other method of prevention is not using dynamic SQL queries. This can be achieved by using stored procedures or bind variables in databases that support these features. For applications written in Java, CallableStatements and PreparedStatements can be used. For ASP applications, ADO Command Objects can be used. You can check the following article for more on SQL Injection in Oracle: http://www.integrigy.com/info/IntegrigyIntrotoSQLInjectionAttacks.pdf &lt;br /&gt;
&lt;br /&gt;
==I'm using stored procedures for authentication, am I vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Maybe, but probably no. Using stored procedures can prevent SQL Injection because the user input is no longer used to build the query dynamically. Since a stored procedure is a group of precompiled SQL statements and the procedure accepts input as parameters, a dynamic query is avoided. Although input is put into the precompiled query as is, since the query itself is in a different format, it does not have the effect of changing the query as expected. By using stored procedures we are letting the database handle the execution of the query instead of asking it to execute a query we have built. The exception to this is where the stored procedure takes a string as input and uses this string to build the query without validating it. While this is more difficult to exploit, this scenario still often leads to successful SQL Injection. This article explains how SQL Injection affects stored procedures in more detail: http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/&lt;br /&gt;
&lt;br /&gt;
==I'm using client side JavaScript code for checking user input. Isn't that enough?  ==&lt;br /&gt;
&lt;br /&gt;
No. Although client side checking disallows the attacker to enter malicious data directly into the input fields, that alone is not enough to prevent SQL Injection. Client side scripts only check for input in the browser. But this does not guarantee that the information will remain the same till it reaches the server. To bypass client side JavaScript, the attacker can trap the request in a proxy (eg. WebScarab, [http://www.parosproxy.org Paros]) after it leaves the browser and before it reaches the server and there he can alter input fields. The attacker can also inject commands into the querystring variables which are not checked by the client side scripts, or could disable JavaScript rendering client-side scripting useless.&lt;br /&gt;
&lt;br /&gt;
==Are Java servlets vulnerable to SQL injection?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, they are if the user input is not checked properly, and if they build SQL queries dynamically. But Java servlets also have certain features that prevent SQL Injection like CallableStatements and PreparedStatements. Like stored procedures and bind variables, they avoid the need of dynamic SQL statements.&lt;br /&gt;
&lt;br /&gt;
==Can an automated scanner discover SQL Injection? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes yes, sometimes no. Whether a scanner can discover SQL injection or not depends on a variety of factors: the discovery technique used, the response from the application when a malformed SQL snippet is added, and some luck. Specifically, scanners that use Blind SQL Injection are most likely to detect SQL Injection. Scanners that claim hundreds of test cases for SQL Injection are misleading. This entry from the [http://www.plynt.com/resources/learn/tools/do_scanners_catch_sql_injectio_1/  Penetration Testing Learning Center] explains this in detail.&lt;br /&gt;
&lt;br /&gt;
=Variable Manipulation  =&lt;br /&gt;
&lt;br /&gt;
==Why can't I trust the information coming from the browser?  ==&lt;br /&gt;
&lt;br /&gt;
There are chances that the information is modified before it reaches the server. Attackers browsing the site can manipulate the information in a GET or POST request. There are a number of HTTP/HTTPS proxy tools like [http://www.mavensecurity.com/achilles Achilles], Paros, WebScarab, etc which are capable of intercepting all this information and allow the attacker running the tool to modify it. Also, the information that the user sees or provides on a web page has to travel through the internet before it reaches the server. Although the client and the server may be trusted, we cannot be sure that the information is not modified after it leaves the browser. Attackers can capture the information on the way and manipulate it.&lt;br /&gt;
&lt;br /&gt;
==What information can be manipulated by the attacker?  ==&lt;br /&gt;
&lt;br /&gt;
Manipulating the variables in the URL is simple. But attackers can also manipulate almost all information going from the client to the server like form fields, hidden fields, content-length, session-id and http methods.&lt;br /&gt;
&lt;br /&gt;
==How do attackers manipulate the information? What tools do they use?  ==&lt;br /&gt;
&lt;br /&gt;
For manipulating any information, including form fields, hidden variables and cookies, attackers use tools known as HTTP/HTTPS proxy tools. Once the browser's proxy settings are configured to go through the HTTP/HTTPS proxy, the tool can see all information flowing between the client and the server; it even allows the attacker to modify any part of the request before sending it. Some such tools are: WebScarab can be downloaded from the OWASP site. Odysseus can be found at http://www.bindshell.net/tools/odysseus Paros can be downloaded from http://www.parosproxy.org&lt;br /&gt;
&lt;br /&gt;
==I'm using SSL. Can attackers still modify information?  ==&lt;br /&gt;
&lt;br /&gt;
Although SSL provides a lot of security, SSL alone is not enough to prevent variable manipulation attacks. SSL was supposed to prevent against Man in the Middle attacks but it is vulnerable to it. To successfully carry out the MITM attack, first the attacker has to divert the victim's requests to his machine i.e. redirecting the packets meant for the server to himself. He can do this by ARP poisoning / DNS Cache poisoning. Once he is able to redirect, he can see all the requests the victim is trying to make. Now when the victim tries to establish an SSL connection with a legitimate server, he gets connected to the attacker. The attacker, during the SSL Handshaking, provides a fake certificate to the victim, which the victim accepts even though the browser warns him. Thus, the victim establishes an SSL connection with the attacker instead of the server. The attacker establishes a different SSL connection with that legitimate server, which the victim was trying to connect. Now all data flow between the victim and the server will be routed through the attacker and the attacker can see all data the victim (as well as the server) sends. This is because the victim will encrypt all data with the attacker's public key, which the attacker can decrypt with his private key. The attacker can then manipulate all data that is passing through his machine.&lt;br /&gt;
&lt;br /&gt;
==Is there some way to prevent these proxy tools from editing the data?  ==&lt;br /&gt;
&lt;br /&gt;
The main threat these proxy tools pose is editing the information sent from the client to the server. One way to prevent it is to sign the message sent from the client with a Java Applet downloaded onto the client machine. Since the applet we developed will be the one validating the certificate and not the browser, a proxy tool will not be able to get in between the client and the server with a fake certificate. The applet will reject the fake certificate. The public key of this certificate can then be used to digitally sign each message sent between the client and the server. An attacker would then have to replace the embedded certificate in the applet with a fake certificate to succeed - that raises the barrier for the attacker. &lt;br /&gt;
&lt;br /&gt;
=Browser Cache  =&lt;br /&gt;
&lt;br /&gt;
==How can the browser cache be used in attacks?  ==&lt;br /&gt;
&lt;br /&gt;
The browser has a capability to temporarily store some of the pages browsed. These cached files are stored in a folder, like the Temporary Internet Files folder in the case of Internet Explorer. When we ask for these pages again, the browser displays them from its cache. This is much faster than downloading the page from the server. Let's consider the particular scenario where a user has logged in to an application with username and password. The user browses the different pages which contain sensitive information. Let's suppose a page with the user's credit card information gets cached in the browser and the user logs out of the application. Now suppose the attackers access the same machine and searches through the Temporary Internet Files, they will get the credit card details. The attackers do not need to know the username and password of the user to steal the information. &lt;br /&gt;
&lt;br /&gt;
==How do I ensure that sensitive pages are not cached on the user's browser?  ==&lt;br /&gt;
&lt;br /&gt;
The response header sent from the server has some cache control directives that can be set from your code. These directives control the caching of content on any cache. The directives to be set are Cache-Control : no-cache, no-store and Expires: 0. But since legacy HTTP 1.0 servers do not support the Cache-Control headers, universally, Pragma: no-cache header should be used, too.&lt;br /&gt;
&lt;br /&gt;
==What is the best way to implement Pragma: No-cache?  ==&lt;br /&gt;
&lt;br /&gt;
Pragma: No-cache directive is used in the meta tag in the header, which is normally at the beginning of an HTML webpage. When an HTML code is parsed (in a top-to-bottom approach), the browser looks for the presence of the page in the cache as soon as it reads the Pragma directive. But since at that moment the page has not been cached (a webpage gets cached only after it has filled at least 32kb of the buffer), the browser will not clear the cache and it will go ahead with parsing the rest of the code. As a result, all the contents of webpage that are loaded after the parsing of Pragma get cached. The best way to implement Pragma: No-cahce is to place another header just before the html code ends. This way, the browser will parse the pragma no-cache directive after the comlete page has been loaded.&lt;br /&gt;
&lt;br /&gt;
==What's the difference between the cache-control directives: no-cache, and no-store?  ==&lt;br /&gt;
&lt;br /&gt;
The no-cache directive in a response indicates that the response must not be used to serve a subsequent request i.e. the cache must not display a response that has this directive set in the header but must let the server serve the request. The no-cache directive can include some field names; in which case the response can be shown from the cache except for the field names specified which should be served from the server. The no-store directive applies to the entire message and indicates that the cache must not store any part of the response or any request that asked for it. &lt;br /&gt;
&lt;br /&gt;
==Am I totally safe with these directives?  ==&lt;br /&gt;
&lt;br /&gt;
No. But generally, use both Cache-Control: no-cache, no-store and Pragma: no-cache, in addition to Expires: 0 (or a sufficiently backdated GMT date such as the UNIX epoch).  Non-html content types like pdf, word documents, excel spreadsheets, etc often get cached even when the above cache control directives are set (although this varies by version and additional use of must-revalidate, pre-check=0, post-check=0, max-age=0, and s-maxage=0 in practice can sometimes result at least in file deletion upon browser closure in some cases due to browser quirks and HTTP implementations). Also, 'Autocomplete' feature allows a browser to cache whatever the user types in an input field of a form. To check this, the form tag or the individual input tags should include 'Autocomplete=&amp;quot;Off&amp;quot; ' attribute. However, it should be noted that this attribute is non-standard (although it is supported by the major browsers) so it will break XHTML validation.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about caching?  ==&lt;br /&gt;
&lt;br /&gt;
Some useful links that talk about caching are - Caching Tutorial for Web Authors and Webmasters by Mark Nottingham at http://www.mnot.net/cache_docs/ and HTTP RFC (sec14.9.1) at http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;br /&gt;
&lt;br /&gt;
=Cross Site Scripting  =&lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Scripting?  ==&lt;br /&gt;
&lt;br /&gt;
Cross Site scripting (XSS) is a type of attack that can be carried out to steal sensitive information belonging to the users of a web site. This relies on the server reflecting back user input without checking for embedded javascript. This can be used to steal cookies and session IDs. Let's see how it works. We would all have come across the following situation sometime - we type a URL in the browser, say www.abcd.com/mypage.asp, and receive an error page that says &amp;quot;Sorry www.abcd.com/mypage.asp does not exist&amp;quot; or a page with a similar message. In other words, pages that display the user input back on the browser. Pages like this could be exploited using XSS. Instead of a normal input, think what will happen if the input contains a script in it. While reflecting back the input, instead of rendering it as normal HTML output, the browser treats it as a script and executes it. This script could contain some malicious code. The attackers can send a link that contains a script as part of the URL to a user. When the user clicks it, the script gets executed on the user's browser. This script may have been written to collect important information about the user and send it to the attacker. Kevin Spett's paper Cross Site Scripting, Are your web applications vulnerable? is a good source of information on this topic and is available at http://www.spidynamics.com/whitepapers/SPIcross-sitescripting.pdf The Cross Site Scripting FAQ at CGI Security is another good place to learn more on XSS. &lt;br /&gt;
&lt;br /&gt;
==What information can an attacker steal using XSS?  ==&lt;br /&gt;
&lt;br /&gt;
The attackers can steal the session ID of a valid user using XSS. The session ID is very valuable because it is the secret token that the user presents after login as proof of identity until logout. If the session ID is stored in a cookie, the attackers can write a script which will run on the user's browser, query the value in the cookie and send it to the attackers. The attackers can then use the valid session ID to browse the site without logging in. The script could also collect other information from the page, including the entire contents of the page. &lt;br /&gt;
&lt;br /&gt;
==Apart from mailing links of error pages, are there other methods of exploiting XSS?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are other methods. Let's take the example of a bulletin board application that has a page where data entered by one user can be viewed by other users. The attackers enter a script into this page. When a valid user tries to view the page, the script gets executed on the user's browser. It will send the user's information to the attackers. &lt;br /&gt;
&lt;br /&gt;
==How can I prevent XSS?  ==&lt;br /&gt;
&lt;br /&gt;
XSS can be prevented while coding the application. You should be validating all input and output to and from the application and escape all special characters that may be used in a script. If the code replaces the special characters by the following before displaying the output, XSS can be prevented to some extent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;   &amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;   &amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
(   &amp;amp;*40; &lt;br /&gt;
&lt;br /&gt;
)   &amp;amp;*41; &lt;br /&gt;
&lt;br /&gt;
*   &amp;amp;*35; &lt;br /&gt;
&amp;amp;   &amp;amp;*38;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gunter Ollmann has written an excellent paper on the use of special characters in XSS attacks. For instance, the above technique of escaping special characters cannot protect against a script injected like &amp;quot;javascript:self.location.href = 'www.evil.org' &amp;quot; as this script does not use any of the special characters.&lt;br /&gt;
&lt;br /&gt;
==Can XSS be prevented without modifying the source code?  ==&lt;br /&gt;
&lt;br /&gt;
There is a method that requires minimal coding as compared to performing input, output validation to prevent the stealing of cookies by XSS. Internet Explorer 6 has an attribute called HTTP Only that can be set for cookies. Using this attribute makes sure that the cookie can not be accessed by any scripts. More details are available at the MSDN site on httpcookies at http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_cookies.asp Mozilla also has plans to implement a similar feature. Researchers have found a method to beat this. It is known as Cross Site Tracing. &lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Tracing (XST)? How can it be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
Attackers are able to bypass the HTTP Only attribute to steal cookie information by Cross Site tracing (XST). TRACE is a HTTP method that can be sent to the server. The server sends back anything included in the TRACE request back to the browser. In a site that uses cookies, the cookie information is sent to the server in each request. If we send a TRACE request in a URL of such a site, the server will send back all cookie information to the browser. Now imagine a situation similar to the one described in XSS but the site in this case is using the HTTP Only cookies. The attackers make a valid user click on a link that contains a script that calls the TRACE method. When the user clicks on the link the TRACE request as well as all the cookie information is sent to the server. The server then sends back the cookie information back to the script in the browser. Suppose that the malicious script also contains code to send this information to the attackers. The attackers have succeeded again in stealing the cookies although HTTP Only Cookies were used. To summarize, HTTP Only cookies prevent the JavaScript from directly accessing the cookies but the attacker was able to retrieve it through an indirect method. XST can be prevented by disabling the TRACE method on the web server. This paper by Jeremiah Grossman discusses XST in greater detail http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf &lt;br /&gt;
&lt;br /&gt;
=Web Server Fingerprinting  =&lt;br /&gt;
&lt;br /&gt;
==How do attackers identify which web server I'm using?  ==&lt;br /&gt;
&lt;br /&gt;
Identifying the application running on a remote web server is known as fingerprinting the server. The simplest way to do this is to send a request to the server and see the banner sent in the response. Banners will generally have the server name and the version number in it. We can address this problem by either configuring the server not to display the banner at all or by changing it to make the server look like something else.&lt;br /&gt;
&lt;br /&gt;
==How can I fake the banners or rewrite the headers from my web server?  ==&lt;br /&gt;
&lt;br /&gt;
There are a number of tools that help in faking the banners. URLScan is a tool that can change the banner of an IIS web server. http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/tools/URLScan.asp mod_security has a feature for changing the identity of the Apache web server. It can be found at http://www.modsecurity.org/ Servermask for faking banners of IIS, can be found at http://www.servermask.com/ &lt;br /&gt;
&lt;br /&gt;
==Once I fake the banners, can my web server still be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Yes. Unfortunately there are tools that fingerprint the web server without relying on the banners. Different web servers may implement features not specified in HTTP RFCs differently. Suppose we make a database of these special requests and the responses of each web server. We can now send these requests to the web server we want to fingerprint and compare the responses with the database. This is the technique used by tools like Fire &amp;amp; Water. This tool can be found at http://www.ntobjectives.com/products/firewater/ There is a paper by Saumil Shah that discusses the tool httprint at http://net-square.com/httprint/httprint_paper.html httprint can be found at http://net-square.com/httprint/ &lt;br /&gt;
&lt;br /&gt;
==A friend told me it's safer to run my web server on a non-standard port. Is that right?  ==&lt;br /&gt;
&lt;br /&gt;
A web server generally needs to be accessed by a lot of people on the internet. Since it normally runs on port 80 and all browsers are configured to access port 80 of the web server, users are able to browse the site. If we change the port, the users will have to specify the port in addition to the domain name. But this is a good idea for an intranet application where all users know where to connect. It is more secure since the web server will not be targeted by automated attacks like worms that scan port 80 and other standard ports. &lt;br /&gt;
&lt;br /&gt;
==Should I really be concerned that my web server can be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Well, there are two schools of thought here. According to the first school, yes you should take precaution against fingerprinting as correctly identiying the web server maybe the first step in a more dangerous attack. Once attackers have found out that the web server is say IIS 5, they will search for known vulnerabilities for IIS 5. If the web server is not patched for all known vulnerabilities or the attackers find one for which a patch has not been released yet, there is nothing to stop them from attacking it. Also automated tools and worms can be fooled by changing the version information. Some determined and focused attackers might go to additional lengths to identify the server but the hurdles that the attackers have to overcome have increased when it's more difficult to fingerprint the web server name and version. Jeremiah Grossman pointed out the other school of thought. Evasive measures are futile as any scanner targeting a web site, will normally not care what the web server is. The scanner will run ALL its tests no matter if they apply to the system or not. This is a typical shotgun approach. A bad guy targeting the site might be hampered by not knowing the exact version, but if he's determined he would still try out all related exploits and try to break in. &lt;br /&gt;
&lt;br /&gt;
=Testing  =&lt;br /&gt;
&lt;br /&gt;
==I want to chain my proxy tool with a proxy server; are there tools that let me do that?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are several tools that allow proxy chaining. Some of these are: WebScarab - http://www.owasp.org/development/webscarab Exodus - http://home.intekom.com/rdawes/exodus.html Odysseus - http://www.wastelands.gen.nz/odysseus/index.php &lt;br /&gt;
&lt;br /&gt;
==Can't web application testing be automated? Are there any tools for that?  ==&lt;br /&gt;
&lt;br /&gt;
There are tools that scan applications for security flaws. But these tools can only look for a limited number of vulnerabilities, and do not find all the problems in the application. Moreover, a lot of attacks require understanding of the business context of the application to decide on the variables to manipulate in a particular request, which a tool is incapable of doing. A presentation by Jeremiah Grossman of White Hat Security which talks about the [http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-grossman-up.pdf limitations of automated scanning]. &lt;br /&gt;
&lt;br /&gt;
This piece explains [http://www.plynt.com/resources/learn/tools/what_cant_a_scanner_find_1/ what a scanner can't find].&lt;br /&gt;
&lt;br /&gt;
In our tests using a slightly modified WebGoat the best Black-box scanning tool found less than 20% of the issues ! Some tools for automated scanning are: SpikeProxy, open source and freely available at http://www.immunitysec.com/spikeproxy.html WebInspect, can be found at http://www.spidynamics.com/productline/WE_over.html&lt;br /&gt;
&lt;br /&gt;
==Where can I try out my testing skills? Is there a sample application I can practice with?  ==&lt;br /&gt;
&lt;br /&gt;
OWASP provides a sample application that can be used for this purpose called . As the site says, the WebGoat project's goal is to teach web security in an interactive teaching environment. There are lessons on most of the common vulnerabilities. Another interesting site is Hackingzone which has a game on SQL Injection at http://www.hackingzone.org/sql/index.php &lt;br /&gt;
&lt;br /&gt;
==Are there source code scanning tools for .NET languages, Java, PHP etc that predict vulnerabilities in the source code?  ==&lt;br /&gt;
&lt;br /&gt;
Rough Auditing Tool for Security (RATS) is a tool that scans the source code for security flaws in C, C++, Python, Perl and PHP programs. It can be found at http://code.google.com/p/rough-auditing-tool-for-security/downloads/list FX Cop was created by the Microsoft Team at the GotDotNet community site to check for the .NET Frameowork guidelines which include security. Prexis is a commercial source code and run-time analyzer. Flawfinder is a static source code analyzer. Compaq ESC is a run-time analyzer for Java. Parasoft AEP is a commercial source code analyzer for Java. Fortify SCA from Fortify Software is another source code analyzer that supports mixed language analysis of C, C++, C#, ASP.NET, Java, JSP, PL/SQL, VB.NET, XML, etc. Secure Coding plugins are also available. Similar source code analyzers are Klocwork K7 for C, C++ and Java; Coverity Prevent for detecting security violations and defects in code; Ounce Solutions for C, C++, C#, ASP.NET, Java and JSP. We would like to know about more tools for scanning source code. If you know about any, please inform us and we'll add to this FAQ&lt;br /&gt;
&lt;br /&gt;
==Can non-HTTP protocols also be intercepted and played with like this?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, Interactive TCP Replay is a tool that acts as a proxy for non-HTTP applications and also allows modifying the traffic. It allows editing of the messages in a hex editor. ITR also logs all the messages passing between the client and the server. It can use different types of character encoding like ASCII or EBCDIC for editing and logging. More information on this can be found at http://www.webcohort.com/web_application_security/research/tools.html &lt;br /&gt;
&lt;br /&gt;
=Cryptography/SSL  =&lt;br /&gt;
&lt;br /&gt;
==What is SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer (SSL) gives us assurance of two things. Firstly when a client connects to a web server, the client can be sure that it is talking to the right server by checking the certificate the server sends it. Secondly, SSL assures you of the confidentiality of the data, as the client and the server exchange encrypted messages that cannot be understood by anybody else. This is how SSL works: When the client requests for a SSL page, the server sends a certificate that it has obtained from a trusted certificate authority. This certificate contains the public key of the server. After satisfying itself that the certificate is correct and the server is a genuine one, the client generates one random number, the session key. This key is encrypted by the public key of the server and sent across. The server decrypts the message with its private key. Now both sides have a session key known only to the two of them. All communication to and fro is encrypted and decrypted with the session key. An interesting link on SSL is http://www.rsasecurity.com/standards/ssl/basics.html &lt;br /&gt;
&lt;br /&gt;
==Should I use 40-bit or 128-bit SSL?  ==&lt;br /&gt;
&lt;br /&gt;
There are 2 strengths in SSL - 40-bit and 128-bit. These refer to the length of the secret key used for encrypting the session. This key is generated for every SSL session and is used to encrypt the rest of the session. The longer the key the more difficult it is to break the encrypted data. So, 128-bit encryption is much more secure than 40-bit. Most browsers today support 128-bit encryption. There are a few countries which have browsers with only 40-bit support. In case you are using 40-bit SSL, you may need to take further precautions to protect sensitive data. Salted hash for transmitting passwords is a good technique. This ensures that the password can not be stolen even if the SSL key is broken. &lt;br /&gt;
&lt;br /&gt;
==Is 40-bit SSL really unsafe?  ==&lt;br /&gt;
&lt;br /&gt;
40-bit SSL is not really unsafe. It's just that it is computationally feasible to break the key used in 40-bit but not the key used in 128-bit. Even though 40-bit can be broken, it takes a fairly large number of computers to break it. Nobody would even attempt to do that for a credit card number or the like. But there are claims of breaking the 40-bit RC4 key in a few hours. So depending on the data your application deals with, you can decide on the SSL strength. Using 128-bit is definitely safer.&lt;br /&gt;
&lt;br /&gt;
With home computers gtting faster day by day, a dedicated, expensive and very fast computer can break 40-bit encryption in few minutes (ideally testing a million keys per second). On the other hand, 128-bit encryotion will have about 339,000,000,000,000,000,000,000,000,000,000,000 (Couple of Trillions or 2^128) possible key combinations and it will take around 1000 Years to break 128-bit encryptions with the help of a cluster of very fast computers.&lt;br /&gt;
&lt;br /&gt;
==What all are encrypted when I use SSL? Is the page request also encrypted?  ==&lt;br /&gt;
&lt;br /&gt;
After the initial SSL negotiation is done and the connection is on HTTPS, everything is encrypted including the page request. So any data sent in the query string will also be encrypted. &lt;br /&gt;
&lt;br /&gt;
==Which cryptographic algorithms do SSL use?  ==&lt;br /&gt;
&lt;br /&gt;
SSL supports a number of cryptographic algorithms. During the initial &amp;quot;handshaking&amp;quot; phase, it uses the RSA public key algorithm. For encrypting the data with the session key the following algorithms are used - RC2, RC4, IDEA, DES, triple-DES and MD5 message digest algorithm. &lt;br /&gt;
&lt;br /&gt;
==I want to use SSL. Where do I begin?  ==&lt;br /&gt;
&lt;br /&gt;
There are several Certificate Authorities that you can buy a SSL certificate from. Whichever CA you choose, the basic procedure will be as follows - &lt;br /&gt;
&lt;br /&gt;
* Create key pair for the server &lt;br /&gt;
* Create the Certificate Signing Request. This will require you to provide certain details like location and fully qualified domain name of the server. &lt;br /&gt;
* Submit the CSR to the CA along with documentary proof of identity. &lt;br /&gt;
* Install the certificate sent by the CA&lt;br /&gt;
The first two steps are done from the web server. All servers have these features. While installing the certificate issued by the CA, you will have to specify which web pages are to be on SSL.&lt;br /&gt;
&lt;br /&gt;
A good starting point for working on POC in a Windows development environment could be: &amp;quot;HOW TO: Secure XML Web Services with Secure Socket Layer in Windows 2000&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;q307267&amp;amp;sd=tech&lt;br /&gt;
&lt;br /&gt;
=Cookies and Session Management  =&lt;br /&gt;
&lt;br /&gt;
==Are there any risks in using persistent vs non-persistent cookies?  ==&lt;br /&gt;
&lt;br /&gt;
Persistent cookies are data that a web site places on the user's hard drive (or equivalent) for maintaining information over more than one browser session. This data will stay in the user's system and can be accessed by the site the next time the user browses the site. Non-persistent cookies on the other hand are those that are used only in the browser session that creates it. They stay only in the memory of the machine and are not persisted on the hard disk. The security risk with persistent cookies is that they are generally stored in a text file on the client and an attacker with access to the victim's machine can steal this information. &lt;br /&gt;
&lt;br /&gt;
==Can another web site steal the cookies that my site places on a user's machine?  ==&lt;br /&gt;
&lt;br /&gt;
No, it is not possible for a website to access another site's cookies. Cookies have a domain attribute associated with them. Only a request coming from the domain specified in the attribute can access the cookie. This attribute can have only one value. &lt;br /&gt;
&lt;br /&gt;
==Which is the best way to transmit session ids- in cookies, or URL or a hidden variable?  ==&lt;br /&gt;
&lt;br /&gt;
Transmitting session IDs in the URL can lead to several risks. Shoulder surfers can see the session ID; if the URL gets cached on the client system, the session ID will also be stored; the session ID will get stored in the referrer logs of other sites. Hidden variables are not always practical as every request might not be a POST. Cookies are the safest method as cookies do not get cached, are not visible in the W3C or referrer logs, and most users anyway accept cookies. &lt;br /&gt;
&lt;br /&gt;
==What are these secure cookies?  ==&lt;br /&gt;
&lt;br /&gt;
A cookie can be marked as &amp;quot;secure&amp;quot; which ensures the cookie is used only over SSL sessions. If &amp;quot;secure&amp;quot; is not specified, the cookie will be sent unencrypted over non-SSL channels. Sensitive cookies like session tokens should be marked as secure if all pages in the web site requiring session tokens are SSL-enabled. One thing to keep in mind here is that images are generally not downloaded over SSL and they usually don't require a session token to be presented. By setting the session cookie to be secure, we ensure that the browser does not send the cookie while downloading the image over the non-SSL connection.&amp;lt;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==If I use a session ID that is a function of the client's IP address, will session hijacking be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
An attacker can hijack another user's session by stealing the session token. Methods have been suggested to prevent the session from being hijacked even if the session token is stolen. For instance, using a session token that is a function of the user's IP address. In this approach, even if the attacker stole the token, he would need the same IP address as the user to successfully hijack a session. However, session hijacking can still be possible. Suppose the attacker is on the same LAN as the user and uses the same Proxy IP as the user to access the web site. The attacker can still steal the session if he is able to sniff the session token. It may also be not possible to implement this if the IP of the client changes during a session, making the session invalid if the token is tied to the initial IP address. This may happen if the client is coming from behind a bank of proxy servers. &lt;br /&gt;
&lt;br /&gt;
==How about encrypting the session id cookies instead of using SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Encrypting just the session ID over a non-SSL connection will not serve any purpose. Since the session ID will be encrypted once and the same value will be sent back and forth each time, an attacker can use the encrypted value to hijack the session. &lt;br /&gt;
&lt;br /&gt;
==What is the concept of using a page id, in addition to the session id?  ==&lt;br /&gt;
&lt;br /&gt;
A Session ID or token has the lifetime of a session and is tied to the logged in user. A page ID or token has a lifetime of a page and is tied to a page that is served. It is a unique token given when a page is downloaded and is presented by the user when accessing the next page. The server expects a particular value for the user to access the next page. Only if the token submitted matches what the server is expecting is the next page served. An application can use this to ensure that a user accesses pages only in the sequence determined by the application. The user cannot paste a deep URL in the browser and skip pages just because he has a session token, as the page token would not be authorized to access the deeper URL directly. Good Read: [http://palisade.plynt.com/issues/2005Aug/page-tokens/ Secure your sessions with Page Tokens]&lt;br /&gt;
&lt;br /&gt;
=Logging and Audit Trails  =&lt;br /&gt;
&lt;br /&gt;
==What are these W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
W3C is a logging format used for Web server log files. W3C logs record access details of each request: the timestamp, source IP, page requested, the method used, http protocol version, browser type, the referrer page, the response code etc. Note that these are access logs, and so a separate record is maintained for each request. When a page with multiple gif files is downloaded, it would be recorded as multiple entries in the W3C log; so, W3C logs tend to be voluminous. &lt;br /&gt;
&lt;br /&gt;
==Do I need to have logging in my application even if I've W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, it's important that your application maintains &amp;quot;application level&amp;quot; logs even when W3C logging is used. As W3C logs contain records for every http request, it is difficult (and, at times impossible) to extract a higher level meaning from these logs. For instance, the W3C logs are cumbersome to identify a specific session of user and the activities that the user performed. It's better that the application keeps a trail of important activities, rather than decode it from W3C logs. &lt;br /&gt;
&lt;br /&gt;
==What should I log from within my application?  ==&lt;br /&gt;
&lt;br /&gt;
Keep an audit trail of activity that you might want to review while troubleshooting or conducting forensic analysis. Please note that it is inadvisable to keep sensitive business information itself in these logs, as administrators have access to these logs for troubleshooting. Activities commonly kept track of are: &lt;br /&gt;
&lt;br /&gt;
* Login and logout of users &lt;br /&gt;
* Critical transactions (eg. fund transfer across accounts) &lt;br /&gt;
* Failed login attempts &lt;br /&gt;
* Account lockouts &lt;br /&gt;
* Violation of policies &lt;br /&gt;
The data that is logged for each of these activities usually include: &lt;br /&gt;
&lt;br /&gt;
* User ID &lt;br /&gt;
* Time stamp &lt;br /&gt;
* Source IP &lt;br /&gt;
* Error codes, if any &lt;br /&gt;
* Priority &lt;br /&gt;
==Should I encrypt my logs? Isn't that a performance hit?  ==&lt;br /&gt;
&lt;br /&gt;
Encryption is required when information has to be protected from being read by unauthorized users. Yes, encryption does take a performance hit, so if your logs do not contain sensitive information you might want to forego encryption. However, we strongly urge that you protect your logs from being tampered by using digital signatures. Digital signatures are less processor intensive than encryption and ensure that your logs are not tampered. &lt;br /&gt;
&lt;br /&gt;
==Can I trust the IP address of a user I see in my audit logs? Could a user be spoofing/impersonating their IP address?  ==&lt;br /&gt;
&lt;br /&gt;
A bad guy who wants to hide his actual IP address might use a service like anonymizer, or use open HTTP relays. [HTTP open relays are improperly configured web servers on the web that are used as a HTTP proxy to connect to other sites.] In such cases, the IP address you see in your log files will be those of these services or the open relay that is being used. So, the IP address you see in your log files might not always be trustworthy. &lt;br /&gt;
&lt;br /&gt;
=Miscellaneous  =&lt;br /&gt;
&lt;br /&gt;
==What are Buffer Overflows? ==&lt;br /&gt;
&lt;br /&gt;
Buffer overflow vulnerability affects the web applications that require user input. The application stores the input in a buffer which is of a fixed size, as defined by the programmer. When the input that is sent to the application is more than the buffer capacity and the buffers are left unchecked, buffer overflow occurs. The severity depends on the user input. If a malicious code executes as a result of the overflow, it can even compromise the whole system.&lt;br /&gt;
To learn more, please read the OWASP article on [http://www.owasp.org/index.php/Buffer_Overflow buffer overflows.]&lt;br /&gt;
&lt;br /&gt;
==What are application firewalls? How good are they really?  ==&lt;br /&gt;
&lt;br /&gt;
Application firewalls analyze the requests at the application level. These firewalls are used for specific applications like a web server or a database server. The web application firewalls protect the web server from HTTP based attacks. They monitor the requests for attacks that involve SQL Injection, XSS, URL encoding etcetera. However, application layer firewalls cannot protect against attacks that require an understanding of the business context - this includes most attacks that rely on variable manipulation. Some application firewalls are: Netcontinuum's NC-1000 Kavado Inc.'s InterDo Teros Inc.'s Teros-100 APS&lt;br /&gt;
&lt;br /&gt;
==What is all this about &amp;quot;referrer logs&amp;quot;, and sensitive URLs?  ==&lt;br /&gt;
&lt;br /&gt;
The HTTP header contains a field known as Referrer. For visiting a web page we may either: &lt;br /&gt;
&lt;br /&gt;
* Type its URL directly into the address bar of the browser &lt;br /&gt;
* Click a link on some other page that brings us there &lt;br /&gt;
* Be redirected there by some page. &lt;br /&gt;
In the first case, the referrer field will be empty but in the other two cases it will contain the URL of the previous page. The URL of the first page will get stored in the web server access logs of the second page when the user reaches the second page from the first page. Now suppose, the two pages belong to different sites and the first URL contains sensitive information like a user's session ID. If the second site belongs to attackers, they can obtain this information by just going through the logs. Information in the URLs will get stored in the referrer logs as well as the history of the browser. Therefore, we should be careful not to have any sensitive information in the URL. &lt;br /&gt;
&lt;br /&gt;
==I want to use the most secure language; which language do you recommend?  ==&lt;br /&gt;
&lt;br /&gt;
Any language can be used since secure programming practices are what make applications safe. Most security techniques can be implemented in any language. Our advice would be to use any language you are comfortable with. But some languages like Java have additional features like bind variables that aid security; you could use those additional features if you decide to program in that language. &lt;br /&gt;
&lt;br /&gt;
==What are the good books to learn secure programming practices?  ==&lt;br /&gt;
&lt;br /&gt;
The OWASP Guide to Building Secure Web Application and Web Services is a good guide for web application developers. You can download it from http://www.owasp.org/documentation/guide Writing Secure Code by Michael Howard and David LeBlanc has a chapter on Securing Web-Based Services. More information on this book can be found at: http://www.microsoft.com/mspress/books/toc/5612.asp Secure Programming for Linux and Unix HOWTO by David Wheeler talks about writing secure applications including web applications; it also specifies guidance for a number of languages. The book can be found at: http://www.dwheeler.com/secure-programs&lt;br /&gt;
&lt;br /&gt;
Another good book on application security, which also covers some web service specific topics: 19 Deadly Sins of Software Security, by: Michael Howard, David LeBlanc and John Viega (http://books.mcgraw-hill.com/getbook.php?isbn=0072260858).&lt;br /&gt;
&lt;br /&gt;
==Are there any training programs on secure programming that I can attend?  ==&lt;br /&gt;
&lt;br /&gt;
Microsoft offers training programs on Developing Security-Enhanced Web Applications and Developing and Deploying Secure Microsoft .NET Framework Application. More information can be found at http://www.microsoft.com/traincert/syllabi/2300AFinal.asp and http://www.microsoft.com/traincert/syllabi/2350BFinal.asp Foundstone offers secure coding training through Global Knowledge Aspect Security offers a similar course. &lt;br /&gt;
&lt;br /&gt;
OWASP_FAQ_Ver3.doc&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156408</id>
		<title>OWASP Application Security FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156408"/>
				<updated>2013-08-04T23:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Login Issues  =&lt;br /&gt;
&lt;br /&gt;
==What are the best practices I should remember while designing the login pages?  ==&lt;br /&gt;
&lt;br /&gt;
* From the login page, the user should be sent to a page for authentication. Once authenticated, the user should be sent to the next page. This is explained in the answer to the next question. &lt;br /&gt;
* The password should never be sent in clear text (unencrypted) because it can be stolen by sniffing; saving the password in clear text in the database is dangerous too. The best method of sending passwords is the Salted MD5 hashing technique and the passwords should be hashed and then stored in the database.&lt;br /&gt;
* The best way to manage sessions would be to use one session token with two values during authentication. One value before authentication and one after.&lt;br /&gt;
&lt;br /&gt;
==Is it really required to redirect the user to a new page after login?  ==&lt;br /&gt;
&lt;br /&gt;
Is it really required to redirect the user to a new page after login? &lt;br /&gt;
&lt;br /&gt;
Yes. Consider the application has a login page that sends the username and password as a POST request to the server. If a user clicks refresh on the second page (the page after login), the same request including the username and password in the POST will be sent again. Now suppose a valid user browses through our application and logs out, but does not close the window. The attackers come along and click the back button of the browser till they reach the second page. They only have to do a refresh and since the username and password are resubmitted and revalidated, the attackers can login as the user. Now let's assume the application has a login page which takes the user to an intermediate page for authentication. Once authenticated, the user is redirected to the second page with a session token. In this case, even if the attackers reach the second page and do a refresh, the username and password will not be resubmitted. This is so because the request that will be submitted is the one for the second page which does not contain the username and password. Therefore, it is always better to redirect the user. &lt;br /&gt;
&lt;br /&gt;
==How does the salted MD5 technique work?  ==&lt;br /&gt;
&lt;br /&gt;
Here is how the salted MD5 technique works: the database stores a MD5 hash of the password. (MD5 hash is a cryptographic technique in which the actual value can never be recovered.) When a client requests for the login page, the server generates a random number, the salt, and sends it to the client along with the page. A JavaScript code on the client computes the MD5 hash of the password entered by the user. It then concatenates the salt to the hash and re-computes the MD5 hash. This result is then sent to the server. The server picks the hash of the password from its database, concatenates the salt and computes the MD5 hash. If the user entered the correct password these two hashes should match. The server compares the two and if they match, the user is authenticated. &lt;br /&gt;
&lt;br /&gt;
==How can my &amp;quot;Forgot Password&amp;quot; feature be exploited?  ==&lt;br /&gt;
&lt;br /&gt;
The Forgot Password feature is implemented in a number of different ways. One common way is to ask the user a hint question for which the user has submitted the answer during registration. These are questions like What is your favorite color? or What is your favorite pastime? If the answer is correct, either the original password is displayed or a temporary password is displayed which can be used to log in. In this method, an attacker trying to steal the password of a user may be able to guess the correct answer of the hint question and even reset the password. &lt;br /&gt;
&lt;br /&gt;
==In &amp;quot;Forgot Password&amp;quot;, is it safe to display the old password?  ==&lt;br /&gt;
&lt;br /&gt;
If the old password is displayed on the screen, it can be seen by shoulder surfers. So it is a good idea not to display the password and let the user change to a new one. Moreover, displaying the password means it has to be stored in a recoverable form in the database which is not a good practice. If the password is stored as a one way hash in the database, the only way Forgot Password can be implemented is by letting the user reset the old password. So, it is always better to force the users reset their passwords when they forget their passwords. (A one way hash is the result obtained when we pass a string to a one way hash function. The result is such that it is impossible to get back the original value from it. Passwords are best stored as non-recoverable hashes in the database.) &lt;br /&gt;
&lt;br /&gt;
==Is there any risk in emailing the new password to the user's authorized mail id?  ==&lt;br /&gt;
&lt;br /&gt;
Emailing the actual password in clear text can be risky as an attacker can obtain it by sniffing. Also the mail containing the password might have a long life time and could be viewed by an attacker while it is lying in the mailbox of the user.&lt;br /&gt;
&lt;br /&gt;
Apart form the above threats, a malicious user can do shoulder-surfing to view the password or login credentials.&lt;br /&gt;
&lt;br /&gt;
==What is the most secure way to design the Forgot Password feature?  ==&lt;br /&gt;
&lt;br /&gt;
We should first ask the user to supply some details like personal details or ask a hint question. Then we should send a mail to the users authorized mail id with a link which will take the user to a page for resetting the password. This link should be active for only a short time, and should be SSL- enabled. This way the actual password is never seen. The security benefits of this method are: the password is not sent in the mail; since the link is active for a short time, there is no harm even if the mail remains in the mailbox for a long time. &lt;br /&gt;
&lt;br /&gt;
==How do I protect against automated password guessing attacks?  ==&lt;br /&gt;
&lt;br /&gt;
Password guessing with automated tools is a serious problem since there are a number of tools available for this purpose. These tools essentially keep trying out different passwords till one matches. Locking out the account after 5 failed attempts is a good defense against these tools. However, the important point then is how long you lock out the account for. If it is for too long, service to valid users might be denied as the attackers repeatedly lock out your users. If the time is too short say about 1-2 minutes, the tool could start again after the timeout. So the best method would be to insist on human intervention after a few failed attempts. A method used by a number of sites these days is to have the user read and enter a random word that appears in an image on the page. Since this cannot be done by a tool, we can thwart automated password guessing. The following are some tools that guess passwords of web applications: Brutus - http://www.hoobie.net/brutus/ WebCracker http://www.securityfocus.com/tools/706&lt;br /&gt;
&lt;br /&gt;
==How can I protect against keystroke loggers on the client machine?  ==&lt;br /&gt;
&lt;br /&gt;
Keystroke loggers on the end users machines can sometimes ruin all our efforts of securely transmitting and storing the passwords. The users themselves may not be aware that a key logger has been installed on their machines and records each key pressed. Since the highest risk is with the password, if we can authenticate the users without having them use the keyboard, or reveal the entire password, we solve the problem. The different ways of doing this are: &lt;br /&gt;
&lt;br /&gt;
* Having a graphical keyboard where the users can enter the characters they want by clicking the mouse on it. This is especially useful for numeric PINs. &lt;br /&gt;
* Asking the users to type a part of their password each time and not the whole password. For example you could say &amp;quot;Please enter the 1st, 3rd and 6th letters of your password&amp;quot; and this rule could be a random one each time. &lt;br /&gt;
==My site will be used from publicly shared computers. What precautions must I take?  ==&lt;br /&gt;
&lt;br /&gt;
If your application will be accessed from publicly shared computers like libraries, you could take the following precautions: &lt;br /&gt;
&lt;br /&gt;
* You can make sure your pages do not get cached on the system by setting the correct cache control directives. &lt;br /&gt;
* You could take care that no sensitive information is included in the URLs since the history of the client browser will store these. &lt;br /&gt;
* Have a graphical keyboard for entering the password or ask the user to enter a different part of the password each time. This protects the password against keystroke loggers. &lt;br /&gt;
* To prevent sniffing of passwords and replay attacks using those, you should either use SSL or salted MD5 for passwords. The clear text password in the memory should be reset after computing the MD5. &lt;br /&gt;
=SQL Injection  =&lt;br /&gt;
&lt;br /&gt;
==What is SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
SQL Injection is a technique by which attackers can execute SQL statements of their choice on the backend database by manipulating the input to the application. Let's understand SQL Injection through the example of a login page in a web application where the database is SQL Server. The user needs to input Username and Password in the text boxes in Login.asp page. Suppose the user enters the following: Username : Obelix and Password : Dogmatix This input is then used to build a query dynamically which would be something like: SELECT * FROM Users WHERE username= 'Obelix' and password='Dogmatix' This query would return to the application a row from the database with the given values. The user is considered authenticated if the database returns one or more rows to the application. Now, suppose an attacker enters the following input in the login page: Username : ' or 1=1-- The query built will look like this: SELECT * FROM Users WHERE username='' or 1=1-- and password='' -- in SQL Server is used to comment out the rest of the line. So, our query is now effectively: SELECT * FROM Users WHERE username='' or 1=1 This query will look in the database for a row where either username is blank or the condition 1=1 is met. Since the latter always evaluates to true, the query will return all rows of the Users table and the user is authenticated. The attacker has been successful in logging into the application without a username and password. You can read more on this at the Securiteam site: http://www.securiteam.com/securityreviews/5DP0N1P76E.html &lt;br /&gt;
&lt;br /&gt;
==Is it just ASP and SQL Server or are all platforms vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Almost all platforms are vulnerable to SQL Injection. Inadequate checking of user input and the use of dynamic SQL queries are what make an application vulnerable to these attacks. The syntax of the input entered for SQL Injection will depend on the database being used. During our application security audits we have found many applications using other databases to be vulnerable. The above example would work on SQL Server, Oracle and MySQL. This shows that the problem is with the inadequate checking of user input and the use of dynamic SQL and not the underlying database. &lt;br /&gt;
&lt;br /&gt;
==Apart from username and password which variables are candidates for SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
Any input field that makes up the where clause of a database query is a candidate for SQL Injection, eg. account numbers, and credit card numbers in the case of an online banking application. In addition to form fields, an attacker can use hidden fields and query strings also for injecting commands.&lt;br /&gt;
&lt;br /&gt;
Apart from input fields, URL parameters are also vulnerable to SQL Injection as well as other input based attacks.&lt;br /&gt;
&lt;br /&gt;
==How do we prevent SQL Injection in our applications?  ==&lt;br /&gt;
&lt;br /&gt;
It is quite simple to prevent SQL injection while developing the application. You need to check all input coming from the client before building a SQL query. The best method is to remove all unwanted input and accept only expected input. While server side input validation is the most effective method of preventing SQL Injection, the other method of prevention is not using dynamic SQL queries. This can be achieved by using stored procedures or bind variables in databases that support these features. For applications written in Java, CallableStatements and PreparedStatements can be used. For ASP applications, ADO Command Objects can be used. You can check the following article for more on SQL Injection in Oracle: http://www.integrigy.com/info/IntegrigyIntrotoSQLInjectionAttacks.pdf &lt;br /&gt;
&lt;br /&gt;
==I'm using stored procedures for authentication, am I vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Maybe, but probably no. Using stored procedures can prevent SQL Injection because the user input is no longer used to build the query dynamically. Since a stored procedure is a group of precompiled SQL statements and the procedure accepts input as parameters, a dynamic query is avoided. Although input is put into the precompiled query as is, since the query itself is in a different format, it does not have the effect of changing the query as expected. By using stored procedures we are letting the database handle the execution of the query instead of asking it to execute a query we have built. The exception to this is where the stored procedure takes a string as input and uses this string to build the query without validating it. While this is more difficult to exploit, this scenario still often leads to successful SQL Injection. This article explains how SQL Injection affects stored procedures in more detail: http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/&lt;br /&gt;
&lt;br /&gt;
==I'm using client side JavaScript code for checking user input. Isn't that enough?  ==&lt;br /&gt;
&lt;br /&gt;
No. Although client side checking disallows the attacker to enter malicious data directly into the input fields, that alone is not enough to prevent SQL Injection. Client side scripts only check for input in the browser. But this does not guarantee that the information will remain the same till it reaches the server. To bypass client side JavaScript, the attacker can trap the request in a proxy (eg. WebScarab, [http://www.parosproxy.org Paros]) after it leaves the browser and before it reaches the server and there he can alter input fields. The attacker can also inject commands into the querystring variables which are not checked by the client side scripts, or could disable JavaScript rendering client-side scripting useless.&lt;br /&gt;
&lt;br /&gt;
==Are Java servlets vulnerable to SQL injection?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, they are if the user input is not checked properly, and if they build SQL queries dynamically. But Java servlets also have certain features that prevent SQL Injection like CallableStatements and PreparedStatements. Like stored procedures and bind variables, they avoid the need of dynamic SQL statements.&lt;br /&gt;
&lt;br /&gt;
==Can an automated scanner discover SQL Injection? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes yes, sometimes no. Whether a scanner can discover SQL injection or not depends on a variety of factors: the discovery technique used, the response from the application when a malformed SQL snippet is added, and some luck. Specifically, scanners that use Blind SQL Injection are most likely to detect SQL Injection. Scanners that claim hundreds of test cases for SQL Injection are misleading. This entry from the [http://www.plynt.com/resources/learn/tools/do_scanners_catch_sql_injectio_1/  Penetration Testing Learning Center] explains this in detail.&lt;br /&gt;
&lt;br /&gt;
=Variable Manipulation  =&lt;br /&gt;
&lt;br /&gt;
==Why can't I trust the information coming from the browser?  ==&lt;br /&gt;
&lt;br /&gt;
There are chances that the information is modified before it reaches the server. Attackers browsing the site can manipulate the information in a GET or POST request. There are a number of HTTP/HTTPS proxy tools like [http://www.mavensecurity.com/achilles Achilles], Paros, WebScarab, etc which are capable of intercepting all this information and allow the attacker running the tool to modify it. Also, the information that the user sees or provides on a web page has to travel through the internet before it reaches the server. Although the client and the server may be trusted, we cannot be sure that the information is not modified after it leaves the browser. Attackers can capture the information on the way and manipulate it.&lt;br /&gt;
&lt;br /&gt;
==What information can be manipulated by the attacker?  ==&lt;br /&gt;
&lt;br /&gt;
Manipulating the variables in the URL is simple. But attackers can also manipulate almost all information going from the client to the server like form fields, hidden fields, content-length, session-id and http methods.&lt;br /&gt;
&lt;br /&gt;
==How do attackers manipulate the information? What tools do they use?  ==&lt;br /&gt;
&lt;br /&gt;
For manipulating any information, including form fields, hidden variables and cookies, attackers use tools known as HTTP/HTTPS proxy tools. Once the browser's proxy settings are configured to go through the HTTP/HTTPS proxy, the tool can see all information flowing between the client and the server; it even allows the attacker to modify any part of the request before sending it. Some such tools are: WebScarab can be downloaded from the OWASP site. Odysseus can be found at http://www.bindshell.net/tools/odysseus Paros can be downloaded from http://www.parosproxy.org&lt;br /&gt;
&lt;br /&gt;
==I'm using SSL. Can attackers still modify information?  ==&lt;br /&gt;
&lt;br /&gt;
Although SSL provides a lot of security, SSL alone is not enough to prevent variable manipulation attacks. SSL was supposed to prevent against Man in the Middle attacks but it is vulnerable to it. To successfully carry out the MITM attack, first the attacker has to divert the victim's requests to his machine i.e. redirecting the packets meant for the server to himself. He can do this by ARP poisoning / DNS Cache poisoning. Once he is able to redirect, he can see all the requests the victim is trying to make. Now when the victim tries to establish an SSL connection with a legitimate server, he gets connected to the attacker. The attacker, during the SSL Handshaking, provides a fake certificate to the victim, which the victim accepts even though the browser warns him. Thus, the victim establishes an SSL connection with the attacker instead of the server. The attacker establishes a different SSL connection with that legitimate server, which the victim was trying to connect. Now all data flow between the victim and the server will be routed through the attacker and the attacker can see all data the victim (as well as the server) sends. This is because the victim will encrypt all data with the attacker's public key, which the attacker can decrypt with his private key. The attacker can then manipulate all data that is passing through his machine.&lt;br /&gt;
&lt;br /&gt;
==Is there some way to prevent these proxy tools from editing the data?  ==&lt;br /&gt;
&lt;br /&gt;
The main threat these proxy tools pose is editing the information sent from the client to the server. One way to prevent it is to sign the message sent from the client with a Java Applet downloaded onto the client machine. Since the applet we developed will be the one validating the certificate and not the browser, a proxy tool will not be able to get in between the client and the server with a fake certificate. The applet will reject the fake certificate. The public key of this certificate can then be used to digitally sign each message sent between the client and the server. An attacker would then have to replace the embedded certificate in the applet with a fake certificate to succeed - that raises the barrier for the attacker. &lt;br /&gt;
&lt;br /&gt;
=Browser Cache  =&lt;br /&gt;
&lt;br /&gt;
==How can the browser cache be used in attacks?  ==&lt;br /&gt;
&lt;br /&gt;
The browser has a capability to temporarily store some of the pages browsed. These cached files are stored in a folder, like the Temporary Internet Files folder in the case of Internet Explorer. When we ask for these pages again, the browser displays them from its cache. This is much faster than downloading the page from the server. Let's consider the particular scenario where a user has logged in to an application with username and password. The user browses the different pages which contain sensitive information. Let's suppose a page with the user's credit card information gets cached in the browser and the user logs out of the application. Now suppose the attackers access the same machine and searches through the Temporary Internet Files, they will get the credit card details. The attackers do not need to know the username and password of the user to steal the information. &lt;br /&gt;
&lt;br /&gt;
==How do I ensure that sensitive pages are not cached on the user's browser?  ==&lt;br /&gt;
&lt;br /&gt;
The response header sent from the server has some cache control directives that can be set from your code. These directives control the caching of content on any cache. The directives to be set are Cache-Control : no-cache or Cache-Control : no-store. But since legacy HTTP 1.0 servers do not support the Cache-Control headers, HTTP Pragma: no-cache header can be used. However, pragma no-cache can prevent caching only if it is used for ssl page. For a non-ssl page, it is eqivalent to 'Expires = -1'.&lt;br /&gt;
&lt;br /&gt;
==What is the best way to implement Pragma: No-cache?  ==&lt;br /&gt;
&lt;br /&gt;
Pragma: No-cache directive is used in the meta tag in the header, which is normally at the beginning of an HTML webpage. When an HTML code is parsed (in a top-to-bottom approach), the browser looks for the presence of the page in the cache as soon as it reads the Pragma directive. But since at that moment the page has not been cached (a webpage gets cached only after it has filled at least 32kb of the buffer), the browser will not clear the cache and it will go ahead with parsing the rest of the code. As a result, all the contents of webpage that are loaded after the parsing of Pragma get cached. The best way to implement Pragma: No-cahce is to place another header just before the html code ends. This way, the browser will parse the pragma no-cache directive after the comlete page has been loaded.&lt;br /&gt;
&lt;br /&gt;
==What's the difference between the cache-control directives: no-cache, and no-store?  ==&lt;br /&gt;
&lt;br /&gt;
The no-cache directive in a response indicates that the response must not be used to serve a subsequent request i.e. the cache must not display a response that has this directive set in the header but must let the server serve the request. The no-cache directive can include some field names; in which case the response can be shown from the cache except for the field names specified which should be served from the server. The no-store directive applies to the entire message and indicates that the cache must not store any part of the response or any request that asked for it. &lt;br /&gt;
&lt;br /&gt;
==Am I totally safe with these directives?  ==&lt;br /&gt;
&lt;br /&gt;
No. But generally, use both Cache-Control: no-cache, no-store and Pragma: no-cache, in addition to Expires: 0 (or a sufficiently backdated GMT date such as the UNIX epoch).  Non-html content types like pdf, word documents, excel spreadsheets, etc often get cached even when the above cache control directives are set (although this varies by version and additional use of must-revalidate, pre-check=0, post-check=0, max-age=0, and s-maxage=0 in practice can sometimes result at least in file deletion upon browser closure in some cases due to browser quirks and HTTP implementations). Also, 'Autocomplete' feature allows a browser to cache whatever the user types in an input field of a form. To check this, the form tag or the individual input tags should include 'Autocomplete=&amp;quot;Off&amp;quot; ' attribute. However, it should be noted that this attribute is non-standard (although it is supported by the major browsers) so it will break XHTML validation.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about caching?  ==&lt;br /&gt;
&lt;br /&gt;
Some useful links that talk about caching are - Caching Tutorial for Web Authors and Webmasters by Mark Nottingham at http://www.mnot.net/cache_docs/ and HTTP RFC (sec14.9.1) at http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;br /&gt;
&lt;br /&gt;
=Cross Site Scripting  =&lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Scripting?  ==&lt;br /&gt;
&lt;br /&gt;
Cross Site scripting (XSS) is a type of attack that can be carried out to steal sensitive information belonging to the users of a web site. This relies on the server reflecting back user input without checking for embedded javascript. This can be used to steal cookies and session IDs. Let's see how it works. We would all have come across the following situation sometime - we type a URL in the browser, say www.abcd.com/mypage.asp, and receive an error page that says &amp;quot;Sorry www.abcd.com/mypage.asp does not exist&amp;quot; or a page with a similar message. In other words, pages that display the user input back on the browser. Pages like this could be exploited using XSS. Instead of a normal input, think what will happen if the input contains a script in it. While reflecting back the input, instead of rendering it as normal HTML output, the browser treats it as a script and executes it. This script could contain some malicious code. The attackers can send a link that contains a script as part of the URL to a user. When the user clicks it, the script gets executed on the user's browser. This script may have been written to collect important information about the user and send it to the attacker. Kevin Spett's paper Cross Site Scripting, Are your web applications vulnerable? is a good source of information on this topic and is available at http://www.spidynamics.com/whitepapers/SPIcross-sitescripting.pdf The Cross Site Scripting FAQ at CGI Security is another good place to learn more on XSS. &lt;br /&gt;
&lt;br /&gt;
==What information can an attacker steal using XSS?  ==&lt;br /&gt;
&lt;br /&gt;
The attackers can steal the session ID of a valid user using XSS. The session ID is very valuable because it is the secret token that the user presents after login as proof of identity until logout. If the session ID is stored in a cookie, the attackers can write a script which will run on the user's browser, query the value in the cookie and send it to the attackers. The attackers can then use the valid session ID to browse the site without logging in. The script could also collect other information from the page, including the entire contents of the page. &lt;br /&gt;
&lt;br /&gt;
==Apart from mailing links of error pages, are there other methods of exploiting XSS?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are other methods. Let's take the example of a bulletin board application that has a page where data entered by one user can be viewed by other users. The attackers enter a script into this page. When a valid user tries to view the page, the script gets executed on the user's browser. It will send the user's information to the attackers. &lt;br /&gt;
&lt;br /&gt;
==How can I prevent XSS?  ==&lt;br /&gt;
&lt;br /&gt;
XSS can be prevented while coding the application. You should be validating all input and output to and from the application and escape all special characters that may be used in a script. If the code replaces the special characters by the following before displaying the output, XSS can be prevented to some extent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;   &amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;   &amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
(   &amp;amp;*40; &lt;br /&gt;
&lt;br /&gt;
)   &amp;amp;*41; &lt;br /&gt;
&lt;br /&gt;
*   &amp;amp;*35; &lt;br /&gt;
&amp;amp;   &amp;amp;*38;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gunter Ollmann has written an excellent paper on the use of special characters in XSS attacks. For instance, the above technique of escaping special characters cannot protect against a script injected like &amp;quot;javascript:self.location.href = 'www.evil.org' &amp;quot; as this script does not use any of the special characters.&lt;br /&gt;
&lt;br /&gt;
==Can XSS be prevented without modifying the source code?  ==&lt;br /&gt;
&lt;br /&gt;
There is a method that requires minimal coding as compared to performing input, output validation to prevent the stealing of cookies by XSS. Internet Explorer 6 has an attribute called HTTP Only that can be set for cookies. Using this attribute makes sure that the cookie can not be accessed by any scripts. More details are available at the MSDN site on httpcookies at http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_cookies.asp Mozilla also has plans to implement a similar feature. Researchers have found a method to beat this. It is known as Cross Site Tracing. &lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Tracing (XST)? How can it be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
Attackers are able to bypass the HTTP Only attribute to steal cookie information by Cross Site tracing (XST). TRACE is a HTTP method that can be sent to the server. The server sends back anything included in the TRACE request back to the browser. In a site that uses cookies, the cookie information is sent to the server in each request. If we send a TRACE request in a URL of such a site, the server will send back all cookie information to the browser. Now imagine a situation similar to the one described in XSS but the site in this case is using the HTTP Only cookies. The attackers make a valid user click on a link that contains a script that calls the TRACE method. When the user clicks on the link the TRACE request as well as all the cookie information is sent to the server. The server then sends back the cookie information back to the script in the browser. Suppose that the malicious script also contains code to send this information to the attackers. The attackers have succeeded again in stealing the cookies although HTTP Only Cookies were used. To summarize, HTTP Only cookies prevent the JavaScript from directly accessing the cookies but the attacker was able to retrieve it through an indirect method. XST can be prevented by disabling the TRACE method on the web server. This paper by Jeremiah Grossman discusses XST in greater detail http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf &lt;br /&gt;
&lt;br /&gt;
=Web Server Fingerprinting  =&lt;br /&gt;
&lt;br /&gt;
==How do attackers identify which web server I'm using?  ==&lt;br /&gt;
&lt;br /&gt;
Identifying the application running on a remote web server is known as fingerprinting the server. The simplest way to do this is to send a request to the server and see the banner sent in the response. Banners will generally have the server name and the version number in it. We can address this problem by either configuring the server not to display the banner at all or by changing it to make the server look like something else.&lt;br /&gt;
&lt;br /&gt;
==How can I fake the banners or rewrite the headers from my web server?  ==&lt;br /&gt;
&lt;br /&gt;
There are a number of tools that help in faking the banners. URLScan is a tool that can change the banner of an IIS web server. http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/tools/URLScan.asp mod_security has a feature for changing the identity of the Apache web server. It can be found at http://www.modsecurity.org/ Servermask for faking banners of IIS, can be found at http://www.servermask.com/ &lt;br /&gt;
&lt;br /&gt;
==Once I fake the banners, can my web server still be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Yes. Unfortunately there are tools that fingerprint the web server without relying on the banners. Different web servers may implement features not specified in HTTP RFCs differently. Suppose we make a database of these special requests and the responses of each web server. We can now send these requests to the web server we want to fingerprint and compare the responses with the database. This is the technique used by tools like Fire &amp;amp; Water. This tool can be found at http://www.ntobjectives.com/products/firewater/ There is a paper by Saumil Shah that discusses the tool httprint at http://net-square.com/httprint/httprint_paper.html httprint can be found at http://net-square.com/httprint/ &lt;br /&gt;
&lt;br /&gt;
==A friend told me it's safer to run my web server on a non-standard port. Is that right?  ==&lt;br /&gt;
&lt;br /&gt;
A web server generally needs to be accessed by a lot of people on the internet. Since it normally runs on port 80 and all browsers are configured to access port 80 of the web server, users are able to browse the site. If we change the port, the users will have to specify the port in addition to the domain name. But this is a good idea for an intranet application where all users know where to connect. It is more secure since the web server will not be targeted by automated attacks like worms that scan port 80 and other standard ports. &lt;br /&gt;
&lt;br /&gt;
==Should I really be concerned that my web server can be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Well, there are two schools of thought here. According to the first school, yes you should take precaution against fingerprinting as correctly identiying the web server maybe the first step in a more dangerous attack. Once attackers have found out that the web server is say IIS 5, they will search for known vulnerabilities for IIS 5. If the web server is not patched for all known vulnerabilities or the attackers find one for which a patch has not been released yet, there is nothing to stop them from attacking it. Also automated tools and worms can be fooled by changing the version information. Some determined and focused attackers might go to additional lengths to identify the server but the hurdles that the attackers have to overcome have increased when it's more difficult to fingerprint the web server name and version. Jeremiah Grossman pointed out the other school of thought. Evasive measures are futile as any scanner targeting a web site, will normally not care what the web server is. The scanner will run ALL its tests no matter if they apply to the system or not. This is a typical shotgun approach. A bad guy targeting the site might be hampered by not knowing the exact version, but if he's determined he would still try out all related exploits and try to break in. &lt;br /&gt;
&lt;br /&gt;
=Testing  =&lt;br /&gt;
&lt;br /&gt;
==I want to chain my proxy tool with a proxy server; are there tools that let me do that?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are several tools that allow proxy chaining. Some of these are: WebScarab - http://www.owasp.org/development/webscarab Exodus - http://home.intekom.com/rdawes/exodus.html Odysseus - http://www.wastelands.gen.nz/odysseus/index.php &lt;br /&gt;
&lt;br /&gt;
==Can't web application testing be automated? Are there any tools for that?  ==&lt;br /&gt;
&lt;br /&gt;
There are tools that scan applications for security flaws. But these tools can only look for a limited number of vulnerabilities, and do not find all the problems in the application. Moreover, a lot of attacks require understanding of the business context of the application to decide on the variables to manipulate in a particular request, which a tool is incapable of doing. A presentation by Jeremiah Grossman of White Hat Security which talks about the [http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-grossman-up.pdf limitations of automated scanning]. &lt;br /&gt;
&lt;br /&gt;
This piece explains [http://www.plynt.com/resources/learn/tools/what_cant_a_scanner_find_1/ what a scanner can't find].&lt;br /&gt;
&lt;br /&gt;
In our tests using a slightly modified WebGoat the best Black-box scanning tool found less than 20% of the issues ! Some tools for automated scanning are: SpikeProxy, open source and freely available at http://www.immunitysec.com/spikeproxy.html WebInspect, can be found at http://www.spidynamics.com/productline/WE_over.html&lt;br /&gt;
&lt;br /&gt;
==Where can I try out my testing skills? Is there a sample application I can practice with?  ==&lt;br /&gt;
&lt;br /&gt;
OWASP provides a sample application that can be used for this purpose called . As the site says, the WebGoat project's goal is to teach web security in an interactive teaching environment. There are lessons on most of the common vulnerabilities. Another interesting site is Hackingzone which has a game on SQL Injection at http://www.hackingzone.org/sql/index.php &lt;br /&gt;
&lt;br /&gt;
==Are there source code scanning tools for .NET languages, Java, PHP etc that predict vulnerabilities in the source code?  ==&lt;br /&gt;
&lt;br /&gt;
Rough Auditing Tool for Security (RATS) is a tool that scans the source code for security flaws in C, C++, Python, Perl and PHP programs. It can be found at http://code.google.com/p/rough-auditing-tool-for-security/downloads/list FX Cop was created by the Microsoft Team at the GotDotNet community site to check for the .NET Frameowork guidelines which include security. Prexis is a commercial source code and run-time analyzer. Flawfinder is a static source code analyzer. Compaq ESC is a run-time analyzer for Java. Parasoft AEP is a commercial source code analyzer for Java. Fortify SCA from Fortify Software is another source code analyzer that supports mixed language analysis of C, C++, C#, ASP.NET, Java, JSP, PL/SQL, VB.NET, XML, etc. Secure Coding plugins are also available. Similar source code analyzers are Klocwork K7 for C, C++ and Java; Coverity Prevent for detecting security violations and defects in code; Ounce Solutions for C, C++, C#, ASP.NET, Java and JSP. We would like to know about more tools for scanning source code. If you know about any, please inform us and we'll add to this FAQ&lt;br /&gt;
&lt;br /&gt;
==Can non-HTTP protocols also be intercepted and played with like this?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, Interactive TCP Replay is a tool that acts as a proxy for non-HTTP applications and also allows modifying the traffic. It allows editing of the messages in a hex editor. ITR also logs all the messages passing between the client and the server. It can use different types of character encoding like ASCII or EBCDIC for editing and logging. More information on this can be found at http://www.webcohort.com/web_application_security/research/tools.html &lt;br /&gt;
&lt;br /&gt;
=Cryptography/SSL  =&lt;br /&gt;
&lt;br /&gt;
==What is SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer (SSL) gives us assurance of two things. Firstly when a client connects to a web server, the client can be sure that it is talking to the right server by checking the certificate the server sends it. Secondly, SSL assures you of the confidentiality of the data, as the client and the server exchange encrypted messages that cannot be understood by anybody else. This is how SSL works: When the client requests for a SSL page, the server sends a certificate that it has obtained from a trusted certificate authority. This certificate contains the public key of the server. After satisfying itself that the certificate is correct and the server is a genuine one, the client generates one random number, the session key. This key is encrypted by the public key of the server and sent across. The server decrypts the message with its private key. Now both sides have a session key known only to the two of them. All communication to and fro is encrypted and decrypted with the session key. An interesting link on SSL is http://www.rsasecurity.com/standards/ssl/basics.html &lt;br /&gt;
&lt;br /&gt;
==Should I use 40-bit or 128-bit SSL?  ==&lt;br /&gt;
&lt;br /&gt;
There are 2 strengths in SSL - 40-bit and 128-bit. These refer to the length of the secret key used for encrypting the session. This key is generated for every SSL session and is used to encrypt the rest of the session. The longer the key the more difficult it is to break the encrypted data. So, 128-bit encryption is much more secure than 40-bit. Most browsers today support 128-bit encryption. There are a few countries which have browsers with only 40-bit support. In case you are using 40-bit SSL, you may need to take further precautions to protect sensitive data. Salted hash for transmitting passwords is a good technique. This ensures that the password can not be stolen even if the SSL key is broken. &lt;br /&gt;
&lt;br /&gt;
==Is 40-bit SSL really unsafe?  ==&lt;br /&gt;
&lt;br /&gt;
40-bit SSL is not really unsafe. It's just that it is computationally feasible to break the key used in 40-bit but not the key used in 128-bit. Even though 40-bit can be broken, it takes a fairly large number of computers to break it. Nobody would even attempt to do that for a credit card number or the like. But there are claims of breaking the 40-bit RC4 key in a few hours. So depending on the data your application deals with, you can decide on the SSL strength. Using 128-bit is definitely safer.&lt;br /&gt;
&lt;br /&gt;
With home computers gtting faster day by day, a dedicated, expensive and very fast computer can break 40-bit encryption in few minutes (ideally testing a million keys per second). On the other hand, 128-bit encryotion will have about 339,000,000,000,000,000,000,000,000,000,000,000 (Couple of Trillions or 2^128) possible key combinations and it will take around 1000 Years to break 128-bit encryptions with the help of a cluster of very fast computers.&lt;br /&gt;
&lt;br /&gt;
==What all are encrypted when I use SSL? Is the page request also encrypted?  ==&lt;br /&gt;
&lt;br /&gt;
After the initial SSL negotiation is done and the connection is on HTTPS, everything is encrypted including the page request. So any data sent in the query string will also be encrypted. &lt;br /&gt;
&lt;br /&gt;
==Which cryptographic algorithms do SSL use?  ==&lt;br /&gt;
&lt;br /&gt;
SSL supports a number of cryptographic algorithms. During the initial &amp;quot;handshaking&amp;quot; phase, it uses the RSA public key algorithm. For encrypting the data with the session key the following algorithms are used - RC2, RC4, IDEA, DES, triple-DES and MD5 message digest algorithm. &lt;br /&gt;
&lt;br /&gt;
==I want to use SSL. Where do I begin?  ==&lt;br /&gt;
&lt;br /&gt;
There are several Certificate Authorities that you can buy a SSL certificate from. Whichever CA you choose, the basic procedure will be as follows - &lt;br /&gt;
&lt;br /&gt;
* Create key pair for the server &lt;br /&gt;
* Create the Certificate Signing Request. This will require you to provide certain details like location and fully qualified domain name of the server. &lt;br /&gt;
* Submit the CSR to the CA along with documentary proof of identity. &lt;br /&gt;
* Install the certificate sent by the CA&lt;br /&gt;
The first two steps are done from the web server. All servers have these features. While installing the certificate issued by the CA, you will have to specify which web pages are to be on SSL.&lt;br /&gt;
&lt;br /&gt;
A good starting point for working on POC in a Windows development environment could be: &amp;quot;HOW TO: Secure XML Web Services with Secure Socket Layer in Windows 2000&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;q307267&amp;amp;sd=tech&lt;br /&gt;
&lt;br /&gt;
=Cookies and Session Management  =&lt;br /&gt;
&lt;br /&gt;
==Are there any risks in using persistent vs non-persistent cookies?  ==&lt;br /&gt;
&lt;br /&gt;
Persistent cookies are data that a web site places on the user's hard drive (or equivalent) for maintaining information over more than one browser session. This data will stay in the user's system and can be accessed by the site the next time the user browses the site. Non-persistent cookies on the other hand are those that are used only in the browser session that creates it. They stay only in the memory of the machine and are not persisted on the hard disk. The security risk with persistent cookies is that they are generally stored in a text file on the client and an attacker with access to the victim's machine can steal this information. &lt;br /&gt;
&lt;br /&gt;
==Can another web site steal the cookies that my site places on a user's machine?  ==&lt;br /&gt;
&lt;br /&gt;
No, it is not possible for a website to access another site's cookies. Cookies have a domain attribute associated with them. Only a request coming from the domain specified in the attribute can access the cookie. This attribute can have only one value. &lt;br /&gt;
&lt;br /&gt;
==Which is the best way to transmit session ids- in cookies, or URL or a hidden variable?  ==&lt;br /&gt;
&lt;br /&gt;
Transmitting session IDs in the URL can lead to several risks. Shoulder surfers can see the session ID; if the URL gets cached on the client system, the session ID will also be stored; the session ID will get stored in the referrer logs of other sites. Hidden variables are not always practical as every request might not be a POST. Cookies are the safest method as cookies do not get cached, are not visible in the W3C or referrer logs, and most users anyway accept cookies. &lt;br /&gt;
&lt;br /&gt;
==What are these secure cookies?  ==&lt;br /&gt;
&lt;br /&gt;
A cookie can be marked as &amp;quot;secure&amp;quot; which ensures the cookie is used only over SSL sessions. If &amp;quot;secure&amp;quot; is not specified, the cookie will be sent unencrypted over non-SSL channels. Sensitive cookies like session tokens should be marked as secure if all pages in the web site requiring session tokens are SSL-enabled. One thing to keep in mind here is that images are generally not downloaded over SSL and they usually don't require a session token to be presented. By setting the session cookie to be secure, we ensure that the browser does not send the cookie while downloading the image over the non-SSL connection.&amp;lt;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==If I use a session ID that is a function of the client's IP address, will session hijacking be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
An attacker can hijack another user's session by stealing the session token. Methods have been suggested to prevent the session from being hijacked even if the session token is stolen. For instance, using a session token that is a function of the user's IP address. In this approach, even if the attacker stole the token, he would need the same IP address as the user to successfully hijack a session. However, session hijacking can still be possible. Suppose the attacker is on the same LAN as the user and uses the same Proxy IP as the user to access the web site. The attacker can still steal the session if he is able to sniff the session token. It may also be not possible to implement this if the IP of the client changes during a session, making the session invalid if the token is tied to the initial IP address. This may happen if the client is coming from behind a bank of proxy servers. &lt;br /&gt;
&lt;br /&gt;
==How about encrypting the session id cookies instead of using SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Encrypting just the session ID over a non-SSL connection will not serve any purpose. Since the session ID will be encrypted once and the same value will be sent back and forth each time, an attacker can use the encrypted value to hijack the session. &lt;br /&gt;
&lt;br /&gt;
==What is the concept of using a page id, in addition to the session id?  ==&lt;br /&gt;
&lt;br /&gt;
A Session ID or token has the lifetime of a session and is tied to the logged in user. A page ID or token has a lifetime of a page and is tied to a page that is served. It is a unique token given when a page is downloaded and is presented by the user when accessing the next page. The server expects a particular value for the user to access the next page. Only if the token submitted matches what the server is expecting is the next page served. An application can use this to ensure that a user accesses pages only in the sequence determined by the application. The user cannot paste a deep URL in the browser and skip pages just because he has a session token, as the page token would not be authorized to access the deeper URL directly. Good Read: [http://palisade.plynt.com/issues/2005Aug/page-tokens/ Secure your sessions with Page Tokens]&lt;br /&gt;
&lt;br /&gt;
=Logging and Audit Trails  =&lt;br /&gt;
&lt;br /&gt;
==What are these W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
W3C is a logging format used for Web server log files. W3C logs record access details of each request: the timestamp, source IP, page requested, the method used, http protocol version, browser type, the referrer page, the response code etc. Note that these are access logs, and so a separate record is maintained for each request. When a page with multiple gif files is downloaded, it would be recorded as multiple entries in the W3C log; so, W3C logs tend to be voluminous. &lt;br /&gt;
&lt;br /&gt;
==Do I need to have logging in my application even if I've W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, it's important that your application maintains &amp;quot;application level&amp;quot; logs even when W3C logging is used. As W3C logs contain records for every http request, it is difficult (and, at times impossible) to extract a higher level meaning from these logs. For instance, the W3C logs are cumbersome to identify a specific session of user and the activities that the user performed. It's better that the application keeps a trail of important activities, rather than decode it from W3C logs. &lt;br /&gt;
&lt;br /&gt;
==What should I log from within my application?  ==&lt;br /&gt;
&lt;br /&gt;
Keep an audit trail of activity that you might want to review while troubleshooting or conducting forensic analysis. Please note that it is inadvisable to keep sensitive business information itself in these logs, as administrators have access to these logs for troubleshooting. Activities commonly kept track of are: &lt;br /&gt;
&lt;br /&gt;
* Login and logout of users &lt;br /&gt;
* Critical transactions (eg. fund transfer across accounts) &lt;br /&gt;
* Failed login attempts &lt;br /&gt;
* Account lockouts &lt;br /&gt;
* Violation of policies &lt;br /&gt;
The data that is logged for each of these activities usually include: &lt;br /&gt;
&lt;br /&gt;
* User ID &lt;br /&gt;
* Time stamp &lt;br /&gt;
* Source IP &lt;br /&gt;
* Error codes, if any &lt;br /&gt;
* Priority &lt;br /&gt;
==Should I encrypt my logs? Isn't that a performance hit?  ==&lt;br /&gt;
&lt;br /&gt;
Encryption is required when information has to be protected from being read by unauthorized users. Yes, encryption does take a performance hit, so if your logs do not contain sensitive information you might want to forego encryption. However, we strongly urge that you protect your logs from being tampered by using digital signatures. Digital signatures are less processor intensive than encryption and ensure that your logs are not tampered. &lt;br /&gt;
&lt;br /&gt;
==Can I trust the IP address of a user I see in my audit logs? Could a user be spoofing/impersonating their IP address?  ==&lt;br /&gt;
&lt;br /&gt;
A bad guy who wants to hide his actual IP address might use a service like anonymizer, or use open HTTP relays. [HTTP open relays are improperly configured web servers on the web that are used as a HTTP proxy to connect to other sites.] In such cases, the IP address you see in your log files will be those of these services or the open relay that is being used. So, the IP address you see in your log files might not always be trustworthy. &lt;br /&gt;
&lt;br /&gt;
=Miscellaneous  =&lt;br /&gt;
&lt;br /&gt;
==What are Buffer Overflows? ==&lt;br /&gt;
&lt;br /&gt;
Buffer overflow vulnerability affects the web applications that require user input. The application stores the input in a buffer which is of a fixed size, as defined by the programmer. When the input that is sent to the application is more than the buffer capacity and the buffers are left unchecked, buffer overflow occurs. The severity depends on the user input. If a malicious code executes as a result of the overflow, it can even compromise the whole system.&lt;br /&gt;
To learn more, please read the OWASP article on [http://www.owasp.org/index.php/Buffer_Overflow buffer overflows.]&lt;br /&gt;
&lt;br /&gt;
==What are application firewalls? How good are they really?  ==&lt;br /&gt;
&lt;br /&gt;
Application firewalls analyze the requests at the application level. These firewalls are used for specific applications like a web server or a database server. The web application firewalls protect the web server from HTTP based attacks. They monitor the requests for attacks that involve SQL Injection, XSS, URL encoding etcetera. However, application layer firewalls cannot protect against attacks that require an understanding of the business context - this includes most attacks that rely on variable manipulation. Some application firewalls are: Netcontinuum's NC-1000 Kavado Inc.'s InterDo Teros Inc.'s Teros-100 APS&lt;br /&gt;
&lt;br /&gt;
==What is all this about &amp;quot;referrer logs&amp;quot;, and sensitive URLs?  ==&lt;br /&gt;
&lt;br /&gt;
The HTTP header contains a field known as Referrer. For visiting a web page we may either: &lt;br /&gt;
&lt;br /&gt;
* Type its URL directly into the address bar of the browser &lt;br /&gt;
* Click a link on some other page that brings us there &lt;br /&gt;
* Be redirected there by some page. &lt;br /&gt;
In the first case, the referrer field will be empty but in the other two cases it will contain the URL of the previous page. The URL of the first page will get stored in the web server access logs of the second page when the user reaches the second page from the first page. Now suppose, the two pages belong to different sites and the first URL contains sensitive information like a user's session ID. If the second site belongs to attackers, they can obtain this information by just going through the logs. Information in the URLs will get stored in the referrer logs as well as the history of the browser. Therefore, we should be careful not to have any sensitive information in the URL. &lt;br /&gt;
&lt;br /&gt;
==I want to use the most secure language; which language do you recommend?  ==&lt;br /&gt;
&lt;br /&gt;
Any language can be used since secure programming practices are what make applications safe. Most security techniques can be implemented in any language. Our advice would be to use any language you are comfortable with. But some languages like Java have additional features like bind variables that aid security; you could use those additional features if you decide to program in that language. &lt;br /&gt;
&lt;br /&gt;
==What are the good books to learn secure programming practices?  ==&lt;br /&gt;
&lt;br /&gt;
The OWASP Guide to Building Secure Web Application and Web Services is a good guide for web application developers. You can download it from http://www.owasp.org/documentation/guide Writing Secure Code by Michael Howard and David LeBlanc has a chapter on Securing Web-Based Services. More information on this book can be found at: http://www.microsoft.com/mspress/books/toc/5612.asp Secure Programming for Linux and Unix HOWTO by David Wheeler talks about writing secure applications including web applications; it also specifies guidance for a number of languages. The book can be found at: http://www.dwheeler.com/secure-programs&lt;br /&gt;
&lt;br /&gt;
Another good book on application security, which also covers some web service specific topics: 19 Deadly Sins of Software Security, by: Michael Howard, David LeBlanc and John Viega (http://books.mcgraw-hill.com/getbook.php?isbn=0072260858).&lt;br /&gt;
&lt;br /&gt;
==Are there any training programs on secure programming that I can attend?  ==&lt;br /&gt;
&lt;br /&gt;
Microsoft offers training programs on Developing Security-Enhanced Web Applications and Developing and Deploying Secure Microsoft .NET Framework Application. More information can be found at http://www.microsoft.com/traincert/syllabi/2300AFinal.asp and http://www.microsoft.com/traincert/syllabi/2350BFinal.asp Foundstone offers secure coding training through Global Knowledge Aspect Security offers a similar course. &lt;br /&gt;
&lt;br /&gt;
OWASP_FAQ_Ver3.doc&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156407</id>
		<title>OWASP Application Security FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Application_Security_FAQ&amp;diff=156407"/>
				<updated>2013-08-04T23:37:34Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: updating specifically stale info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Login Issues  =&lt;br /&gt;
&lt;br /&gt;
==What are the best practices I should remember while designing the login pages?  ==&lt;br /&gt;
&lt;br /&gt;
* From the login page, the user should be sent to a page for authentication. Once authenticated, the user should be sent to the next page. This is explained in the answer to the next question. &lt;br /&gt;
* The password should never be sent in clear text (unencrypted) because it can be stolen by sniffing; saving the password in clear text in the database is dangerous too. The best method of sending passwords is the Salted MD5 hashing technique and the passwords should be hashed and then stored in the database.&lt;br /&gt;
* The best way to manage sessions would be to use one session token with two values during authentication. One value before authentication and one after.&lt;br /&gt;
&lt;br /&gt;
==Is it really required to redirect the user to a new page after login?  ==&lt;br /&gt;
&lt;br /&gt;
Is it really required to redirect the user to a new page after login? &lt;br /&gt;
&lt;br /&gt;
Yes. Consider the application has a login page that sends the username and password as a POST request to the server. If a user clicks refresh on the second page (the page after login), the same request including the username and password in the POST will be sent again. Now suppose a valid user browses through our application and logs out, but does not close the window. The attackers come along and click the back button of the browser till they reach the second page. They only have to do a refresh and since the username and password are resubmitted and revalidated, the attackers can login as the user. Now let's assume the application has a login page which takes the user to an intermediate page for authentication. Once authenticated, the user is redirected to the second page with a session token. In this case, even if the attackers reach the second page and do a refresh, the username and password will not be resubmitted. This is so because the request that will be submitted is the one for the second page which does not contain the username and password. Therefore, it is always better to redirect the user. &lt;br /&gt;
&lt;br /&gt;
==How does the salted MD5 technique work?  ==&lt;br /&gt;
&lt;br /&gt;
Here is how the salted MD5 technique works: the database stores a MD5 hash of the password. (MD5 hash is a cryptographic technique in which the actual value can never be recovered.) When a client requests for the login page, the server generates a random number, the salt, and sends it to the client along with the page. A JavaScript code on the client computes the MD5 hash of the password entered by the user. It then concatenates the salt to the hash and re-computes the MD5 hash. This result is then sent to the server. The server picks the hash of the password from its database, concatenates the salt and computes the MD5 hash. If the user entered the correct password these two hashes should match. The server compares the two and if they match, the user is authenticated. &lt;br /&gt;
&lt;br /&gt;
==How can my &amp;quot;Forgot Password&amp;quot; feature be exploited?  ==&lt;br /&gt;
&lt;br /&gt;
The Forgot Password feature is implemented in a number of different ways. One common way is to ask the user a hint question for which the user has submitted the answer during registration. These are questions like What is your favorite color? or What is your favorite pastime? If the answer is correct, either the original password is displayed or a temporary password is displayed which can be used to log in. In this method, an attacker trying to steal the password of a user may be able to guess the correct answer of the hint question and even reset the password. &lt;br /&gt;
&lt;br /&gt;
==In &amp;quot;Forgot Password&amp;quot;, is it safe to display the old password?  ==&lt;br /&gt;
&lt;br /&gt;
If the old password is displayed on the screen, it can be seen by shoulder surfers. So it is a good idea not to display the password and let the user change to a new one. Moreover, displaying the password means it has to be stored in a recoverable form in the database which is not a good practice. If the password is stored as a one way hash in the database, the only way Forgot Password can be implemented is by letting the user reset the old password. So, it is always better to force the users reset their passwords when they forget their passwords. (A one way hash is the result obtained when we pass a string to a one way hash function. The result is such that it is impossible to get back the original value from it. Passwords are best stored as non-recoverable hashes in the database.) &lt;br /&gt;
&lt;br /&gt;
==Is there any risk in emailing the new password to the user's authorized mail id?  ==&lt;br /&gt;
&lt;br /&gt;
Emailing the actual password in clear text can be risky as an attacker can obtain it by sniffing. Also the mail containing the password might have a long life time and could be viewed by an attacker while it is lying in the mailbox of the user.&lt;br /&gt;
&lt;br /&gt;
Apart form the above threats, a malicious user can do shoulder-surfing to view the password or login credentials.&lt;br /&gt;
&lt;br /&gt;
==What is the most secure way to design the Forgot Password feature?  ==&lt;br /&gt;
&lt;br /&gt;
We should first ask the user to supply some details like personal details or ask a hint question. Then we should send a mail to the users authorized mail id with a link which will take the user to a page for resetting the password. This link should be active for only a short time, and should be SSL- enabled. This way the actual password is never seen. The security benefits of this method are: the password is not sent in the mail; since the link is active for a short time, there is no harm even if the mail remains in the mailbox for a long time. &lt;br /&gt;
&lt;br /&gt;
==How do I protect against automated password guessing attacks?  ==&lt;br /&gt;
&lt;br /&gt;
Password guessing with automated tools is a serious problem since there are a number of tools available for this purpose. These tools essentially keep trying out different passwords till one matches. Locking out the account after 5 failed attempts is a good defense against these tools. However, the important point then is how long you lock out the account for. If it is for too long, service to valid users might be denied as the attackers repeatedly lock out your users. If the time is too short say about 1-2 minutes, the tool could start again after the timeout. So the best method would be to insist on human intervention after a few failed attempts. A method used by a number of sites these days is to have the user read and enter a random word that appears in an image on the page. Since this cannot be done by a tool, we can thwart automated password guessing. The following are some tools that guess passwords of web applications: Brutus - http://www.hoobie.net/brutus/ WebCracker http://www.securityfocus.com/tools/706&lt;br /&gt;
&lt;br /&gt;
==How can I protect against keystroke loggers on the client machine?  ==&lt;br /&gt;
&lt;br /&gt;
Keystroke loggers on the end users machines can sometimes ruin all our efforts of securely transmitting and storing the passwords. The users themselves may not be aware that a key logger has been installed on their machines and records each key pressed. Since the highest risk is with the password, if we can authenticate the users without having them use the keyboard, or reveal the entire password, we solve the problem. The different ways of doing this are: &lt;br /&gt;
&lt;br /&gt;
* Having a graphical keyboard where the users can enter the characters they want by clicking the mouse on it. This is especially useful for numeric PINs. &lt;br /&gt;
* Asking the users to type a part of their password each time and not the whole password. For example you could say &amp;quot;Please enter the 1st, 3rd and 6th letters of your password&amp;quot; and this rule could be a random one each time. &lt;br /&gt;
==My site will be used from publicly shared computers. What precautions must I take?  ==&lt;br /&gt;
&lt;br /&gt;
If your application will be accessed from publicly shared computers like libraries, you could take the following precautions: &lt;br /&gt;
&lt;br /&gt;
* You can make sure your pages do not get cached on the system by setting the correct cache control directives. &lt;br /&gt;
* You could take care that no sensitive information is included in the URLs since the history of the client browser will store these. &lt;br /&gt;
* Have a graphical keyboard for entering the password or ask the user to enter a different part of the password each time. This protects the password against keystroke loggers. &lt;br /&gt;
* To prevent sniffing of passwords and replay attacks using those, you should either use SSL or salted MD5 for passwords. The clear text password in the memory should be reset after computing the MD5. &lt;br /&gt;
=SQL Injection  =&lt;br /&gt;
&lt;br /&gt;
==What is SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
SQL Injection is a technique by which attackers can execute SQL statements of their choice on the backend database by manipulating the input to the application. Let's understand SQL Injection through the example of a login page in a web application where the database is SQL Server. The user needs to input Username and Password in the text boxes in Login.asp page. Suppose the user enters the following: Username : Obelix and Password : Dogmatix This input is then used to build a query dynamically which would be something like: SELECT * FROM Users WHERE username= 'Obelix' and password='Dogmatix' This query would return to the application a row from the database with the given values. The user is considered authenticated if the database returns one or more rows to the application. Now, suppose an attacker enters the following input in the login page: Username : ' or 1=1-- The query built will look like this: SELECT * FROM Users WHERE username='' or 1=1-- and password='' -- in SQL Server is used to comment out the rest of the line. So, our query is now effectively: SELECT * FROM Users WHERE username='' or 1=1 This query will look in the database for a row where either username is blank or the condition 1=1 is met. Since the latter always evaluates to true, the query will return all rows of the Users table and the user is authenticated. The attacker has been successful in logging into the application without a username and password. You can read more on this at the Securiteam site: http://www.securiteam.com/securityreviews/5DP0N1P76E.html &lt;br /&gt;
&lt;br /&gt;
==Is it just ASP and SQL Server or are all platforms vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Almost all platforms are vulnerable to SQL Injection. Inadequate checking of user input and the use of dynamic SQL queries are what make an application vulnerable to these attacks. The syntax of the input entered for SQL Injection will depend on the database being used. During our application security audits we have found many applications using other databases to be vulnerable. The above example would work on SQL Server, Oracle and MySQL. This shows that the problem is with the inadequate checking of user input and the use of dynamic SQL and not the underlying database. &lt;br /&gt;
&lt;br /&gt;
==Apart from username and password which variables are candidates for SQL Injection?  ==&lt;br /&gt;
&lt;br /&gt;
Any input field that makes up the where clause of a database query is a candidate for SQL Injection, eg. account numbers, and credit card numbers in the case of an online banking application. In addition to form fields, an attacker can use hidden fields and query strings also for injecting commands.&lt;br /&gt;
&lt;br /&gt;
Apart from input fields, URL parameters are also vulnerable to SQL Injection as well as other input based attacks.&lt;br /&gt;
&lt;br /&gt;
==How do we prevent SQL Injection in our applications?  ==&lt;br /&gt;
&lt;br /&gt;
It is quite simple to prevent SQL injection while developing the application. You need to check all input coming from the client before building a SQL query. The best method is to remove all unwanted input and accept only expected input. While server side input validation is the most effective method of preventing SQL Injection, the other method of prevention is not using dynamic SQL queries. This can be achieved by using stored procedures or bind variables in databases that support these features. For applications written in Java, CallableStatements and PreparedStatements can be used. For ASP applications, ADO Command Objects can be used. You can check the following article for more on SQL Injection in Oracle: http://www.integrigy.com/info/IntegrigyIntrotoSQLInjectionAttacks.pdf &lt;br /&gt;
&lt;br /&gt;
==I'm using stored procedures for authentication, am I vulnerable?  ==&lt;br /&gt;
&lt;br /&gt;
Maybe, but probably no. Using stored procedures can prevent SQL Injection because the user input is no longer used to build the query dynamically. Since a stored procedure is a group of precompiled SQL statements and the procedure accepts input as parameters, a dynamic query is avoided. Although input is put into the precompiled query as is, since the query itself is in a different format, it does not have the effect of changing the query as expected. By using stored procedures we are letting the database handle the execution of the query instead of asking it to execute a query we have built. The exception to this is where the stored procedure takes a string as input and uses this string to build the query without validating it. While this is more difficult to exploit, this scenario still often leads to successful SQL Injection. This article explains how SQL Injection affects stored procedures in more detail: http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/&lt;br /&gt;
&lt;br /&gt;
==I'm using client side JavaScript code for checking user input. Isn't that enough?  ==&lt;br /&gt;
&lt;br /&gt;
No. Although client side checking disallows the attacker to enter malicious data directly into the input fields, that alone is not enough to prevent SQL Injection. Client side scripts only check for input in the browser. But this does not guarantee that the information will remain the same till it reaches the server. To bypass client side JavaScript, the attacker can trap the request in a proxy (eg. WebScarab, [http://www.parosproxy.org Paros]) after it leaves the browser and before it reaches the server and there he can alter input fields. The attacker can also inject commands into the querystring variables which are not checked by the client side scripts, or could disable JavaScript rendering client-side scripting useless.&lt;br /&gt;
&lt;br /&gt;
==Are Java servlets vulnerable to SQL injection?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, they are if the user input is not checked properly, and if they build SQL queries dynamically. But Java servlets also have certain features that prevent SQL Injection like CallableStatements and PreparedStatements. Like stored procedures and bind variables, they avoid the need of dynamic SQL statements.&lt;br /&gt;
&lt;br /&gt;
==Can an automated scanner discover SQL Injection? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes yes, sometimes no. Whether a scanner can discover SQL injection or not depends on a variety of factors: the discovery technique used, the response from the application when a malformed SQL snippet is added, and some luck. Specifically, scanners that use Blind SQL Injection are most likely to detect SQL Injection. Scanners that claim hundreds of test cases for SQL Injection are misleading. This entry from the [http://www.plynt.com/resources/learn/tools/do_scanners_catch_sql_injectio_1/  Penetration Testing Learning Center] explains this in detail.&lt;br /&gt;
&lt;br /&gt;
=Variable Manipulation  =&lt;br /&gt;
&lt;br /&gt;
==Why can't I trust the information coming from the browser?  ==&lt;br /&gt;
&lt;br /&gt;
There are chances that the information is modified before it reaches the server. Attackers browsing the site can manipulate the information in a GET or POST request. There are a number of HTTP/HTTPS proxy tools like [http://www.mavensecurity.com/achilles Achilles], Paros, WebScarab, etc which are capable of intercepting all this information and allow the attacker running the tool to modify it. Also, the information that the user sees or provides on a web page has to travel through the internet before it reaches the server. Although the client and the server may be trusted, we cannot be sure that the information is not modified after it leaves the browser. Attackers can capture the information on the way and manipulate it.&lt;br /&gt;
&lt;br /&gt;
==What information can be manipulated by the attacker?  ==&lt;br /&gt;
&lt;br /&gt;
Manipulating the variables in the URL is simple. But attackers can also manipulate almost all information going from the client to the server like form fields, hidden fields, content-length, session-id and http methods.&lt;br /&gt;
&lt;br /&gt;
==How do attackers manipulate the information? What tools do they use?  ==&lt;br /&gt;
&lt;br /&gt;
For manipulating any information, including form fields, hidden variables and cookies, attackers use tools known as HTTP/HTTPS proxy tools. Once the browser's proxy settings are configured to go through the HTTP/HTTPS proxy, the tool can see all information flowing between the client and the server; it even allows the attacker to modify any part of the request before sending it. Some such tools are: WebScarab can be downloaded from the OWASP site. Odysseus can be found at http://www.bindshell.net/tools/odysseus Paros can be downloaded from http://www.parosproxy.org&lt;br /&gt;
&lt;br /&gt;
==I'm using SSL. Can attackers still modify information?  ==&lt;br /&gt;
&lt;br /&gt;
Although SSL provides a lot of security, SSL alone is not enough to prevent variable manipulation attacks. SSL was supposed to prevent against Man in the Middle attacks but it is vulnerable to it. To successfully carry out the MITM attack, first the attacker has to divert the victim's requests to his machine i.e. redirecting the packets meant for the server to himself. He can do this by ARP poisoning / DNS Cache poisoning. Once he is able to redirect, he can see all the requests the victim is trying to make. Now when the victim tries to establish an SSL connection with a legitimate server, he gets connected to the attacker. The attacker, during the SSL Handshaking, provides a fake certificate to the victim, which the victim accepts even though the browser warns him. Thus, the victim establishes an SSL connection with the attacker instead of the server. The attacker establishes a different SSL connection with that legitimate server, which the victim was trying to connect. Now all data flow between the victim and the server will be routed through the attacker and the attacker can see all data the victim (as well as the server) sends. This is because the victim will encrypt all data with the attacker's public key, which the attacker can decrypt with his private key. The attacker can then manipulate all data that is passing through his machine.&lt;br /&gt;
&lt;br /&gt;
==Is there some way to prevent these proxy tools from editing the data?  ==&lt;br /&gt;
&lt;br /&gt;
The main threat these proxy tools pose is editing the information sent from the client to the server. One way to prevent it is to sign the message sent from the client with a Java Applet downloaded onto the client machine. Since the applet we developed will be the one validating the certificate and not the browser, a proxy tool will not be able to get in between the client and the server with a fake certificate. The applet will reject the fake certificate. The public key of this certificate can then be used to digitally sign each message sent between the client and the server. An attacker would then have to replace the embedded certificate in the applet with a fake certificate to succeed - that raises the barrier for the attacker. &lt;br /&gt;
&lt;br /&gt;
=Browser Cache  =&lt;br /&gt;
&lt;br /&gt;
==How can the browser cache be used in attacks?  ==&lt;br /&gt;
&lt;br /&gt;
The browser has a capability to temporarily store some of the pages browsed. These cached files are stored in a folder, like the Temporary Internet Files folder in the case of Internet Explorer. When we ask for these pages again, the browser displays them from its cache. This is much faster than downloading the page from the server. Let's consider the particular scenario where a user has logged in to an application with username and password. The user browses the different pages which contain sensitive information. Let's suppose a page with the user's credit card information gets cached in the browser and the user logs out of the application. Now suppose the attackers access the same machine and searches through the Temporary Internet Files, they will get the credit card details. The attackers do not need to know the username and password of the user to steal the information. &lt;br /&gt;
&lt;br /&gt;
==How do I ensure that sensitive pages are not cached on the user's browser?  ==&lt;br /&gt;
&lt;br /&gt;
The response header sent from the server has some cache control directives that can be set from your code. These directives control the caching of content on any cache. The directives to be set are Cache-Control : no-cache or Cache-Control : no-store. But since legacy HTTP 1.0 servers do not support the Cache-Control headers, HTTP Pragma: no-cache header can be used. However, pragma no-cache can prevent caching only if it is used for ssl page. For a non-ssl page, it is eqivalent to 'Expires = -1'.&lt;br /&gt;
&lt;br /&gt;
==What is the best way to implement Pragma: No-cache?  ==&lt;br /&gt;
&lt;br /&gt;
Pragma: No-cache directive is used in the meta tag in the header, which is normally at the beginning of an HTML webpage. When an HTML code is parsed (in a top-to-bottom approach), the browser looks for the presence of the page in the cache as soon as it reads the Pragma directive. But since at that moment the page has not been cached (a webpage gets cached only after it has filled at least 32kb of the buffer), the browser will not clear the cache and it will go ahead with parsing the rest of the code. As a result, all the contents of webpage that are loaded after the parsing of Pragma get cached. The best way to implement Pragma: No-cahce is to place another header just before the html code ends. This way, the browser will parse the pragma no-cache directive after the comlete page has been loaded.&lt;br /&gt;
&lt;br /&gt;
==What's the difference between the cache-control directives: no-cache, and no-store?  ==&lt;br /&gt;
&lt;br /&gt;
The no-cache directive in a response indicates that the response must not be used to serve a subsequent request i.e. the cache must not display a response that has this directive set in the header but must let the server serve the request. The no-cache directive can include some field names; in which case the response can be shown from the cache except for the field names specified which should be served from the server. The no-store directive applies to the entire message and indicates that the cache must not store any part of the response or any request that asked for it. &lt;br /&gt;
&lt;br /&gt;
==Am I totally safe with these directives?  ==&lt;br /&gt;
&lt;br /&gt;
No. But generally, use both Cache-Control: no-cache, no-store and Pragma: no-cache, in addition to Expires: 0 (or a sufficiently backdated GMT date such as the UNIX epoch).  Non-html content types like pdf, word documents, excel spreadsheets, etc often get cached even when the above cache control directives are set (although this varies by version and additional use of must-revalidate, pre-check=0, post-check=0, max-age=0, and s-maxage=0 in practice can affect outcomes upon browser closure in some cases due to browser quirks and HTTP implementations). Also, 'Autocomplete' feature allows a browser to cache whatever the user types in an input field of a form. To check this, the form tag or the individual input tags should include 'Autocomplete=&amp;quot;Off&amp;quot; ' attribute. However, it should be noted that this attribute is non-standard (although it is supported by the major browsers) so it will break XHTML validation.&lt;br /&gt;
&lt;br /&gt;
==Where can I learn more about caching?  ==&lt;br /&gt;
&lt;br /&gt;
Some useful links that talk about caching are - Caching Tutorial for Web Authors and Webmasters by Mark Nottingham at http://www.mnot.net/cache_docs/ and HTTP RFC (sec14.9.1) at http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;br /&gt;
&lt;br /&gt;
=Cross Site Scripting  =&lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Scripting?  ==&lt;br /&gt;
&lt;br /&gt;
Cross Site scripting (XSS) is a type of attack that can be carried out to steal sensitive information belonging to the users of a web site. This relies on the server reflecting back user input without checking for embedded javascript. This can be used to steal cookies and session IDs. Let's see how it works. We would all have come across the following situation sometime - we type a URL in the browser, say www.abcd.com/mypage.asp, and receive an error page that says &amp;quot;Sorry www.abcd.com/mypage.asp does not exist&amp;quot; or a page with a similar message. In other words, pages that display the user input back on the browser. Pages like this could be exploited using XSS. Instead of a normal input, think what will happen if the input contains a script in it. While reflecting back the input, instead of rendering it as normal HTML output, the browser treats it as a script and executes it. This script could contain some malicious code. The attackers can send a link that contains a script as part of the URL to a user. When the user clicks it, the script gets executed on the user's browser. This script may have been written to collect important information about the user and send it to the attacker. Kevin Spett's paper Cross Site Scripting, Are your web applications vulnerable? is a good source of information on this topic and is available at http://www.spidynamics.com/whitepapers/SPIcross-sitescripting.pdf The Cross Site Scripting FAQ at CGI Security is another good place to learn more on XSS. &lt;br /&gt;
&lt;br /&gt;
==What information can an attacker steal using XSS?  ==&lt;br /&gt;
&lt;br /&gt;
The attackers can steal the session ID of a valid user using XSS. The session ID is very valuable because it is the secret token that the user presents after login as proof of identity until logout. If the session ID is stored in a cookie, the attackers can write a script which will run on the user's browser, query the value in the cookie and send it to the attackers. The attackers can then use the valid session ID to browse the site without logging in. The script could also collect other information from the page, including the entire contents of the page. &lt;br /&gt;
&lt;br /&gt;
==Apart from mailing links of error pages, are there other methods of exploiting XSS?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are other methods. Let's take the example of a bulletin board application that has a page where data entered by one user can be viewed by other users. The attackers enter a script into this page. When a valid user tries to view the page, the script gets executed on the user's browser. It will send the user's information to the attackers. &lt;br /&gt;
&lt;br /&gt;
==How can I prevent XSS?  ==&lt;br /&gt;
&lt;br /&gt;
XSS can be prevented while coding the application. You should be validating all input and output to and from the application and escape all special characters that may be used in a script. If the code replaces the special characters by the following before displaying the output, XSS can be prevented to some extent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;   &amp;amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;   &amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
(   &amp;amp;*40; &lt;br /&gt;
&lt;br /&gt;
)   &amp;amp;*41; &lt;br /&gt;
&lt;br /&gt;
*   &amp;amp;*35; &lt;br /&gt;
&amp;amp;   &amp;amp;*38;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gunter Ollmann has written an excellent paper on the use of special characters in XSS attacks. For instance, the above technique of escaping special characters cannot protect against a script injected like &amp;quot;javascript:self.location.href = 'www.evil.org' &amp;quot; as this script does not use any of the special characters.&lt;br /&gt;
&lt;br /&gt;
==Can XSS be prevented without modifying the source code?  ==&lt;br /&gt;
&lt;br /&gt;
There is a method that requires minimal coding as compared to performing input, output validation to prevent the stealing of cookies by XSS. Internet Explorer 6 has an attribute called HTTP Only that can be set for cookies. Using this attribute makes sure that the cookie can not be accessed by any scripts. More details are available at the MSDN site on httpcookies at http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_cookies.asp Mozilla also has plans to implement a similar feature. Researchers have found a method to beat this. It is known as Cross Site Tracing. &lt;br /&gt;
&lt;br /&gt;
==What is Cross Site Tracing (XST)? How can it be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
Attackers are able to bypass the HTTP Only attribute to steal cookie information by Cross Site tracing (XST). TRACE is a HTTP method that can be sent to the server. The server sends back anything included in the TRACE request back to the browser. In a site that uses cookies, the cookie information is sent to the server in each request. If we send a TRACE request in a URL of such a site, the server will send back all cookie information to the browser. Now imagine a situation similar to the one described in XSS but the site in this case is using the HTTP Only cookies. The attackers make a valid user click on a link that contains a script that calls the TRACE method. When the user clicks on the link the TRACE request as well as all the cookie information is sent to the server. The server then sends back the cookie information back to the script in the browser. Suppose that the malicious script also contains code to send this information to the attackers. The attackers have succeeded again in stealing the cookies although HTTP Only Cookies were used. To summarize, HTTP Only cookies prevent the JavaScript from directly accessing the cookies but the attacker was able to retrieve it through an indirect method. XST can be prevented by disabling the TRACE method on the web server. This paper by Jeremiah Grossman discusses XST in greater detail http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf &lt;br /&gt;
&lt;br /&gt;
=Web Server Fingerprinting  =&lt;br /&gt;
&lt;br /&gt;
==How do attackers identify which web server I'm using?  ==&lt;br /&gt;
&lt;br /&gt;
Identifying the application running on a remote web server is known as fingerprinting the server. The simplest way to do this is to send a request to the server and see the banner sent in the response. Banners will generally have the server name and the version number in it. We can address this problem by either configuring the server not to display the banner at all or by changing it to make the server look like something else.&lt;br /&gt;
&lt;br /&gt;
==How can I fake the banners or rewrite the headers from my web server?  ==&lt;br /&gt;
&lt;br /&gt;
There are a number of tools that help in faking the banners. URLScan is a tool that can change the banner of an IIS web server. http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/tools/URLScan.asp mod_security has a feature for changing the identity of the Apache web server. It can be found at http://www.modsecurity.org/ Servermask for faking banners of IIS, can be found at http://www.servermask.com/ &lt;br /&gt;
&lt;br /&gt;
==Once I fake the banners, can my web server still be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Yes. Unfortunately there are tools that fingerprint the web server without relying on the banners. Different web servers may implement features not specified in HTTP RFCs differently. Suppose we make a database of these special requests and the responses of each web server. We can now send these requests to the web server we want to fingerprint and compare the responses with the database. This is the technique used by tools like Fire &amp;amp; Water. This tool can be found at http://www.ntobjectives.com/products/firewater/ There is a paper by Saumil Shah that discusses the tool httprint at http://net-square.com/httprint/httprint_paper.html httprint can be found at http://net-square.com/httprint/ &lt;br /&gt;
&lt;br /&gt;
==A friend told me it's safer to run my web server on a non-standard port. Is that right?  ==&lt;br /&gt;
&lt;br /&gt;
A web server generally needs to be accessed by a lot of people on the internet. Since it normally runs on port 80 and all browsers are configured to access port 80 of the web server, users are able to browse the site. If we change the port, the users will have to specify the port in addition to the domain name. But this is a good idea for an intranet application where all users know where to connect. It is more secure since the web server will not be targeted by automated attacks like worms that scan port 80 and other standard ports. &lt;br /&gt;
&lt;br /&gt;
==Should I really be concerned that my web server can be fingerprinted?  ==&lt;br /&gt;
&lt;br /&gt;
Well, there are two schools of thought here. According to the first school, yes you should take precaution against fingerprinting as correctly identiying the web server maybe the first step in a more dangerous attack. Once attackers have found out that the web server is say IIS 5, they will search for known vulnerabilities for IIS 5. If the web server is not patched for all known vulnerabilities or the attackers find one for which a patch has not been released yet, there is nothing to stop them from attacking it. Also automated tools and worms can be fooled by changing the version information. Some determined and focused attackers might go to additional lengths to identify the server but the hurdles that the attackers have to overcome have increased when it's more difficult to fingerprint the web server name and version. Jeremiah Grossman pointed out the other school of thought. Evasive measures are futile as any scanner targeting a web site, will normally not care what the web server is. The scanner will run ALL its tests no matter if they apply to the system or not. This is a typical shotgun approach. A bad guy targeting the site might be hampered by not knowing the exact version, but if he's determined he would still try out all related exploits and try to break in. &lt;br /&gt;
&lt;br /&gt;
=Testing  =&lt;br /&gt;
&lt;br /&gt;
==I want to chain my proxy tool with a proxy server; are there tools that let me do that?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, there are several tools that allow proxy chaining. Some of these are: WebScarab - http://www.owasp.org/development/webscarab Exodus - http://home.intekom.com/rdawes/exodus.html Odysseus - http://www.wastelands.gen.nz/odysseus/index.php &lt;br /&gt;
&lt;br /&gt;
==Can't web application testing be automated? Are there any tools for that?  ==&lt;br /&gt;
&lt;br /&gt;
There are tools that scan applications for security flaws. But these tools can only look for a limited number of vulnerabilities, and do not find all the problems in the application. Moreover, a lot of attacks require understanding of the business context of the application to decide on the variables to manipulate in a particular request, which a tool is incapable of doing. A presentation by Jeremiah Grossman of White Hat Security which talks about the [http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-grossman-up.pdf limitations of automated scanning]. &lt;br /&gt;
&lt;br /&gt;
This piece explains [http://www.plynt.com/resources/learn/tools/what_cant_a_scanner_find_1/ what a scanner can't find].&lt;br /&gt;
&lt;br /&gt;
In our tests using a slightly modified WebGoat the best Black-box scanning tool found less than 20% of the issues ! Some tools for automated scanning are: SpikeProxy, open source and freely available at http://www.immunitysec.com/spikeproxy.html WebInspect, can be found at http://www.spidynamics.com/productline/WE_over.html&lt;br /&gt;
&lt;br /&gt;
==Where can I try out my testing skills? Is there a sample application I can practice with?  ==&lt;br /&gt;
&lt;br /&gt;
OWASP provides a sample application that can be used for this purpose called . As the site says, the WebGoat project's goal is to teach web security in an interactive teaching environment. There are lessons on most of the common vulnerabilities. Another interesting site is Hackingzone which has a game on SQL Injection at http://www.hackingzone.org/sql/index.php &lt;br /&gt;
&lt;br /&gt;
==Are there source code scanning tools for .NET languages, Java, PHP etc that predict vulnerabilities in the source code?  ==&lt;br /&gt;
&lt;br /&gt;
Rough Auditing Tool for Security (RATS) is a tool that scans the source code for security flaws in C, C++, Python, Perl and PHP programs. It can be found at http://code.google.com/p/rough-auditing-tool-for-security/downloads/list FX Cop was created by the Microsoft Team at the GotDotNet community site to check for the .NET Frameowork guidelines which include security. Prexis is a commercial source code and run-time analyzer. Flawfinder is a static source code analyzer. Compaq ESC is a run-time analyzer for Java. Parasoft AEP is a commercial source code analyzer for Java. Fortify SCA from Fortify Software is another source code analyzer that supports mixed language analysis of C, C++, C#, ASP.NET, Java, JSP, PL/SQL, VB.NET, XML, etc. Secure Coding plugins are also available. Similar source code analyzers are Klocwork K7 for C, C++ and Java; Coverity Prevent for detecting security violations and defects in code; Ounce Solutions for C, C++, C#, ASP.NET, Java and JSP. We would like to know about more tools for scanning source code. If you know about any, please inform us and we'll add to this FAQ&lt;br /&gt;
&lt;br /&gt;
==Can non-HTTP protocols also be intercepted and played with like this?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, Interactive TCP Replay is a tool that acts as a proxy for non-HTTP applications and also allows modifying the traffic. It allows editing of the messages in a hex editor. ITR also logs all the messages passing between the client and the server. It can use different types of character encoding like ASCII or EBCDIC for editing and logging. More information on this can be found at http://www.webcohort.com/web_application_security/research/tools.html &lt;br /&gt;
&lt;br /&gt;
=Cryptography/SSL  =&lt;br /&gt;
&lt;br /&gt;
==What is SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer (SSL) gives us assurance of two things. Firstly when a client connects to a web server, the client can be sure that it is talking to the right server by checking the certificate the server sends it. Secondly, SSL assures you of the confidentiality of the data, as the client and the server exchange encrypted messages that cannot be understood by anybody else. This is how SSL works: When the client requests for a SSL page, the server sends a certificate that it has obtained from a trusted certificate authority. This certificate contains the public key of the server. After satisfying itself that the certificate is correct and the server is a genuine one, the client generates one random number, the session key. This key is encrypted by the public key of the server and sent across. The server decrypts the message with its private key. Now both sides have a session key known only to the two of them. All communication to and fro is encrypted and decrypted with the session key. An interesting link on SSL is http://www.rsasecurity.com/standards/ssl/basics.html &lt;br /&gt;
&lt;br /&gt;
==Should I use 40-bit or 128-bit SSL?  ==&lt;br /&gt;
&lt;br /&gt;
There are 2 strengths in SSL - 40-bit and 128-bit. These refer to the length of the secret key used for encrypting the session. This key is generated for every SSL session and is used to encrypt the rest of the session. The longer the key the more difficult it is to break the encrypted data. So, 128-bit encryption is much more secure than 40-bit. Most browsers today support 128-bit encryption. There are a few countries which have browsers with only 40-bit support. In case you are using 40-bit SSL, you may need to take further precautions to protect sensitive data. Salted hash for transmitting passwords is a good technique. This ensures that the password can not be stolen even if the SSL key is broken. &lt;br /&gt;
&lt;br /&gt;
==Is 40-bit SSL really unsafe?  ==&lt;br /&gt;
&lt;br /&gt;
40-bit SSL is not really unsafe. It's just that it is computationally feasible to break the key used in 40-bit but not the key used in 128-bit. Even though 40-bit can be broken, it takes a fairly large number of computers to break it. Nobody would even attempt to do that for a credit card number or the like. But there are claims of breaking the 40-bit RC4 key in a few hours. So depending on the data your application deals with, you can decide on the SSL strength. Using 128-bit is definitely safer.&lt;br /&gt;
&lt;br /&gt;
With home computers gtting faster day by day, a dedicated, expensive and very fast computer can break 40-bit encryption in few minutes (ideally testing a million keys per second). On the other hand, 128-bit encryotion will have about 339,000,000,000,000,000,000,000,000,000,000,000 (Couple of Trillions or 2^128) possible key combinations and it will take around 1000 Years to break 128-bit encryptions with the help of a cluster of very fast computers.&lt;br /&gt;
&lt;br /&gt;
==What all are encrypted when I use SSL? Is the page request also encrypted?  ==&lt;br /&gt;
&lt;br /&gt;
After the initial SSL negotiation is done and the connection is on HTTPS, everything is encrypted including the page request. So any data sent in the query string will also be encrypted. &lt;br /&gt;
&lt;br /&gt;
==Which cryptographic algorithms do SSL use?  ==&lt;br /&gt;
&lt;br /&gt;
SSL supports a number of cryptographic algorithms. During the initial &amp;quot;handshaking&amp;quot; phase, it uses the RSA public key algorithm. For encrypting the data with the session key the following algorithms are used - RC2, RC4, IDEA, DES, triple-DES and MD5 message digest algorithm. &lt;br /&gt;
&lt;br /&gt;
==I want to use SSL. Where do I begin?  ==&lt;br /&gt;
&lt;br /&gt;
There are several Certificate Authorities that you can buy a SSL certificate from. Whichever CA you choose, the basic procedure will be as follows - &lt;br /&gt;
&lt;br /&gt;
* Create key pair for the server &lt;br /&gt;
* Create the Certificate Signing Request. This will require you to provide certain details like location and fully qualified domain name of the server. &lt;br /&gt;
* Submit the CSR to the CA along with documentary proof of identity. &lt;br /&gt;
* Install the certificate sent by the CA&lt;br /&gt;
The first two steps are done from the web server. All servers have these features. While installing the certificate issued by the CA, you will have to specify which web pages are to be on SSL.&lt;br /&gt;
&lt;br /&gt;
A good starting point for working on POC in a Windows development environment could be: &amp;quot;HOW TO: Secure XML Web Services with Secure Socket Layer in Windows 2000&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;q307267&amp;amp;sd=tech&lt;br /&gt;
&lt;br /&gt;
=Cookies and Session Management  =&lt;br /&gt;
&lt;br /&gt;
==Are there any risks in using persistent vs non-persistent cookies?  ==&lt;br /&gt;
&lt;br /&gt;
Persistent cookies are data that a web site places on the user's hard drive (or equivalent) for maintaining information over more than one browser session. This data will stay in the user's system and can be accessed by the site the next time the user browses the site. Non-persistent cookies on the other hand are those that are used only in the browser session that creates it. They stay only in the memory of the machine and are not persisted on the hard disk. The security risk with persistent cookies is that they are generally stored in a text file on the client and an attacker with access to the victim's machine can steal this information. &lt;br /&gt;
&lt;br /&gt;
==Can another web site steal the cookies that my site places on a user's machine?  ==&lt;br /&gt;
&lt;br /&gt;
No, it is not possible for a website to access another site's cookies. Cookies have a domain attribute associated with them. Only a request coming from the domain specified in the attribute can access the cookie. This attribute can have only one value. &lt;br /&gt;
&lt;br /&gt;
==Which is the best way to transmit session ids- in cookies, or URL or a hidden variable?  ==&lt;br /&gt;
&lt;br /&gt;
Transmitting session IDs in the URL can lead to several risks. Shoulder surfers can see the session ID; if the URL gets cached on the client system, the session ID will also be stored; the session ID will get stored in the referrer logs of other sites. Hidden variables are not always practical as every request might not be a POST. Cookies are the safest method as cookies do not get cached, are not visible in the W3C or referrer logs, and most users anyway accept cookies. &lt;br /&gt;
&lt;br /&gt;
==What are these secure cookies?  ==&lt;br /&gt;
&lt;br /&gt;
A cookie can be marked as &amp;quot;secure&amp;quot; which ensures the cookie is used only over SSL sessions. If &amp;quot;secure&amp;quot; is not specified, the cookie will be sent unencrypted over non-SSL channels. Sensitive cookies like session tokens should be marked as secure if all pages in the web site requiring session tokens are SSL-enabled. One thing to keep in mind here is that images are generally not downloaded over SSL and they usually don't require a session token to be presented. By setting the session cookie to be secure, we ensure that the browser does not send the cookie while downloading the image over the non-SSL connection.&amp;lt;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==If I use a session ID that is a function of the client's IP address, will session hijacking be prevented?  ==&lt;br /&gt;
&lt;br /&gt;
An attacker can hijack another user's session by stealing the session token. Methods have been suggested to prevent the session from being hijacked even if the session token is stolen. For instance, using a session token that is a function of the user's IP address. In this approach, even if the attacker stole the token, he would need the same IP address as the user to successfully hijack a session. However, session hijacking can still be possible. Suppose the attacker is on the same LAN as the user and uses the same Proxy IP as the user to access the web site. The attacker can still steal the session if he is able to sniff the session token. It may also be not possible to implement this if the IP of the client changes during a session, making the session invalid if the token is tied to the initial IP address. This may happen if the client is coming from behind a bank of proxy servers. &lt;br /&gt;
&lt;br /&gt;
==How about encrypting the session id cookies instead of using SSL?  ==&lt;br /&gt;
&lt;br /&gt;
Encrypting just the session ID over a non-SSL connection will not serve any purpose. Since the session ID will be encrypted once and the same value will be sent back and forth each time, an attacker can use the encrypted value to hijack the session. &lt;br /&gt;
&lt;br /&gt;
==What is the concept of using a page id, in addition to the session id?  ==&lt;br /&gt;
&lt;br /&gt;
A Session ID or token has the lifetime of a session and is tied to the logged in user. A page ID or token has a lifetime of a page and is tied to a page that is served. It is a unique token given when a page is downloaded and is presented by the user when accessing the next page. The server expects a particular value for the user to access the next page. Only if the token submitted matches what the server is expecting is the next page served. An application can use this to ensure that a user accesses pages only in the sequence determined by the application. The user cannot paste a deep URL in the browser and skip pages just because he has a session token, as the page token would not be authorized to access the deeper URL directly. Good Read: [http://palisade.plynt.com/issues/2005Aug/page-tokens/ Secure your sessions with Page Tokens]&lt;br /&gt;
&lt;br /&gt;
=Logging and Audit Trails  =&lt;br /&gt;
&lt;br /&gt;
==What are these W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
W3C is a logging format used for Web server log files. W3C logs record access details of each request: the timestamp, source IP, page requested, the method used, http protocol version, browser type, the referrer page, the response code etc. Note that these are access logs, and so a separate record is maintained for each request. When a page with multiple gif files is downloaded, it would be recorded as multiple entries in the W3C log; so, W3C logs tend to be voluminous. &lt;br /&gt;
&lt;br /&gt;
==Do I need to have logging in my application even if I've W3C logs?  ==&lt;br /&gt;
&lt;br /&gt;
Yes, it's important that your application maintains &amp;quot;application level&amp;quot; logs even when W3C logging is used. As W3C logs contain records for every http request, it is difficult (and, at times impossible) to extract a higher level meaning from these logs. For instance, the W3C logs are cumbersome to identify a specific session of user and the activities that the user performed. It's better that the application keeps a trail of important activities, rather than decode it from W3C logs. &lt;br /&gt;
&lt;br /&gt;
==What should I log from within my application?  ==&lt;br /&gt;
&lt;br /&gt;
Keep an audit trail of activity that you might want to review while troubleshooting or conducting forensic analysis. Please note that it is inadvisable to keep sensitive business information itself in these logs, as administrators have access to these logs for troubleshooting. Activities commonly kept track of are: &lt;br /&gt;
&lt;br /&gt;
* Login and logout of users &lt;br /&gt;
* Critical transactions (eg. fund transfer across accounts) &lt;br /&gt;
* Failed login attempts &lt;br /&gt;
* Account lockouts &lt;br /&gt;
* Violation of policies &lt;br /&gt;
The data that is logged for each of these activities usually include: &lt;br /&gt;
&lt;br /&gt;
* User ID &lt;br /&gt;
* Time stamp &lt;br /&gt;
* Source IP &lt;br /&gt;
* Error codes, if any &lt;br /&gt;
* Priority &lt;br /&gt;
==Should I encrypt my logs? Isn't that a performance hit?  ==&lt;br /&gt;
&lt;br /&gt;
Encryption is required when information has to be protected from being read by unauthorized users. Yes, encryption does take a performance hit, so if your logs do not contain sensitive information you might want to forego encryption. However, we strongly urge that you protect your logs from being tampered by using digital signatures. Digital signatures are less processor intensive than encryption and ensure that your logs are not tampered. &lt;br /&gt;
&lt;br /&gt;
==Can I trust the IP address of a user I see in my audit logs? Could a user be spoofing/impersonating their IP address?  ==&lt;br /&gt;
&lt;br /&gt;
A bad guy who wants to hide his actual IP address might use a service like anonymizer, or use open HTTP relays. [HTTP open relays are improperly configured web servers on the web that are used as a HTTP proxy to connect to other sites.] In such cases, the IP address you see in your log files will be those of these services or the open relay that is being used. So, the IP address you see in your log files might not always be trustworthy. &lt;br /&gt;
&lt;br /&gt;
=Miscellaneous  =&lt;br /&gt;
&lt;br /&gt;
==What are Buffer Overflows? ==&lt;br /&gt;
&lt;br /&gt;
Buffer overflow vulnerability affects the web applications that require user input. The application stores the input in a buffer which is of a fixed size, as defined by the programmer. When the input that is sent to the application is more than the buffer capacity and the buffers are left unchecked, buffer overflow occurs. The severity depends on the user input. If a malicious code executes as a result of the overflow, it can even compromise the whole system.&lt;br /&gt;
To learn more, please read the OWASP article on [http://www.owasp.org/index.php/Buffer_Overflow buffer overflows.]&lt;br /&gt;
&lt;br /&gt;
==What are application firewalls? How good are they really?  ==&lt;br /&gt;
&lt;br /&gt;
Application firewalls analyze the requests at the application level. These firewalls are used for specific applications like a web server or a database server. The web application firewalls protect the web server from HTTP based attacks. They monitor the requests for attacks that involve SQL Injection, XSS, URL encoding etcetera. However, application layer firewalls cannot protect against attacks that require an understanding of the business context - this includes most attacks that rely on variable manipulation. Some application firewalls are: Netcontinuum's NC-1000 Kavado Inc.'s InterDo Teros Inc.'s Teros-100 APS&lt;br /&gt;
&lt;br /&gt;
==What is all this about &amp;quot;referrer logs&amp;quot;, and sensitive URLs?  ==&lt;br /&gt;
&lt;br /&gt;
The HTTP header contains a field known as Referrer. For visiting a web page we may either: &lt;br /&gt;
&lt;br /&gt;
* Type its URL directly into the address bar of the browser &lt;br /&gt;
* Click a link on some other page that brings us there &lt;br /&gt;
* Be redirected there by some page. &lt;br /&gt;
In the first case, the referrer field will be empty but in the other two cases it will contain the URL of the previous page. The URL of the first page will get stored in the web server access logs of the second page when the user reaches the second page from the first page. Now suppose, the two pages belong to different sites and the first URL contains sensitive information like a user's session ID. If the second site belongs to attackers, they can obtain this information by just going through the logs. Information in the URLs will get stored in the referrer logs as well as the history of the browser. Therefore, we should be careful not to have any sensitive information in the URL. &lt;br /&gt;
&lt;br /&gt;
==I want to use the most secure language; which language do you recommend?  ==&lt;br /&gt;
&lt;br /&gt;
Any language can be used since secure programming practices are what make applications safe. Most security techniques can be implemented in any language. Our advice would be to use any language you are comfortable with. But some languages like Java have additional features like bind variables that aid security; you could use those additional features if you decide to program in that language. &lt;br /&gt;
&lt;br /&gt;
==What are the good books to learn secure programming practices?  ==&lt;br /&gt;
&lt;br /&gt;
The OWASP Guide to Building Secure Web Application and Web Services is a good guide for web application developers. You can download it from http://www.owasp.org/documentation/guide Writing Secure Code by Michael Howard and David LeBlanc has a chapter on Securing Web-Based Services. More information on this book can be found at: http://www.microsoft.com/mspress/books/toc/5612.asp Secure Programming for Linux and Unix HOWTO by David Wheeler talks about writing secure applications including web applications; it also specifies guidance for a number of languages. The book can be found at: http://www.dwheeler.com/secure-programs&lt;br /&gt;
&lt;br /&gt;
Another good book on application security, which also covers some web service specific topics: 19 Deadly Sins of Software Security, by: Michael Howard, David LeBlanc and John Viega (http://books.mcgraw-hill.com/getbook.php?isbn=0072260858).&lt;br /&gt;
&lt;br /&gt;
==Are there any training programs on secure programming that I can attend?  ==&lt;br /&gt;
&lt;br /&gt;
Microsoft offers training programs on Developing Security-Enhanced Web Applications and Developing and Deploying Secure Microsoft .NET Framework Application. More information can be found at http://www.microsoft.com/traincert/syllabi/2300AFinal.asp and http://www.microsoft.com/traincert/syllabi/2350BFinal.asp Foundstone offers secure coding training through Global Knowledge Aspect Security offers a similar course. &lt;br /&gt;
&lt;br /&gt;
OWASP_FAQ_Ver3.doc&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136781</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136781"/>
				<updated>2012-09-29T20:27:34Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding another CSS selector to remove distracting tab on home page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-view { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-edit { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-history { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #p-cactions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-nstab-main { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-viewsource { display: none !important; } /* Hide distracting tab button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136777</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136777"/>
				<updated>2012-09-29T17:01:48Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-view { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-edit { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-history { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #p-cactions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-nstab-main { display: none !important; } /* Hide distracting tab button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136776</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136776"/>
				<updated>2012-09-29T17:01:03Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-view { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-edit { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-history { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-nstab-main { display: none !important; } /* Hide distracting tab button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136775</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136775"/>
				<updated>2012-09-29T16:59:50Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-view { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-edit { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-history { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #p-views { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-nstab-main { display: none !important; } /* Hide distracting tab button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136774</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136774"/>
				<updated>2012-09-29T16:57:30Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Hiding other unnecessary buttons&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-view { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-edit { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #ca-history { display: none !important; } /* Hide distracting tab button on home page */&lt;br /&gt;
body.page-Main_Page #p-actions { display: none !important; } /* Hide distracting tab button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136773</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136773"/>
				<updated>2012-09-29T16:53:40Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page #ca-talk { display: none !important; } /* Hide distracting Discussion button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136772</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136772"/>
				<updated>2012-09-29T16:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Hiding distracting Discussion button on home page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page li#ca-talk { display: none !important; } /* Hide distracting Discussion button on home page */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136771</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.css&amp;diff=136771"/>
				<updated>2012-09-29T16:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Added CSS to hide heading on the home page for the title.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hiddenStructure {display: none}&lt;br /&gt;
&lt;br /&gt;
.if {display: none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* wikitable/prettytable class for skinning normal tables */&lt;br /&gt;
&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.prettytable {&lt;br /&gt;
  margin: 1em 1em 1em 0;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th, table.wikitable td,&lt;br /&gt;
table.prettytable th, table.prettytable td {&lt;br /&gt;
  border: 1px #aaaaaa solid;&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th,&lt;br /&gt;
table.prettytable th {&lt;br /&gt;
  background: #f2f2f2;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable caption,&lt;br /&gt;
table.prettytable caption {&lt;br /&gt;
  margin-left: inherit;&lt;br /&gt;
  margin-right: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.allpagesredirect {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox template style */&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
   background-color: #f9f9f9;&lt;br /&gt;
   color: black;&lt;br /&gt;
   margin-bottom: 0.5em;&lt;br /&gt;
   margin-left: 1em;&lt;br /&gt;
   padding: 0.2em;&lt;br /&gt;
   float: right;&lt;br /&gt;
   clear: right;&lt;br /&gt;
}&lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox th {&lt;br /&gt;
   vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.infobox caption {&lt;br /&gt;
   font-size: larger;&lt;br /&gt;
   margin-left: inherit;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered {&lt;br /&gt;
   border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered td,&lt;br /&gt;
.infobox.bordered th {&lt;br /&gt;
   border: 1px solid #aaaaaa;&lt;br /&gt;
}&lt;br /&gt;
.infobox.bordered .borderless td,&lt;br /&gt;
.infobox.bordered .borderless th {&lt;br /&gt;
   border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox.sisterproject {&lt;br /&gt;
   width: 20em;&lt;br /&gt;
   font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.collapsed tr.collapsible {&lt;br /&gt;
        display: none;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.collapseButton {                /* 'show'/'hide' buttons created dynamically by the               */&lt;br /&gt;
        float: right;               /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */&lt;br /&gt;
        font-weight: normal;        /* are styled here so they can be customised.               */&lt;br /&gt;
        text-align: right;&lt;br /&gt;
        width: auto;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default styling for Navbar template */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
.navbar ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.navbar li {&lt;br /&gt;
    word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin-right: 0.5em;&lt;br /&gt;
    width: 6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Default style for navigation boxes */&lt;br /&gt;
.navbox {                     /* Navbox container style */&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    width: 100%; &lt;br /&gt;
    margin: auto;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
    text-align: center;       /* Title and above/below styles */&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
th.navbox-group {             /* Group style */&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
    background: #fdfdfd;      /* Background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: #fdfdfd;    /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    background: #ccccff;      /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: #ddddff;      /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: #e6e6ff;      /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: #f7f7f7;      /* Even row striping */&lt;br /&gt;
}&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;  /* Odd row striping */&lt;br /&gt;
}&lt;br /&gt;
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */&lt;br /&gt;
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
    white-space: nowrap;      /* Nowrap list items in navboxes */&lt;br /&gt;
    white-space: normal !ie;  /* IE &amp;lt; 8 no-wraps entire list, so disable it */&lt;br /&gt;
}&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
    white-space: normal;      /* But allow parent list items to be wrapped */&lt;br /&gt;
}&lt;br /&gt;
ol + table.navbox,&lt;br /&gt;
ul + table.navbox {&lt;br /&gt;
    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; } /* Hide heading on home page for title */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136770</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136770"/>
				<updated>2012-09-29T16:31:56Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Reinstating &amp;lt;openx&amp;gt; ads, image-based only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;openx&amp;gt;&amp;lt;/openx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements, and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136769</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136769"/>
				<updated>2012-09-29T16:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136768</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136768"/>
				<updated>2012-09-29T16:26:12Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Putting &amp;lt;openx&amp;gt; tag at top of page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;openx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136767</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136767"/>
				<updated>2012-09-29T15:38:48Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Removing unnecessary OpenX JavaScript.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/** Collapsible tables *********************************************************&lt;br /&gt;
 *&lt;br /&gt;
 *  Description: Allows tables to be collapsed, showing only the header. See&lt;br /&gt;
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.&lt;br /&gt;
 *  Maintainers: [[en:User:R. Koot]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var autoCollapse = 2;&lt;br /&gt;
var collapseCaption = 'hide';&lt;br /&gt;
var expandCaption = 'show';&lt;br /&gt;
 &lt;br /&gt;
function collapseTable( tableIndex ) {&lt;br /&gt;
        var Button = document.getElementById( 'collapseButton' + tableIndex );&lt;br /&gt;
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
        if ( !Table || !Button ) {&lt;br /&gt;
                return false;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        var Rows = Table.rows;&lt;br /&gt;
 &lt;br /&gt;
        if ( Button.firstChild.data == collapseCaption ) {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = expandCaption;&lt;br /&gt;
        } else {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = Rows[0].style.display;&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = collapseCaption;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function createCollapseButtons() {&lt;br /&gt;
        var tableIndex = 0;&lt;br /&gt;
        var NavigationBoxes = new Object();&lt;br /&gt;
        var Tables = document.getElementsByTagName( 'table' );&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0; i &amp;lt; Tables.length; i++ ) {&lt;br /&gt;
                if ( hasClass( Tables[i], 'collapsible' ) ) {&lt;br /&gt;
 &lt;br /&gt;
                        /* only add button and increment count if there is a header row to work with */&lt;br /&gt;
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];&lt;br /&gt;
                        if ( !HeaderRow ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];&lt;br /&gt;
                        if ( !Header ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
 &lt;br /&gt;
                        NavigationBoxes[tableIndex] = Tables[i];&lt;br /&gt;
                        Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
                        var Button = document.createElement( 'span' );&lt;br /&gt;
                        var ButtonLink = document.createElement( 'a' );&lt;br /&gt;
                        var ButtonText = document.createTextNode( collapseCaption );&lt;br /&gt;
 &lt;br /&gt;
                        Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]&lt;br /&gt;
 &lt;br /&gt;
                        ButtonLink.style.color = Header.style.color;&lt;br /&gt;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );&lt;br /&gt;
                        ButtonLink.setAttribute( 'href', &amp;quot;javascript:collapseTable(&amp;quot; + tableIndex + &amp;quot;);&amp;quot; );&lt;br /&gt;
                        ButtonLink.appendChild( ButtonText );&lt;br /&gt;
 &lt;br /&gt;
                        Button.appendChild( document.createTextNode( '[' ) );&lt;br /&gt;
                        Button.appendChild( ButtonLink );&lt;br /&gt;
                        Button.appendChild( document.createTextNode( ']' ) );&lt;br /&gt;
 &lt;br /&gt;
                        Header.insertBefore( Button, Header.childNodes[0] );&lt;br /&gt;
                        tableIndex++;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0;  i &amp;lt; tableIndex; i++ ) {&lt;br /&gt;
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex &amp;gt;= autoCollapse &amp;amp;&amp;amp; hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {&lt;br /&gt;
                        collapseTable( i );&lt;br /&gt;
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {&lt;br /&gt;
                        var element = NavigationBoxes[i];&lt;br /&gt;
                        while ( element = element.parentNode ) {&lt;br /&gt;
                                if ( hasClass( element, 'outercollapse' ) ) {&lt;br /&gt;
                                        collapseTable( i );&lt;br /&gt;
                                        break;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
addOnloadHook( createCollapseButtons );&lt;br /&gt;
 &lt;br /&gt;
/** Test if an element has a certain class **************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Description: Uses regular expressions and caching for better performance.&lt;br /&gt;
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var hasClass = ( function() {&lt;br /&gt;
        var reCache = {};&lt;br /&gt;
        return function( element, className ) {&lt;br /&gt;
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( &amp;quot;(?:\\s|^)&amp;quot; + className + &amp;quot;(?:\\s|$)&amp;quot; ) ) ).test( element.className );&lt;br /&gt;
        };&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136766</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136766"/>
				<updated>2012-09-29T14:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding &amp;lt;openx&amp;gt; at page footer for demo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; [[Image:Cenzic.png|link=https://info.cenzic.com/start-risk-calculator.html]] --- [[Image:Checkmarx_Logo_Final.gif‎|link=http://lp.checkmarx.com/owasp-home-page-start-free-trial/]]&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt; [[Image:HackerHalted_468x60px.jpg|link=http://www.hackerhalted.com/2012/]] --- [[Image:Trustwave_banner_ad_Sept_18,_2012.png|link=https://www.trustwave.com/application-security/]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;openx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136765</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136765"/>
				<updated>2012-09-29T14:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Removing &amp;lt;openx&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; [[Image:Cenzic.png|link=https://info.cenzic.com/start-risk-calculator.html]] --- [[Image:Checkmarx_Logo_Final.gif‎|link=http://lp.checkmarx.com/owasp-home-page-start-free-trial/]]&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt; [[Image:HackerHalted_468x60px.jpg|link=http://www.hackerhalted.com/2012/]] --- [[Image:Trustwave_banner_ad_Sept_18,_2012.png|link=https://www.trustwave.com/application-security/]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136764</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136764"/>
				<updated>2012-09-29T14:31:40Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Re-adding &amp;lt;openx&amp;gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;openx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; [[Image:Cenzic.png|link=https://info.cenzic.com/start-risk-calculator.html]] --- [[Image:Checkmarx_Logo_Final.gif‎|link=http://lp.checkmarx.com/owasp-home-page-start-free-trial/]]&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt; [[Image:HackerHalted_468x60px.jpg|link=http://www.hackerhalted.com/2012/]] --- [[Image:Trustwave_banner_ad_Sept_18,_2012.png|link=https://www.trustwave.com/application-security/]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136763</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136763"/>
				<updated>2012-09-29T14:29:17Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Removing &amp;lt;openx&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; [[Image:Cenzic.png|link=https://info.cenzic.com/start-risk-calculator.html]] --- [[Image:Checkmarx_Logo_Final.gif‎|link=http://lp.checkmarx.com/owasp-home-page-start-free-trial/]]&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt; [[Image:HackerHalted_468x60px.jpg|link=http://www.hackerhalted.com/2012/]] --- [[Image:Trustwave_banner_ad_Sept_18,_2012.png|link=https://www.trustwave.com/application-security/]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136762</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Main_Page&amp;diff=136762"/>
				<updated>2012-09-29T14:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding &amp;lt;openx&amp;gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;openx&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:7pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; [[Image:Cenzic.png|link=https://info.cenzic.com/start-risk-calculator.html]] --- [[Image:Checkmarx_Logo_Final.gif‎|link=http://lp.checkmarx.com/owasp-home-page-start-free-trial/]]&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt; [[Image:HackerHalted_468x60px.jpg|link=http://www.hackerhalted.com/2012/]] --- [[Image:Trustwave_banner_ad_Sept_18,_2012.png|link=https://www.trustwave.com/application-security/]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Disclaimer: Banner ads are not endorsements and reflect the messages of the advertiser only. | [https://www.owasp.org/index.php/Advertising More Information]&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background-color:#C4D7ED;border:1px solid #183152&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:56%;color:#000&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:280px;border:solid 0px;background:none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:280px;text-align:center;color:#000&amp;quot; |&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Welcome to [[About The Open Web Application Security Project|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;the free and open software security community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
&amp;lt;IfLanguage Is=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%;border:none;margin: 0;color:#000&amp;quot;&amp;gt;'''Bienvenido a [[About The Open Web Application Security Project/es|OWASP]]'''&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;top:+0.2em;font-size: 95%&amp;quot;&amp;gt;la comunidad libre y abierta sobre seguridad en aplicaciones&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/IfLanguage&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Special Links --&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%;color:#000&amp;quot;|&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects_Reboot_2012 2012 Project Support Initiative]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Top Ten Project|Top Ten]]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project ZAP Proxy]&lt;br /&gt;
*[[:Category:OWASP WebScarab Project|WebScarab]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP_Enterprise_Security_API|ESAPI]]&lt;br /&gt;
*[[:Category:OWASP_Application_Security_Verification_Standard_Project |ASVS]]&lt;br /&gt;
*[[:Category:OWASP_AntiSamy_Project|AntiSamy]]&lt;br /&gt;
|style=&amp;quot;width:180px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:OWASP Guide Project|Development Guide]]&lt;br /&gt;
*[[:Category:OWASP Code Review Project|Code Review Guide]]&lt;br /&gt;
*[[:Category:OWASP Testing Project|Testing Guide]]&lt;br /&gt;
|style=&amp;quot;width:110px;font-size:95%&amp;quot;|&lt;br /&gt;
*[[:Category:Software_Assurance_Maturity_Model|SAMM]]&lt;br /&gt;
*[[:Category:OWASP Legal Project|Contracting]]&lt;br /&gt;
*'''[[:Category:OWASP_Project|More...]]'''&lt;br /&gt;
&lt;br /&gt;
|} &amp;lt;!-- End Banner --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[https://www.owasp.org/index.php/Membership/2012_Election '''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;***2012 ELECTION INFORMATION***''']&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%;background:none;&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size:95%;text-align:left;color:#000&amp;quot;|[[About The Open Web Application Security Project|About]] '''·'''  [[Searching|Searching]] '''·''' [[Tutorial|Editing]] '''·''' [[How to add a new article|New Article]]  '''·'''  [[OWASP Categories]]&lt;br /&gt;
|style=&amp;quot;font-size:95%;padding:10px 0;margin:0px;text-align:right;color:#000&amp;quot;|  [[Special:Statistics|Statistics]]  '''·'''  [https://www.owasp.org/index.php?title=Special:Recentchanges&amp;amp;limit=100&amp;amp;hidebots=0 Recent Changes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Main Content --&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width:100%;border-spacing:8px;margin:0px -8px&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of left-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Left Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Start of right-column --&amp;gt;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:50%;border:1px solid #cedff2;background-color:#f5faff;vertical-align:top&amp;quot;|{{Main Right Panel}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End of Main Content --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Member Area --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:OWASP Members Horizontal}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136761</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136761"/>
				<updated>2012-09-29T12:59:33Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: removing commenting around OpenX code.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/** Collapsible tables *********************************************************&lt;br /&gt;
 *&lt;br /&gt;
 *  Description: Allows tables to be collapsed, showing only the header. See&lt;br /&gt;
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.&lt;br /&gt;
 *  Maintainers: [[en:User:R. Koot]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var autoCollapse = 2;&lt;br /&gt;
var collapseCaption = 'hide';&lt;br /&gt;
var expandCaption = 'show';&lt;br /&gt;
 &lt;br /&gt;
function collapseTable( tableIndex ) {&lt;br /&gt;
        var Button = document.getElementById( 'collapseButton' + tableIndex );&lt;br /&gt;
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
        if ( !Table || !Button ) {&lt;br /&gt;
                return false;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        var Rows = Table.rows;&lt;br /&gt;
 &lt;br /&gt;
        if ( Button.firstChild.data == collapseCaption ) {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = expandCaption;&lt;br /&gt;
        } else {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = Rows[0].style.display;&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = collapseCaption;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function createCollapseButtons() {&lt;br /&gt;
        var tableIndex = 0;&lt;br /&gt;
        var NavigationBoxes = new Object();&lt;br /&gt;
        var Tables = document.getElementsByTagName( 'table' );&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0; i &amp;lt; Tables.length; i++ ) {&lt;br /&gt;
                if ( hasClass( Tables[i], 'collapsible' ) ) {&lt;br /&gt;
 &lt;br /&gt;
                        /* only add button and increment count if there is a header row to work with */&lt;br /&gt;
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];&lt;br /&gt;
                        if ( !HeaderRow ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];&lt;br /&gt;
                        if ( !Header ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
 &lt;br /&gt;
                        NavigationBoxes[tableIndex] = Tables[i];&lt;br /&gt;
                        Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
                        var Button = document.createElement( 'span' );&lt;br /&gt;
                        var ButtonLink = document.createElement( 'a' );&lt;br /&gt;
                        var ButtonText = document.createTextNode( collapseCaption );&lt;br /&gt;
 &lt;br /&gt;
                        Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]&lt;br /&gt;
 &lt;br /&gt;
                        ButtonLink.style.color = Header.style.color;&lt;br /&gt;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );&lt;br /&gt;
                        ButtonLink.setAttribute( 'href', &amp;quot;javascript:collapseTable(&amp;quot; + tableIndex + &amp;quot;);&amp;quot; );&lt;br /&gt;
                        ButtonLink.appendChild( ButtonText );&lt;br /&gt;
 &lt;br /&gt;
                        Button.appendChild( document.createTextNode( '[' ) );&lt;br /&gt;
                        Button.appendChild( ButtonLink );&lt;br /&gt;
                        Button.appendChild( document.createTextNode( ']' ) );&lt;br /&gt;
 &lt;br /&gt;
                        Header.insertBefore( Button, Header.childNodes[0] );&lt;br /&gt;
                        tableIndex++;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0;  i &amp;lt; tableIndex; i++ ) {&lt;br /&gt;
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex &amp;gt;= autoCollapse &amp;amp;&amp;amp; hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {&lt;br /&gt;
                        collapseTable( i );&lt;br /&gt;
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {&lt;br /&gt;
                        var element = NavigationBoxes[i];&lt;br /&gt;
                        while ( element = element.parentNode ) {&lt;br /&gt;
                                if ( hasClass( element, 'outercollapse' ) ) {&lt;br /&gt;
                                        collapseTable( i );&lt;br /&gt;
                                        break;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
addOnloadHook( createCollapseButtons );&lt;br /&gt;
 &lt;br /&gt;
/** Test if an element has a certain class **************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Description: Uses regular expressions and caching for better performance.&lt;br /&gt;
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var hasClass = ( function() {&lt;br /&gt;
        var reCache = {};&lt;br /&gt;
        return function( element, className ) {&lt;br /&gt;
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( &amp;quot;(?:\\s|^)&amp;quot; + className + &amp;quot;(?:\\s|$)&amp;quot; ) ) ).test( element.className );&lt;br /&gt;
        };&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* openx copy-and-paste code from https://d1.openx.org/spcjs.php?id=65157&amp;amp;amp;target=_blank */&lt;br /&gt;
&lt;br /&gt;
    if (typeof(OA_zones) != 'undefined') {&lt;br /&gt;
        var OA_zoneids = '';&lt;br /&gt;
        for (var zonename in OA_zones) OA_zoneids += escape(zonename+'=' + OA_zones[zonename] + &amp;quot;|&amp;quot;);&lt;br /&gt;
        OA_zoneids += '&amp;amp;amp;nz=1';&lt;br /&gt;
    } else {&lt;br /&gt;
        var OA_zoneids = escape('281199');&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof(OA_source) == 'undefined') { OA_source = ''; }&lt;br /&gt;
    var OA_p=location.protocol=='https:'?'https://d1.openx.org/spc.php':'http://d1.openx.org/spc.php';&lt;br /&gt;
    var OA_r=Math.floor(Math.random()*99999999);&lt;br /&gt;
    OA_output = new Array();&lt;br /&gt;
&lt;br /&gt;
    var OA_spc=&amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type='text/javascript' &amp;quot;;&lt;br /&gt;
    OA_spc+=&amp;quot;src='&amp;quot;+OA_p+&amp;quot;?zones=&amp;quot;+OA_zoneids;&lt;br /&gt;
    OA_spc+=&amp;quot;&amp;amp;amp;source=&amp;quot;+escape(OA_source)+&amp;quot;&amp;amp;amp;r=&amp;quot;+OA_r;&lt;br /&gt;
    OA_spc+=&amp;quot;&amp;amp;amp;amp%3Btarget=_blank&amp;quot;;&lt;br /&gt;
    OA_spc+=(document.charset ? '&amp;amp;amp;charset='+document.charset : (document.characterSet ? '&amp;amp;amp;charset='+document.characterSet : ''));&lt;br /&gt;
&lt;br /&gt;
    if (window.location) OA_spc+=&amp;quot;&amp;amp;amp;loc=&amp;quot;+escape(window.location);&lt;br /&gt;
    if (document.referrer) OA_spc+=&amp;quot;&amp;amp;amp;referer=&amp;quot;+escape(document.referrer);&lt;br /&gt;
    OA_spc+=&amp;quot;'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;&amp;quot;;&lt;br /&gt;
    document.write(OA_spc);&lt;br /&gt;
&lt;br /&gt;
    function OA_show(name) {&lt;br /&gt;
        if (typeof(OA_output[name]) == 'undefined') {&lt;br /&gt;
            return;&lt;br /&gt;
        } else {&lt;br /&gt;
            document.write(OA_output[name]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function OA_showpop(name) {&lt;br /&gt;
        zones = window.OA_zones ? window.OA_zones : false;&lt;br /&gt;
        var zoneid = name;&lt;br /&gt;
        if (typeof(window.OA_zones) != 'undefined') {&lt;br /&gt;
            if (typeof(zones[name]) == 'undefined') {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            zoneid = zones[name];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        OA_p=location.protocol=='https:'?'https://d1.openx.org/apu.php':'http://d1.openx.org/apu.php';&lt;br /&gt;
&lt;br /&gt;
        var OA_pop=&amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type='text/javascript' &amp;quot;;&lt;br /&gt;
        OA_pop+=&amp;quot;src='&amp;quot;+OA_p+&amp;quot;?zoneid=&amp;quot;+zoneid;&lt;br /&gt;
        OA_pop+=&amp;quot;&amp;amp;amp;source=&amp;quot;+escape(OA_source)+&amp;quot;&amp;amp;amp;r=&amp;quot;+OA_r;&lt;br /&gt;
        OA_spc+=&amp;quot;&amp;amp;amp;amp%3Btarget=_blank&amp;quot;;&lt;br /&gt;
        if (window.location) OA_pop+=&amp;quot;&amp;amp;amp;loc=&amp;quot;+escape(window.location);&lt;br /&gt;
        if (document.referrer) OA_pop+=&amp;quot;&amp;amp;amp;referer=&amp;quot;+escape(document.referrer);&lt;br /&gt;
        OA_pop+=&amp;quot;'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        document.write(OA_pop);&lt;br /&gt;
    }&lt;br /&gt;
var OA_fo = '';&lt;br /&gt;
OA_fo += &amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type=\'text/javascript\' src=\'https://d1.openx.org/fl.js\'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;\n&amp;quot;;&lt;br /&gt;
document.write(OA_fo);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* end of OpenX copy-and-paste */&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136760</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=MediaWiki:Common.js&amp;diff=136760"/>
				<updated>2012-09-29T12:36:42Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding OpenX global JS, instead of &amp;lt;script src&amp;gt;ing it from the third party adserver.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/** Collapsible tables *********************************************************&lt;br /&gt;
 *&lt;br /&gt;
 *  Description: Allows tables to be collapsed, showing only the header. See&lt;br /&gt;
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.&lt;br /&gt;
 *  Maintainers: [[en:User:R. Koot]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var autoCollapse = 2;&lt;br /&gt;
var collapseCaption = 'hide';&lt;br /&gt;
var expandCaption = 'show';&lt;br /&gt;
 &lt;br /&gt;
function collapseTable( tableIndex ) {&lt;br /&gt;
        var Button = document.getElementById( 'collapseButton' + tableIndex );&lt;br /&gt;
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
        if ( !Table || !Button ) {&lt;br /&gt;
                return false;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        var Rows = Table.rows;&lt;br /&gt;
 &lt;br /&gt;
        if ( Button.firstChild.data == collapseCaption ) {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = 'none';&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = expandCaption;&lt;br /&gt;
        } else {&lt;br /&gt;
                for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
                        Rows[i].style.display = Rows[0].style.display;&lt;br /&gt;
                }&lt;br /&gt;
                Button.firstChild.data = collapseCaption;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function createCollapseButtons() {&lt;br /&gt;
        var tableIndex = 0;&lt;br /&gt;
        var NavigationBoxes = new Object();&lt;br /&gt;
        var Tables = document.getElementsByTagName( 'table' );&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0; i &amp;lt; Tables.length; i++ ) {&lt;br /&gt;
                if ( hasClass( Tables[i], 'collapsible' ) ) {&lt;br /&gt;
 &lt;br /&gt;
                        /* only add button and increment count if there is a header row to work with */&lt;br /&gt;
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];&lt;br /&gt;
                        if ( !HeaderRow ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];&lt;br /&gt;
                        if ( !Header ) {&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
 &lt;br /&gt;
                        NavigationBoxes[tableIndex] = Tables[i];&lt;br /&gt;
                        Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
                        var Button = document.createElement( 'span' );&lt;br /&gt;
                        var ButtonLink = document.createElement( 'a' );&lt;br /&gt;
                        var ButtonText = document.createTextNode( collapseCaption );&lt;br /&gt;
 &lt;br /&gt;
                        Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]&lt;br /&gt;
 &lt;br /&gt;
                        ButtonLink.style.color = Header.style.color;&lt;br /&gt;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );&lt;br /&gt;
                        ButtonLink.setAttribute( 'href', &amp;quot;javascript:collapseTable(&amp;quot; + tableIndex + &amp;quot;);&amp;quot; );&lt;br /&gt;
                        ButtonLink.appendChild( ButtonText );&lt;br /&gt;
 &lt;br /&gt;
                        Button.appendChild( document.createTextNode( '[' ) );&lt;br /&gt;
                        Button.appendChild( ButtonLink );&lt;br /&gt;
                        Button.appendChild( document.createTextNode( ']' ) );&lt;br /&gt;
 &lt;br /&gt;
                        Header.insertBefore( Button, Header.childNodes[0] );&lt;br /&gt;
                        tableIndex++;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        for ( var i = 0;  i &amp;lt; tableIndex; i++ ) {&lt;br /&gt;
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex &amp;gt;= autoCollapse &amp;amp;&amp;amp; hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {&lt;br /&gt;
                        collapseTable( i );&lt;br /&gt;
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {&lt;br /&gt;
                        var element = NavigationBoxes[i];&lt;br /&gt;
                        while ( element = element.parentNode ) {&lt;br /&gt;
                                if ( hasClass( element, 'outercollapse' ) ) {&lt;br /&gt;
                                        collapseTable( i );&lt;br /&gt;
                                        break;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
addOnloadHook( createCollapseButtons );&lt;br /&gt;
 &lt;br /&gt;
/** Test if an element has a certain class **************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Description: Uses regular expressions and caching for better performance.&lt;br /&gt;
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var hasClass = ( function() {&lt;br /&gt;
        var reCache = {};&lt;br /&gt;
        return function( element, className ) {&lt;br /&gt;
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( &amp;quot;(?:\\s|^)&amp;quot; + className + &amp;quot;(?:\\s|$)&amp;quot; ) ) ).test( element.className );&lt;br /&gt;
        };&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* openx copy-and-paste code from https://d1.openx.org/spcjs.php?id=65157&amp;amp;amp;target=_blank&lt;br /&gt;
&lt;br /&gt;
    if (typeof(OA_zones) != 'undefined') {&lt;br /&gt;
        var OA_zoneids = '';&lt;br /&gt;
        for (var zonename in OA_zones) OA_zoneids += escape(zonename+'=' + OA_zones[zonename] + &amp;quot;|&amp;quot;);&lt;br /&gt;
        OA_zoneids += '&amp;amp;amp;nz=1';&lt;br /&gt;
    } else {&lt;br /&gt;
        var OA_zoneids = escape('281199');&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof(OA_source) == 'undefined') { OA_source = ''; }&lt;br /&gt;
    var OA_p=location.protocol=='https:'?'https://d1.openx.org/spc.php':'http://d1.openx.org/spc.php';&lt;br /&gt;
    var OA_r=Math.floor(Math.random()*99999999);&lt;br /&gt;
    OA_output = new Array();&lt;br /&gt;
&lt;br /&gt;
    var OA_spc=&amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type='text/javascript' &amp;quot;;&lt;br /&gt;
    OA_spc+=&amp;quot;src='&amp;quot;+OA_p+&amp;quot;?zones=&amp;quot;+OA_zoneids;&lt;br /&gt;
    OA_spc+=&amp;quot;&amp;amp;amp;source=&amp;quot;+escape(OA_source)+&amp;quot;&amp;amp;amp;r=&amp;quot;+OA_r;&lt;br /&gt;
    OA_spc+=&amp;quot;&amp;amp;amp;amp%3Btarget=_blank&amp;quot;;&lt;br /&gt;
    OA_spc+=(document.charset ? '&amp;amp;amp;charset='+document.charset : (document.characterSet ? '&amp;amp;amp;charset='+document.characterSet : ''));&lt;br /&gt;
&lt;br /&gt;
    if (window.location) OA_spc+=&amp;quot;&amp;amp;amp;loc=&amp;quot;+escape(window.location);&lt;br /&gt;
    if (document.referrer) OA_spc+=&amp;quot;&amp;amp;amp;referer=&amp;quot;+escape(document.referrer);&lt;br /&gt;
    OA_spc+=&amp;quot;'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;&amp;quot;;&lt;br /&gt;
    document.write(OA_spc);&lt;br /&gt;
&lt;br /&gt;
    function OA_show(name) {&lt;br /&gt;
        if (typeof(OA_output[name]) == 'undefined') {&lt;br /&gt;
            return;&lt;br /&gt;
        } else {&lt;br /&gt;
            document.write(OA_output[name]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function OA_showpop(name) {&lt;br /&gt;
        zones = window.OA_zones ? window.OA_zones : false;&lt;br /&gt;
        var zoneid = name;&lt;br /&gt;
        if (typeof(window.OA_zones) != 'undefined') {&lt;br /&gt;
            if (typeof(zones[name]) == 'undefined') {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            zoneid = zones[name];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        OA_p=location.protocol=='https:'?'https://d1.openx.org/apu.php':'http://d1.openx.org/apu.php';&lt;br /&gt;
&lt;br /&gt;
        var OA_pop=&amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type='text/javascript' &amp;quot;;&lt;br /&gt;
        OA_pop+=&amp;quot;src='&amp;quot;+OA_p+&amp;quot;?zoneid=&amp;quot;+zoneid;&lt;br /&gt;
        OA_pop+=&amp;quot;&amp;amp;amp;source=&amp;quot;+escape(OA_source)+&amp;quot;&amp;amp;amp;r=&amp;quot;+OA_r;&lt;br /&gt;
        OA_spc+=&amp;quot;&amp;amp;amp;amp%3Btarget=_blank&amp;quot;;&lt;br /&gt;
        if (window.location) OA_pop+=&amp;quot;&amp;amp;amp;loc=&amp;quot;+escape(window.location);&lt;br /&gt;
        if (document.referrer) OA_pop+=&amp;quot;&amp;amp;amp;referer=&amp;quot;+escape(document.referrer);&lt;br /&gt;
        OA_pop+=&amp;quot;'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        document.write(OA_pop);&lt;br /&gt;
    }&lt;br /&gt;
var OA_fo = '';&lt;br /&gt;
OA_fo += &amp;quot;&amp;lt;&amp;quot;+&amp;quot;script type=\'text/javascript\' src=\'https://d1.openx.org/fl.js\'&amp;gt;&amp;lt;&amp;quot;+&amp;quot;/script&amp;gt;\n&amp;quot;;&lt;br /&gt;
document.write(OA_fo);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=125556</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=125556"/>
				<updated>2012-03-04T17:49:04Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Updating Chapter Contacts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:alex.bauert@owasp.org Alex Bauert] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Gene Kim - Rugged DevOps - OWASP (MSP) - 7 November 2011 (61 minutes) [http://vimeo.com/36342207 Vimeo Video]&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP AppSec USA 2011 - September 20-23, 2011 ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2010 Day of Talks - October 8, 2010  ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP and [http://dc612.org DC612] hosted an awesome lineup of technical talks October 8, 2010.&lt;br /&gt;
&lt;br /&gt;
'''[[OWASP Minneapolis St Paul 2010 Conference|Visit the day of talks page for a recap]]'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for '''[[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]]''' at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. '''[[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]]''' or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a '''[[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]]''' at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:alex.bauert@owasp.org Alex Bauert] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Oversight:''' [mailto:dave@drstrangelove.net David Bryan]&lt;br /&gt;
&lt;br /&gt;
'''Content and Social Media:''' [Eric]&lt;br /&gt;
&lt;br /&gt;
'''Secure360 Representative:''' [mailto:alex.crittenden@netspi.com Alex Crittenden]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Tutorial&amp;diff=125555</id>
		<title>Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Tutorial&amp;diff=125555"/>
				<updated>2012-03-04T17:38:33Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Noting that the Toolbox link for&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Editing the OWASP Wiki==&lt;br /&gt;
&lt;br /&gt;
OWASP is built on the MediaWiki platform. Anyone can create an account and make the OWASP wiki better. To create a new account, click on the [[Special:Userlogin|create an account or log in]] link at the top-right of every page. When you make edits, please use the &amp;quot;preview&amp;quot; feature to make sure your changes are final, and then don't forget to save. Use the &amp;quot;edit summary&amp;quot; to describe what you did and why.&lt;br /&gt;
&lt;br /&gt;
Writing OWASP wiki articles is a bit different from writing on a standard word processor. Instead of a strict &amp;quot;what you see is what you get&amp;quot; approach, wiki uses simple text codes for formatting. The approach is similar to that used in writing HTML for web pages, but the codes are simpler. The [http://meta.wikimedia.org/wiki/Help:Contents MediaWiki help] is a great place to start learning about all the features available.  Another option for you to investigate is [http://www.openoffice.org OpenOffice] as you can edit pages and export them into MediaWiki format.&lt;br /&gt;
&lt;br /&gt;
==Style guidelines==&lt;br /&gt;
&lt;br /&gt;
In general, we follow the [http://en.wikipedia.org/wiki/Wikipedia:Tutorial_%28Keep_in_mind%29 editing guidelines] of Wikipedia. You should ensure that your additions to OWASP reflect a &amp;quot;Neutral Point of View&amp;quot; and a positive collaboration in the interest of better application security. Also, please remember that OWASP is not the right place for disclosure of actual vulnerabilities. The bugtraq or full-disclosure mailing lists are appropriate venues for that sort of thing.&lt;br /&gt;
&lt;br /&gt;
==Content guidelines==&lt;br /&gt;
&lt;br /&gt;
OWASP is not a place to promote commercial products or services. We strive to provide unbiased information that will enable organizations and individuals to build and operate more secure applications. Information about commercial products is allowed, but MUST follow these guidelines. Violations of these policies should be reported to [mailto:owasp@owasp.org owasp@owasp.org].&lt;br /&gt;
* Product discussions must mention all comparable tools available&lt;br /&gt;
* &amp;quot;Equal time&amp;quot; must be given to all tools discussed&lt;br /&gt;
* Unsubstantiable claims will not be allowed&lt;br /&gt;
* Discussions of products should include both good and bad&lt;br /&gt;
* Representatives of product companies must disclose their affiliation&lt;br /&gt;
&lt;br /&gt;
==Bold and italics==&lt;br /&gt;
Bold and italics are created like this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;''italics''&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; appears as ''italics''. (2 apostrophes on both sides)&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;'''bold'''&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; appears as '''bold'''. (3 apostrophes on both sides)&lt;br /&gt;
&lt;br /&gt;
==Headings and subheadings==&lt;br /&gt;
Headings and subheadings are an easy way to improve the organization of an article. If you can see two or more distinct topics being discussed, you can break up the article by inserting a heading for each section.&lt;br /&gt;
&lt;br /&gt;
Headings can be created like this:&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;==Top level heading==&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; (2 equals signs)&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;===Subheading===&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; (3 equals signs)&lt;br /&gt;
*&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;====Another level down====&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; (4 equals signs)&lt;br /&gt;
&lt;br /&gt;
==Discussion pages==&lt;br /&gt;
&lt;br /&gt;
There are &amp;quot;discussion&amp;quot; pages (also known as &amp;quot;talk&amp;quot; pages) associated with every article at OWASP. You can leave questions, comments, or ideas on these pages for other authors to review. These pages are a good place to propose ideas or discuss possible approaches to problems. You should &amp;quot;sign&amp;quot; your comments by adding four tilde characters (&amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;) after your comment. Use section headings for different topic areas.&lt;br /&gt;
&lt;br /&gt;
See [http://meta.wikimedia.org/wiki/Help:Wiki_markup_examples Wiki markup examples] for more examples&lt;br /&gt;
&lt;br /&gt;
==Internal links==&lt;br /&gt;
One thing that makes the OWASP wiki useful (and highly habit-forming) is extensive cross-listing by internal links.  These easily-created links allow users to access information related to the article they're reading.&lt;br /&gt;
&lt;br /&gt;
The easiest way to learn when to link is to look at OWASP (or Wikipedia) articles for examples.  If you're trying to decide whether to make a link or not, ask yourself &amp;quot;If I were reading this article, would the link be useful to me?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When you want to make a link to another OWASP page (called a &amp;lt;em&amp;gt;wiki link&amp;lt;/em&amp;gt;) you have to put it in double square brackets, like this:&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[[Threats]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use words other than the article title as the text of the link, you can do so by adding the &amp;quot;|&amp;quot; divider followed by the alternative name. For example, if you wanted to make a link to the [[Main Page]], but wanted it to say &amp;quot;OWASP home&amp;quot; you would write it as such:&lt;br /&gt;
:&amp;lt;tt&amp;gt;To view the article, &amp;lt;nowiki&amp;gt;[[Main Page|OWASP home]]&amp;lt;/nowiki&amp;gt;...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Images and files==&lt;br /&gt;
You can upload certain types of documents using the '''Upload File''' option under '''Toolbox''' in the lower lefthand part of the linkbar at the left side of any OWASP page. But you need to be logged in to see this option. We allow common image formats, Word documents, PowerPoint presentations, and PDF files. Choose your filename carefully, as you'll use that to reference the document from &lt;br /&gt;
the rest of the site. Note that MediaWiki uses the term &amp;quot;image&amp;quot; to mean any file.&lt;br /&gt;
&lt;br /&gt;
Use this syntax to reference files from your page ...&lt;br /&gt;
&lt;br /&gt;
* Single click to get &amp;quot;image&amp;quot; page:&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;[[Image:filename.ppt|PUT YOUR TITLE HERE]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Single click to show file:&lt;br /&gt;
      &amp;lt;nowiki&amp;gt;[http://www.owasp.org/index.php/Image:filename.ppt PUT YOUR TITLE HERE]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
OWASP makes extensive use of categories. Categories are used to &amp;quot;tag&amp;quot; articles in OWASP so that people can find them. An article can be in lots of categories at the same time. For example, an article discussing a flaw in the Java sandbox might be in the [[:Category:Java]], [[:Category:Vulnerability]], and [[:Category:Access Control]] categories at the same time.&lt;br /&gt;
&lt;br /&gt;
To add a category to an article, just add &amp;lt;nowiki&amp;gt;[[Category:XXX]]&amp;lt;/nowiki&amp;gt; to the end of the article, replacing the XXX with the name of the appropriate category.&lt;br /&gt;
&lt;br /&gt;
To reference a Category page, simply put a colon (''':''') at the beginning of the &amp;quot;Category&amp;quot; tag, like this:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[[:Category:Principles]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''It is very important to put in the correct categories so that other people can easily find your work.''' The best way to find which categories to put in is to look at pages on similar subjects, and check which categories they use. For example if you write an article about a type of tree, you may look at an article on another type of tree to see which categories could be appropriate.&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=125208</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=125208"/>
				<updated>2012-02-29T16:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Updating president contact. Used to be Adam Baso. Now is Alex Bauert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:alex.bauert@owasp.org Alex Bauert] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Gene Kim - Rugged DevOps - OWASP (MSP) - 7 November 2011 (61 minutes) [http://vimeo.com/36342207 Vimeo Video]&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP AppSec USA 2011 - September 20-23, 2011 ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2010 Day of Talks - October 8, 2010  ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP and [http://dc612.org DC612] hosted an awesome lineup of technical talks October 8, 2010.&lt;br /&gt;
&lt;br /&gt;
'''[[OWASP Minneapolis St Paul 2010 Conference|Visit the day of talks page for a recap]]'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for '''[[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]]''' at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. '''[[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]]''' or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a '''[[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]]''' at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:alex.bauert@owasp.org Alex Bauert] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123951</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123951"/>
				<updated>2012-02-08T04:22:13Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Fixing date header for October 8, 2010 day of talks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Gene Kim - Rugged DevOps - OWASP (MSP) - 7 November 2011 (61 minutes) [http://vimeo.com/36342207 Vimeo Video]&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP AppSec USA 2011 - September 20-23, 2011 ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2010 Day of Talks - October 8, 2010  ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP and [http://dc612.org DC612] hosted an awesome lineup of technical talks October 8, 2010.&lt;br /&gt;
&lt;br /&gt;
'''[[OWASP Minneapolis St Paul 2010 Conference|Visit the day of talks page for a recap]]'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for '''[[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]]''' at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. '''[[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]]''' or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a '''[[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]]''' at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123950</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123950"/>
				<updated>2012-02-08T04:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding AppSec USA 2011 link and 2010 day of talks link to Previous Events section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Gene Kim - Rugged DevOps - OWASP (MSP) - 7 November 2011 (61 minutes) [http://vimeo.com/36342207 Vimeo Video]&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP AppSec USA 2011 - September 20-23, 2011 ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2010 Day of Talks - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
OWASP MSP and [http://dc612.org DC612] hosted an awesome lineup of technical talks October 8, 2010.&lt;br /&gt;
&lt;br /&gt;
'''[[OWASP Minneapolis St Paul 2010 Conference|Visit the day of talks page for a recap]]'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for '''[[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]]''' at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. '''[[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]]''' or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a '''[[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]]''' at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123949</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123949"/>
				<updated>2012-02-08T04:13:27Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Adding Gene Kim video.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Gene Kim - Rugged DevOps - OWASP (MSP) - 7 November 2011 (61 minutes) [http://vimeo.com/36342207 Vimeo Video]&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123429</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123429"/>
				<updated>2012-01-30T03:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Updating verbiage.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its additional financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123428</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123428"/>
				<updated>2012-01-30T03:47:36Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Updating sponsorships.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OWASP would also like to thank Best Buy for its financial support of [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]], [[ESAPI|OWASP ESAPI]], and the [[OWASP_Appsec_Tutorial_Series|OWASP AppSec Tutorial Series]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123427</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123427"/>
				<updated>2012-01-30T03:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Updating David's e-mail address.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:AccuvantLogoNEW.jpg|120px|link=http://www.accuvant.com]] &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:Midwave.gif|140px|link=http://www.midwave.com]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:dave@drstrangelove.net David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123426</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123426"/>
				<updated>2012-01-30T03:03:05Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Fixing &amp;lt;headertabs&amp;gt;, adding social media widget, rearranging text at top of page, removing Joe (moving onto different security domain), modifying whitespace.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org http://www.appsecusa.org]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;|mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Academic Supporter membership]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:AccuvantLogoNEW.jpg|120px|link=http://www.accuvant.com]] &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:Midwave.gif|140px|link=http://www.midwave.com]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Upcoming Meetings and Events =&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
= Media and Documents =&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
= Previous Events =&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
= Chapter Contacts =&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:david.bryan@owasp.org David Bryan] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Social Media Links}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123417</id>
		<title>Minneapolis St Paul</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Minneapolis_St_Paul&amp;diff=123417"/>
				<updated>2012-01-30T00:40:04Z</updated>
		
		<summary type="html">&lt;p&gt;Webappsecguy: Undo revision 123416 by Webappsecguy (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Chapter Template|chaptername=Minneapolis-St. Paul (OWASP MSP)|extra=The chapter president is [mailto:adam.baso@owasp.org Adam Baso] and the vice president is [mailto:lorna.alamri@owasp.org Lorna Alamri]. OWASP MSP was host to OWASP's 2011 flagship outreach effort, '''OWASP AppSec USA 2011''', at the Minneapolis Convention Center September 20-23, 2011. Visit '''[http://www.appsecusa.org/ http://www.appsecusa.org/]''' to find materials from AppSec USA 2011!&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''Up Next:''' '''Marc Blanchou - [https://androidsecurecontainers.eventbrite.com Auditing Android Secure Containers]''' (live in person at Concord in Hopkins - [https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map]) on '''Monday, February 13, 2012'''. The presenter starts at 6:30 PM Central Time. |mailinglistsite=https://lists.owasp.org/mailman/listinfo/owasp-twincities|emailarchives=https://lists.owasp.org/pipermail/owasp-twincities}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Sponsorship/Membership  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;paypal&amp;gt;Minneapolis St Paul&amp;lt;/paypal&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Or consider the value of [http://www.owasp.org/index.php/Membership Individual, Organization, or Accredited University Supporter membership] to contribute to better application security in the Minneapolis-Saint Paul area, surrounding Twin Cities metropolitan region, greater Minnesota, and the global software community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Platinum Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px;width:340px;&amp;quot;&amp;gt;[[Image:Cargill.gif|link=http://www.cargill.com]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Best Buy logo.jpg|link=http://www.bestbuy.com/]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[[Image:Advance it minnesota logo.png|120px|link=http://advanceitmn.org]] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Gold Sponsors  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#FFFFFF;padding:10px; width:290px&amp;quot;&amp;gt;[[Image:AccuvantLogoNEW.jpg|120px|link=http://www.accuvant.com]] &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:Midwave.gif|140px|link=http://www.midwave.com]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Meetings and More  ==&lt;br /&gt;
&lt;br /&gt;
==== Upcoming Meetings and Events  ====&lt;br /&gt;
&lt;br /&gt;
=== Monday, February 13, 2012&amp;lt;br&amp;gt;Marc Blanchou&amp;lt;br&amp;gt;Auditing Android Secure Containers  ===&lt;br /&gt;
&lt;br /&gt;
'''Delivery Method:''' Live on site at Concord in Hopkins - presenter at 6:30 PM Central Time&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Meeting Location:''' Concord, 509 2nd Avenue S, Hopkins, MN 55343 ([https://maps.google.com/maps?q=509+2nd+Avenue+S+Hopkins,+MN+55343 Google Map])&lt;br /&gt;
&lt;br /&gt;
'''Register:''' [https://androidsecurecontainers.eventbrite.com/ https://androidsecurecontainers.eventbrite.com/] &lt;br /&gt;
&lt;br /&gt;
'''Bring your business card''' for the raffle!&lt;br /&gt;
&lt;br /&gt;
'''Thank you''' to [http://concordusa.com Concord] for sponsoring our meeting location, for providing snacks &amp;amp; refreshments, and for a raffle!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stay Updated  ===&lt;br /&gt;
&lt;br /&gt;
'''[https://lists.owasp.org/mailman/listinfo/owasp-twincities Click here to join the local chapter mailing list]''' &lt;br /&gt;
&lt;br /&gt;
'''Follow''' OWASP MSP on your favorite social media sites: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/groupInvitation?groupID=2184116]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/owaspmsp]] [[Image:Facebook_mini.png|link=http://www.facebook.com/pages/OWASP-Minneapolis-St-Paul-OWASP-MSP-OWASPMSP/113583361381]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Share''' OWASP MSP on your favorite social media sites:&lt;br /&gt;
&lt;br /&gt;
[[Image:Linkedin_mini.png|link=http://www.linkedin.com/shareArticle?mini=true&amp;amp;url=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;title=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page&amp;amp;summary=Official%20OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20home%20page.%20Video%2C%20audio%2C%20slides%2C%20and%20other%20information%20on%20previous%20and%20upcoming%20chapter%20meetings%2C%20events%2C%20and%20conferences.&amp;amp;source=OWASPMSP]] &lt;br /&gt;
[[Image:Twitter_mini.png|link=http://twitter.com/home?status=Checking%20out%20OWASP%20MSP%20at%20http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul.]] [[Image:Facebook_mini.png|link=http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;t=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page]] [[Image:Digg_mini.png|link=http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;title=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page&amp;amp;bodytext=Official%20OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20home%20page.%20Video%2C%20audio%2C%20slides%2C%20and%20other%20information%20on%20previous%20and%20upcoming%20chapter%20meetings%2C%20events%2C%20and%20conferences.]] [[Image:Delicious_mini.png|link=http://del.icio.us/post?url=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;title=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page]] [[Image:Reddit_mini.png|link=http://reddit.com/submit?url=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;title=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page]] [[Image:Myspace_mini.png|link=http://www.myspace.com/Modules/PostTo/Pages/?l=1&amp;amp;u=http%3A%2F%2Fwww.owasp.org%2Findex.php%2FMinneapolis_St_Paul&amp;amp;t=OWASP%20Minneapolis-St.%20Paul%20(OWASP%20MSP)%20Home%20Page]]&lt;br /&gt;
&lt;br /&gt;
=== Secure360  ===&lt;br /&gt;
&lt;br /&gt;
[http://www.secure360.org/ Secure360] is an annual conference providing high quality educational sessions and networking opportunities while working to identify developing trends in risk management, physical security, governance, audit, information security, contingency planning and human capital. &lt;br /&gt;
&lt;br /&gt;
=== DC612 Meetings  ===&lt;br /&gt;
&lt;br /&gt;
DC612 meets the 2nd Thursday of the month.&amp;lt;br&amp;gt; [http://www.dc612.org/ http://www.dc612.org/] &lt;br /&gt;
&lt;br /&gt;
==== Video/Audio/Slides/Handouts  ====&lt;br /&gt;
&lt;br /&gt;
Videos of past meetings are available at the [[OWASPMSP Videos]] node, the [http://vimeo.com/channels/owaspmsp OWASP MSP Vimeo Channel], and [http://vimeo.com/owasp http://vimeo.com/owasp]. &lt;br /&gt;
&lt;br /&gt;
=== Most Recent Content  ===&lt;br /&gt;
&lt;br /&gt;
Michael Coates - Attack Aware Applications (AppSensor) - OWASP (MSP) - 18 April 2011 (75 minutes) [https://owasp.webex.com/owasp/ldr.php?AT=pb&amp;amp;SP=MC&amp;amp;rID=87764002&amp;amp;rKey=14191b8f8c73dabc WebEx Replay]&lt;br /&gt;
&lt;br /&gt;
Dan Cornell - Smart Phones, Dumb Apps - OWASP (MSP) - 7 December 2010 (93 minutes) [http://vimeo.com/17692646 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Gunnar Peterson - Audit Logging Done Right - OWASP (MSP) - 20 September 2010 (55 minutes) [http://vimeo.com/15423426 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - How OWASP Works - OWASP (MSP) - 10 August 2010 (55 minutes) [http://vimeo.com/14343350 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
Dinis Cruz - O2 - OWASP (MSP) - 10 August 2010 (110 minutes) [http://vimeo.com/14392060 Vimeo Video] &lt;br /&gt;
&lt;br /&gt;
==== Previous Events  ====&lt;br /&gt;
&lt;br /&gt;
=== OWASP Minneapolis-St. Paul 2009 Half Day Conference - August 24, 2009  ===&lt;br /&gt;
&lt;br /&gt;
Thanks again for another year to all who joined us for [[OWASP Minneapolis St Paul 2009 Conference|an afternoon of information security presentations on August 24, 2009]] at the [http://www1.umn.edu/twincities/maps/StCen/StCen-map.html St. Paul Student Center] [http://www.spsc.umn.edu/about/directory/lower.php Auditorium/Theater] on the [http://www1.umn.edu/twincities/index.php University of Minnesota - Twin Cities] campus. [[OWASP Minneapolis St Paul 2009 Conference|Visit the conference page for a recap]] or '''[http://vimeo.com/channels/owaspmsp watch the video at Vimeo]'''. &lt;br /&gt;
&lt;br /&gt;
=== OWASP &amp;amp;amp; FLOSS Application Security Mini-Conference 2008 - October 21, 2008  ===&lt;br /&gt;
&lt;br /&gt;
Thanks to all who joined us on October 21, 2008 for a [[OWASP Minneapolis St Paul 2008 Conference|mini conference in October 2008]] at University of Minnesota's Saint Paul campus. Our first conference was a great success, with around 150 people attending! We were fortunate to have even higher attendance in 2009. &lt;br /&gt;
&lt;br /&gt;
==== Chapter Leaders/Contacts  ====&lt;br /&gt;
&lt;br /&gt;
'''President:''' [mailto:adam.baso@owasp.org Adam Baso] &lt;br /&gt;
&lt;br /&gt;
'''Vice President:''' [mailto:lorna.alamri@owasp.org Lorna Alamri] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:kuai.hinojosa@owasp.org Kuai Hinojosa] &lt;br /&gt;
&lt;br /&gt;
'''Board Member and Former OWASP MSP President:''' [mailto:bob.sullivan@owasp.org Bob Sullivan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' [mailto:david.bryan@owasp.org David Bryan] &lt;br /&gt;
&lt;br /&gt;
'''Board Member:''' Joe Teff &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Minnesota]]&lt;/div&gt;</summary>
		<author><name>Webappsecguy</name></author>	</entry>

	</feed>