<?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=Markgordon</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=Markgordon"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Markgordon"/>
		<updated>2026-05-06T12:55:47Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=HttpOnly&amp;diff=232658</id>
		<title>HttpOnly</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=HttpOnly&amp;diff=232658"/>
				<updated>2017-08-24T20:02:30Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Corrected a spelling error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The goal of this section is to introduce, discuss, and provide language specific mitigation techniques for HttpOnly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Who developed HttpOnly? When? &amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
According to a daily blog article by [http://www.networkcomputing.com/careers/no-cookie-you/1270585242 Jordan Wiens, “No cookie for you!”], HttpOnly cookies were first implemented in 2002 by Microsoft Internet Explorer developers for Internet Explorer 6 SP1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; What is HttpOnly? &amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
According to the [http://msdn2.microsoft.com/en-us/library/ms533046.aspx Microsoft Developer Network], HttpOnly is an ''additional flag'' included in a Set-Cookie HTTP response header. Using the HttpOnly flag when generating a cookie helps mitigate the risk of client side script accessing the protected cookie (if the browser supports it).&lt;br /&gt;
&lt;br /&gt;
*The example below shows the syntax used within the '''HTTP response header''':&lt;br /&gt;
&lt;br /&gt;
 Set-Cookie: &amp;lt;name&amp;gt;=&amp;lt;value&amp;gt;[; &amp;lt;Max-Age&amp;gt;=&amp;lt;age&amp;gt;]&lt;br /&gt;
 [; expires=&amp;lt;date&amp;gt;][; domain=&amp;lt;domain_name&amp;gt;]&lt;br /&gt;
 [; path=&amp;lt;some_path&amp;gt;][; secure][; HttpOnly]&lt;br /&gt;
&lt;br /&gt;
If the HttpOnly flag (optional) is included in the HTTP response header, the cookie cannot be accessed through client side script (again if the browser supports this flag). As a result, even if a cross-site scripting '''(XSS)''' flaw exists, and a user accidentally accesses a link that exploits this flaw, the browser (primarily Internet Explorer) will not reveal the cookie to a third party.&lt;br /&gt;
&lt;br /&gt;
If a browser does not support HttpOnly and a website attempts to set an HttpOnly cookie, the HttpOnly flag will be ignored by the browser, thus creating a traditional, script accessible cookie. As a result, the cookie (typically your session cookie) becomes vulnerable to theft of modification by malicious script. [http://msdn2.microsoft.com/en-us/library/ms533046.aspx Mitigating].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt;Mitigating the Most Common XSS attack using HttpOnly&amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
According to [http://msdn2.microsoft.com/en-us/library/ms972826.aspx Michael Howard], Senior Security Program Manager in the Secure Windows Initiative group at Microsoft, the majority of XSS attacks target theft of session cookies. A server could help mitigate this issue by setting the HttpOnly flag on a cookie it creates, indicating the cookie should not be accessible on the client.&lt;br /&gt;
&lt;br /&gt;
If a browser that supports HttpOnly detects a cookie containing the HttpOnly flag, and client side script code attempts to read the cookie, the browser ''returns an empty string'' as the result. This causes the attack to fail by preventing the malicious (usually XSS) code from sending the data to an attacker's website.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt;Using Java to Set HttpOnly&amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Since Java Enterprise Edition 6 (JEE 6), which adopted Java Servlet 3.0 technology, it's programmatically easy to set the HttpOnly flag on a cookie.&lt;br /&gt;
&lt;br /&gt;
In fact &amp;lt;code&amp;gt;setHttpOnly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;isHttpOnly&amp;lt;/code&amp;gt; methods are available in the &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt; interface [http://java.sun.com/javaee/6/docs/api/javax/servlet/http/Cookie.html#setHttpOnly%28boolean%29], and also for session cookies (JSESSIONID) [http://java.sun.com/javaee/6/docs/api/javax/servlet/SessionCookieConfig.html#setHttpOnly%28boolean%29]:&lt;br /&gt;
 Cookie cookie = getMyCookie(&amp;quot;myCookieName&amp;quot;);&lt;br /&gt;
 cookie.setHttpOnly(true);&lt;br /&gt;
&lt;br /&gt;
Moreover, since JEE 6 it's also declaratively easy setting &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; flag in a session cookie by applying the following configuration in the deployment descriptor &amp;lt;code&amp;gt;WEB-INF/web.xml&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;amp;lt;session-config&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;cookie-config&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;http-only&amp;amp;gt;true&amp;amp;lt;/http-only&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/cookie-config&amp;gt;&lt;br /&gt;
 &amp;amp;lt;/session-config&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Java Enterprise Edition versions ''prior'' to JEE 6 a common '''workaround''' is to overwrite the &amp;lt;code&amp;gt;SET-COOKIE&amp;lt;/code&amp;gt; HTTP response header with a session cookie value that explicitly appends the &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
 String sessionid = request.getSession().getId();&lt;br /&gt;
 // be careful overwriting: JSESSIONID may have been set with other flags&lt;br /&gt;
 response.setHeader(&amp;quot;SET-COOKIE&amp;quot;, &amp;quot;JSESSIONID=&amp;quot; + sessionid + &amp;quot;; HttpOnly&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
In this context, overwriting, despite appropriate for the &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; flag, is discouraged because the JSESSIONID may have been set with other flags. A better workaround is taking care of the previously set flags or using the [[ESAPI#Java_EE]] library: in fact the &amp;lt;code&amp;gt;addCookie&amp;lt;/code&amp;gt; method of the &amp;lt;code&amp;gt;SecurityWrapperResponse&amp;lt;/code&amp;gt; [http://code.google.com/p/owasp-esapi-java/source/browse/tags/esapi-2.0.1/src/main/java/org/owasp/esapi/filters/SecurityWrapperResponse.java] takes care of previously set flags for us. So we could write a servlet filter as the following one:&lt;br /&gt;
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {&lt;br /&gt;
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;&lt;br /&gt;
     HttpServletResponse httpServletResponse = (HttpServletResponse) response;&lt;br /&gt;
     // if errors exist then create a sanitized cookie header and continue&lt;br /&gt;
     SecurityWrapperResponse securityWrapperResponse = new SecurityWrapperResponse(httpServletResponse, &amp;quot;sanitize&amp;quot;);&lt;br /&gt;
     Cookie[] cookies = httpServletRequest.getCookies();&lt;br /&gt;
     if (cookies != null) {&lt;br /&gt;
         for (int i = 0; i &amp;lt; cookies.length; i++) {&lt;br /&gt;
             Cookie cookie = cookies[i];&lt;br /&gt;
             if (cookie != null) {&lt;br /&gt;
                 // ESAPI.securityConfiguration().getHttpSessionIdName() returns JSESSIONID by default configuration&lt;br /&gt;
                 if (ESAPI.securityConfiguration().getHttpSessionIdName().equals(cookie.getName())) {&lt;br /&gt;
                     securityWrapperResponse.addCookie(cookie);&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     filterChain.doFilter(request, response);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Some web application servers, that implement JEE 5, and servlet containers that implement Java Servlet 2.5 (part of JEE 5), also allow creating HttpOnly session cookies:&lt;br /&gt;
&lt;br /&gt;
* '''Tomcat 6''' In &amp;lt;code&amp;gt;context.xml&amp;lt;/code&amp;gt; set the &amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; tag's attribute &amp;lt;code&amp;gt;useHttpOnly&amp;lt;/code&amp;gt; [http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Common_Attributes] as follow:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;Context path=&amp;quot;/myWebApplicationPath&amp;quot; useHttpOnly=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''JBoss 5.0.1''' and '''JBOSS EAP 5.0.1''' In &amp;lt;code&amp;gt;\server\&amp;lt;myJBossServerInstance&amp;gt;\deploy\jbossweb.sar\context.xml&amp;lt;/code&amp;gt; set the &amp;lt;code&amp;gt;SessionCookie&amp;lt;/code&amp;gt; tag [https://community.jboss.org/message/598558#598558] as follow:&lt;br /&gt;
 &amp;lt;Context cookies=&amp;quot;true&amp;quot; crossContext=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;SessionCookie secure=&amp;quot;true&amp;quot; httpOnly=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;IBM Websphere&amp;lt;/b&amp;gt; offer HTTPOnly for session cookies as a configuration option.&lt;br /&gt;
http://pic.dhe.ibm.com/infocenter/tivihelp/v33r1/topic/com.ibm.mam.inswas.doc/install/t_configuringthehttponlyattribute.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt;Using .NET to Set HttpOnly&amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*By ''default'', '''.NET 2.0''' sets the HttpOnly attribute for&lt;br /&gt;
*#Session ID&lt;br /&gt;
*#Forms Authentication cookie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In .NET 2.0, HttpOnly can also be set via the HttpCookie object for all custom application cookies&lt;br /&gt;
*Via '''web.config''' in the system.web/httpCookies element&lt;br /&gt;
 &amp;lt;httpCookies httpOnlyCookies=&amp;quot;true&amp;quot; …&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Or '''programmatically'''&lt;br /&gt;
C# Code:&lt;br /&gt;
 HttpCookie myCookie = new HttpCookie(&amp;quot;myCookie&amp;quot;);&lt;br /&gt;
 myCookie.HttpOnly = true;&lt;br /&gt;
 Response.AppendCookie(myCookie);&lt;br /&gt;
&lt;br /&gt;
VB.NET Code:&lt;br /&gt;
 Dim myCookie As HttpCookie = new HttpCookie(&amp;quot;myCookie&amp;quot;)&lt;br /&gt;
 myCookie.HttpOnly = True&lt;br /&gt;
 Response.AppendCookie(myCookie)&lt;br /&gt;
&lt;br /&gt;
*However, in '''.NET 1.1''', you would have to do this ''manually'', e.g.,&lt;br /&gt;
 Response.Cookies[cookie].Path += &amp;quot;;HttpOnly&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt;Using Python (cherryPy) to Set HttpOnly&amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Python Code (cherryPy):&amp;lt;br&amp;gt;&lt;br /&gt;
To use HTTP-Only cookies with Cherrypy sessions just add the following line in your configuration file:&amp;lt;br&amp;gt;&lt;br /&gt;
 tools.sessions.httponly = True&amp;lt;br&amp;gt;&lt;br /&gt;
If you use SLL you can also make your cookies secure (encrypted) to avoid &amp;quot;man-in-the-middle&amp;quot; cookies reading with:&amp;lt;br&amp;gt;&lt;br /&gt;
 tools.sessions.secure = True&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Using PHP to set HttpOnly &amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
PHP supports setting the HttpOnly flag since version 5.2.0 (November 2006).&lt;br /&gt;
&lt;br /&gt;
For session cookies managed by PHP, the flag is set either permanently in php.ini [http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly PHP manual on ''HttpOnly''] through the parameter:&lt;br /&gt;
 session.cookie_httponly = True&lt;br /&gt;
or in and during a script via the function[http://pl.php.net/manual/en/function.session-set-cookie-params.php]:&lt;br /&gt;
 void session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  &lt;br /&gt;
                                   [, bool $secure= false  [, bool $httponly= false  ]]]] )&lt;br /&gt;
For application cookies last parameter in setcookie() sets HttpOnly flag[http://pl.php.net/setcookie]:&lt;br /&gt;
 bool setcookie  ( string $name  [, string $value  [, int $expire= 0  [, string $path  &lt;br /&gt;
                  [, string $domain  [, bool $secure= false  [, bool $httponly= false  ]]]]]] )&lt;br /&gt;
&lt;br /&gt;
===Web Application Firewalls===&lt;br /&gt;
If code changes are infeasible, web application firewalls can be used to add HttpOnly to session cookies:&lt;br /&gt;
&lt;br /&gt;
* Mod_security - using SecRule and Header directives[http://blog.modsecurity.org/2008/12/fixing-both-missing-httponly-and-secure-cookie-flags.html]&lt;br /&gt;
* ESAPI WAF[http://code.google.com/p/owasp-esapi-java/downloads/list] using ''add-http-only-flag'' directive[http://www.slideshare.net/llamakong/owasp-esapi-waf-appsec-dc-2009]&lt;br /&gt;
&lt;br /&gt;
==Browsers Supporting HttpOnly==&lt;br /&gt;
&lt;br /&gt;
Using WebGoat's HttpOnly lesson, the following web browsers have been tested for HttpOnly support. If the browsers enforces HttpOnly, a client side script will be unable to read or write the session cookie. However, there is currently no prevention of reading or writing the session cookie via a XMLHTTPRequest.&lt;br /&gt;
&lt;br /&gt;
Note: These results may be out of date as this page is not well maintained. A great page that is focused on keeping up with the status of browsers is at: http://www.browserscope.org/?category=security. Just look at the HttpOnly column. The Browserscope site does not provide as much detail on HttpOnly as this page, but provides lots of other details this page does not.&lt;br /&gt;
&lt;br /&gt;
Our results as of Feb 2009 are listed below in '''table 1'''.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|+ '''Table 1:''' Browsers Supporting HttpOnly&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:black; color:white&amp;quot; | '''Browser'''&lt;br /&gt;
! style=&amp;quot;background:black; color:white&amp;quot; | '''Version'''&lt;br /&gt;
! style=&amp;quot;background:black; color:white&amp;quot; | '''Prevents Reads'''&lt;br /&gt;
! style=&amp;quot;background:black; color:white&amp;quot; | '''Prevents Writes'''&lt;br /&gt;
! style=&amp;quot;background:black; color:white&amp;quot; | '''Prevents Read within XMLHTTPResponse*'''&lt;br /&gt;
|-&lt;br /&gt;
| Microsoft Internet Explorer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8 Beta 2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partially (set-cookie is protected, but not set-cookie2, see [http://www.microsoft.com/technet/security/bulletin/ms08-069.mspx]). Fully patched IE8 passes http://ha.ckers.org/httponly.cgi&lt;br /&gt;
|-&lt;br /&gt;
| Microsoft Internet Explorer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partially (set-cookie is protected, but not set-cookie2, see [http://www.microsoft.com/technet/security/bulletin/ms08-069.mspx]). Fully patched IE7 passes http://ha.ckers.org/httponly.cgi&lt;br /&gt;
|-&lt;br /&gt;
| Microsoft Internet Explorer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6 (SP1)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No (Possible that ms08-069 fixed IE 6 too, please verify with http://ha.ckers.org/httponly.cgi and update this page!)&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Microsoft Internet Explorer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6 (fully patched)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unknown&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Mozilla Firefox&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3.0.0.6+&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes (see [http://manicode.blogspot.com/2009/02/firefox-3006-httponly-champion.html])&lt;br /&gt;
|-&lt;br /&gt;
| Netscape Navigator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 9.0b3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| Opera&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 9.23&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| Opera&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 9.50&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| Opera&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unknown&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Safari&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3.0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No (almost yes, see [https://bugs.webkit.org/show_bug.cgi?id=10957])&lt;br /&gt;
|-&lt;br /&gt;
| Safari&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| iPhone (Safari)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | iOS 4&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Google's Chrome&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Beta (initial public release)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No (almost yes, see [https://bugs.webkit.org/show_bug.cgi?id=10957])&lt;br /&gt;
|-&lt;br /&gt;
| Google's Chrome&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Android 2.3&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unknown&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unknown&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; An attacker could still read the session cookie in a response to an '''[http://ha.ckers.org/blog/20070719/firefox-implements-httponly-and-is-vulnerable-to-xmlhttprequest/ XmlHttpRequest]'''.&lt;br /&gt;
&lt;br /&gt;
As of 2011, 99% of browsers and most web application frameworks support HttpOnly&amp;lt;ref&amp;gt;[http://blog.fortify.com/blog/2011/11/02/Misunderstandings-on-HttpOnly-Cookie Misunderstandings on HttpOnly Cookie]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Using WebGoat to Test for HttpOnly Support ==&lt;br /&gt;
&lt;br /&gt;
The goal of this section is to provide a step-by-step example of testing your browser for HttpOnly support.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; WARNING&amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OWASP WEBGOAT HttpOnly lab is broken and does not show IE 8 Beta 2 with ms08-069 as complete in terms of HttpOnly XMLHTTPRequest header leakage protection. This error is being tracked via http://code.google.com/p/webgoat/issues/detail?id=18.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Getting Started &amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Click_link.JPG|thumb|175px|right|Figure 1 - Accessing WebGoat's HttpOnly Test Lesson]]&lt;br /&gt;
&lt;br /&gt;
Assuming you have installed and launched WebGoat, begin by navigating to the '''‘HttpOnly Test’ lesson''' located within the Cross-Site Scripting ('''XSS''') category. After loading the ‘HttpOnly Test’ lesson, as shown in '''figure 1''', you are now able to begin testing web browsers supporting HttpOnly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Lesson Goal &amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the ''HttpOnly flag'' is set, then your browser should not allow a client-side script to access the session cookie. Unfortunately, since the attribute is relatively new, several browsers may neglect to handle the new attribute properly.&lt;br /&gt;
&lt;br /&gt;
The '''purpose''' of this lesson is to test whether your browser supports the '''HttpOnly cookie flag'''. ''Note the value of the'' '''''unique2u cookie'''''. If your browser supports HttpOnly, and you ''enable'' it for a cookie, a client-side script should NOT be able to read OR write to that cookie, but the browser can still send its value to the server. However, some browsers only prevent client side read access, but do not prevent write access.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;color:#4682B4&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Testing Web Browsers for HttpOnly Support &amp;lt;/u&amp;gt; &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following test was performed on two browsers, '''Internet Explorer 7''' and '''Opera 9.22''', to demonstrate the results when the HttpOnly flag is enforced properly. As you will see, IE7 properly enforces the HttpOnly flag, whereas Opera does not properly enforce the HttpOnly flag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Disabling HttpOnly &amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 1) Select the option to '''turn HttpOnly off''' as shown below in '''figure 2'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig2-Disabling_HTTPOnly.PNG|frame|center|Figure 2 - Disabling HttpOnly]]&lt;br /&gt;
&lt;br /&gt;
 2) After turning HttpOnly off, select the '''“Read Cookie”''' button. &lt;br /&gt;
*An alert dialog box will display on the screen notifying you that ''since HttpOnly was not enabled'', the '''‘unique2u’ cookie''' was successfully read as shown below in '''figure 3'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig3-Read_HTTPOnly_Off.PNG|frame|center|Figure 3 - Cookie Successfully Read with HttpOnly Off]]&lt;br /&gt;
&lt;br /&gt;
 3) With HttpOnly remaining disabled, select the '''“Write Cookie” ''' button.&lt;br /&gt;
&lt;br /&gt;
*An alert dialog box will display on the screen notifying you that ''since HttpOnly was not enabled'', the '''‘unique2u’ cookie''' was successfully modified on the client side as shown below in '''figure 4'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig4-Write_HTTPOnly_Off.PNG|frame|center|Figure 4 - Cookie Successfully Written with HttpOnly Off]]&lt;br /&gt;
&lt;br /&gt;
*As you have seen thus far, '''browsing without HttpOnly''' on is a potential '''''threat'''''. Next, we will '''enable HttpOnly''' to demonstrate how this flag protects the cookie. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5 style=&amp;quot;color:#2E8B57&amp;quot;&amp;gt; &amp;lt;u&amp;gt; Enabling HttpOnly &amp;lt;/u&amp;gt; &amp;lt;/h5&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 4) Select the ''radio button'' to enable HttpOnly as shown below in '''figure 5'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig5-Turning_HTTPOnly_On.PNG|frame|center|Figure 5 - Enabling HttpOnly]]&lt;br /&gt;
&lt;br /&gt;
 5) After enabling HttpOnly, select the '''&amp;quot;Read Cookie&amp;quot;''' button.&lt;br /&gt;
&lt;br /&gt;
*If the browser enforces the HttpOnly flag properly, an alert dialog box will display only the session ID rather than the contents of the '''‘unique2u’ cookie''' as shown below in '''figure 6'''. &lt;br /&gt;
&lt;br /&gt;
[[Image:Fig6-Cookie_Read_Protection.PNG|frame|center|Figure 6 - Enforced Cookie Read Protection]]&lt;br /&gt;
&lt;br /&gt;
*However, if the browser does not enforce the HttpOnly flag properly, an alert dialog box will display both the '''‘unique2u’ cookie''' and session ID as shown below in '''figure 7'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig7-No_Cookie_Read_Protection.PNG|frame|center|Figure 7 - Unenforced Cookie Read Protection]]&lt;br /&gt;
&lt;br /&gt;
*Finally, we will test if the browser allows '''write access''' to the cookie with HttpOnly enabled.&lt;br /&gt;
&lt;br /&gt;
 6) Select the '''&amp;quot;Write Cookie&amp;quot;''' button.&lt;br /&gt;
&lt;br /&gt;
*If the browser enforces the HttpOnly flag properly, client side modification will be unsuccessful in writing to the '''‘unique2u’ cookie''' and an alert dialog box will display only containing the session ID as shown below in '''figure 8'''. &lt;br /&gt;
&lt;br /&gt;
[[Image:Fig6-Cookie_Read_Protection.PNG|frame|center|Figure 8 - Enforced Cookie Write Protection]]&lt;br /&gt;
&lt;br /&gt;
*However, if the browser does not enforce the write protection property of HttpOnly flag for the '''‘unique2u’ cookie''', the cookie will be successfully modified to ''HACKED'' on the client side as shown below in '''figure 9'''.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fig9-No_Cookie_Write_Protection.PNG|frame|center|Figure 9 - Unenforced Cookie Write Protection]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
# [https://cwe.mitre.org/data/definitions/1004.html CWE-1004: Sensitive Cookie Without 'HttpOnly' Flag]&lt;br /&gt;
# Wiens, Jordan [http://www.networkcomputing.com/careers/no-cookie-you/1270585242 &amp;quot;No cookie for you!&amp;quot;]&lt;br /&gt;
# [http://msdn2.microsoft.com/en-us/library/ms533046.aspx Mitigating Cross-site Scripting with HTTP-Only Cookies]&lt;br /&gt;
# Howard, Michael. [http://msdn2.microsoft.com/en-us/library/ms972826.aspx Some Bad News and Some Good News]&lt;br /&gt;
# MSDN. [http://msdn.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx Setting the HttpOnly propery in .NET]&lt;br /&gt;
# [http://seckb.yehg.net/2012/06/xss-gaining-access-to-httponly-cookie.html XSS: Gaining access to HttpOnly Cookie in 2012]&lt;br /&gt;
# [http://stackoverflow.com/questions/13147113/setting-an-httponly-cookie-with-javax-servlet-2-5 Setting HttpOnly in Java]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=229873</id>
		<title>User talk:Markgordon</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=229873"/>
				<updated>2017-05-22T03:12:36Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=229872</id>
		<title>User talk:Markgordon</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=229872"/>
				<updated>2017-05-22T03:12:01Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm Mark Gordon, living &amp;amp; working in Canada. I'm a software developer with a strong interest in infosec.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:OWASP_Anti-Ransomware_Guide_Projec&amp;diff=229662</id>
		<title>Talk:OWASP Anti-Ransomware Guide Projec</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:OWASP_Anti-Ransomware_Guide_Projec&amp;diff=229662"/>
				<updated>2017-05-15T20:54:56Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: This page created after following an @OWASP tweet. Why this page?!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I understand OWASP's purpose to be helping developers create software without vulnerabilities. &amp;quot;Anti-ransomware&amp;quot; is more a matter of operations and operating systems.&lt;br /&gt;
&lt;br /&gt;
Arrived at this page from an [https://twitter.com/owasp/status/864208775116443649 OWASP tweet]: &amp;quot;Ensure your firewall is configured for egress filtering as well as ingress filtering. #Ransomware #wannacry&amp;quot;&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Markgordon&amp;diff=216812</id>
		<title>User:Markgordon</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Markgordon&amp;diff=216812"/>
				<updated>2016-05-12T05:17:49Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Who, me?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Canadian software developer with a penchant for infosec and craft beer.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Key_Management_Cheat_Sheet&amp;diff=216811</id>
		<title>Talk:Key Management Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Key_Management_Cheat_Sheet&amp;diff=216811"/>
				<updated>2016-05-12T05:11:26Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Key rotation?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Any plans to discuss key rotation?&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212485</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212485"/>
				<updated>2016-04-05T05:14:53Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Resurrection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resurrection ==&lt;br /&gt;
'''Update, 2016.4.4'''. After a nine year rest, the Edmonton chapter has been resurrected! Please stay tuned&lt;br /&gt;
&lt;br /&gt;
{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:mark.gordon@owasp.org Mark Gordon]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
==== Local News ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Chapter Meetings ====&lt;br /&gt;
Our chapter's LAST meeting took place April 10, 2007 at 6:00 PM. The topic was &amp;quot;Using OWASP WSFuzzer for Web Service Penetration Testing&amp;quot;, by Mark Gordon.&lt;br /&gt;
&lt;br /&gt;
You don't need to bring an understanding of web services to the talk. After a 5-minute introduction to the basics of web services you will know plenty of new buzzwords, enough to impress your friends and befuddle your enemies. After the intro Mark will demonstrate several concrete examples of how [http://www.owasp.org/index.php/Category:OWASP_WSFuzzer_Project WSFuzzer] helps automate testing web services for vulnerabilities. If time permits we can also discuss other details of web services such as using Akamai for better performance and the acronym soup that is the world of [http://en.wikipedia.org/wiki/Service-oriented_architecture SOA].&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;br /&gt;
* Pub Night(!); discussed strategies for secure use of personal web applications&lt;br /&gt;
* &amp;quot;Building Defensible Web App Architectures&amp;quot;, by Jason Meltzer of Strange Research&lt;br /&gt;
&lt;br /&gt;
==== Edmonton OWASP Chapter Leaders ====&lt;br /&gt;
The chapter leader is_________________&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Alberta]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212468</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212468"/>
				<updated>2016-04-04T22:23:36Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Announce resurrection of chapter.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Resurrection ====&lt;br /&gt;
'''Update, 2016.4.4'''. After a nine year rest, the Edmonton chapter has been resurrected! Please stay tuned&lt;br /&gt;
&lt;br /&gt;
{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:mark.gordon@owasp.org Mark Gordon]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
==== Local News ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Chapter Meetings ====&lt;br /&gt;
Our chapter's LAST meeting took place April 10, 2007 at 6:00 PM. The topic was &amp;quot;Using OWASP WSFuzzer for Web Service Penetration Testing&amp;quot;, by Mark Gordon.&lt;br /&gt;
&lt;br /&gt;
You don't need to bring an understanding of web services to the talk. After a 5-minute introduction to the basics of web services you will know plenty of new buzzwords, enough to impress your friends and befuddle your enemies. After the intro Mark will demonstrate several concrete examples of how [http://www.owasp.org/index.php/Category:OWASP_WSFuzzer_Project WSFuzzer] helps automate testing web services for vulnerabilities. If time permits we can also discuss other details of web services such as using Akamai for better performance and the acronym soup that is the world of [http://en.wikipedia.org/wiki/Service-oriented_architecture SOA].&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;br /&gt;
* Pub Night(!); discussed strategies for secure use of personal web applications&lt;br /&gt;
* &amp;quot;Building Defensible Web App Architectures&amp;quot;, by Jason Meltzer of Strange Research&lt;br /&gt;
&lt;br /&gt;
==== Edmonton OWASP Chapter Leaders ====&lt;br /&gt;
The chapter leader is_________________&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Alberta]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212465</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=212465"/>
				<updated>2016-04-04T22:19:55Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Chapter Meetings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:mark.gordon@owasp.org Mark Gordon]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
==== Local News ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Chapter Meetings ====&lt;br /&gt;
Our chapter's LAST meeting took place April 10, 2007 at 6:00 PM. The topic was &amp;quot;Using OWASP WSFuzzer for Web Service Penetration Testing&amp;quot;, by Mark Gordon.&lt;br /&gt;
&lt;br /&gt;
You don't need to bring an understanding of web services to the talk. After a 5-minute introduction to the basics of web services you will know plenty of new buzzwords, enough to impress your friends and befuddle your enemies. After the intro Mark will demonstrate several concrete examples of how [http://www.owasp.org/index.php/Category:OWASP_WSFuzzer_Project WSFuzzer] helps automate testing web services for vulnerabilities. If time permits we can also discuss other details of web services such as using Akamai for better performance and the acronym soup that is the world of [http://en.wikipedia.org/wiki/Service-oriented_architecture SOA].&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;br /&gt;
* Pub Night(!); discussed strategies for secure use of personal web applications&lt;br /&gt;
* &amp;quot;Building Defensible Web App Architectures&amp;quot;, by Jason Meltzer of Strange Research&lt;br /&gt;
&lt;br /&gt;
==== Edmonton OWASP Chapter Leaders ====&lt;br /&gt;
The chapter leader is_________________&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Alberta]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Talk:Bytecode_obfuscation&amp;diff=206704</id>
		<title>Talk:Bytecode obfuscation</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Talk:Bytecode_obfuscation&amp;diff=206704"/>
				<updated>2016-01-17T21:51:22Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: This page may not be appropriate for OWASP to host.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Status==&lt;br /&gt;
Needs review&lt;br /&gt;
==Authors==&lt;br /&gt;
* Pierre Parrend&lt;br /&gt;
&lt;br /&gt;
==Meta==&lt;br /&gt;
Why does the ''Open'' Web Application Security Project contain a page on bytecode obfuscation?!&lt;br /&gt;
&lt;br /&gt;
==Reviewers==&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==General Discussion==&lt;br /&gt;
&lt;br /&gt;
Relative to the categories of this article:&lt;br /&gt;
* the 'Countermeasure' category does not contain adequate sub-category. Should we add a 'Code Protection' one ?&lt;br /&gt;
* I put the article in the category 'Howto', because it is a pragmatic tutorial. However, it is not named 'Howto perform code obfuscation', and so looks strange in the list of howtos: https://www.owasp.org/index.php/Category:How_To.  &lt;br /&gt;
  This should be OK, there's another article &amp;quot;Webscarab getting started&amp;quot; which also doesn't start with howto&amp;quot; - [[User:Stephendv|Stephendv]] 02:00, 16 November 2006 (EST)&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206684</id>
		<title>Hashing Java</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206684"/>
				<updated>2016-01-17T04:57:30Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Fixed spelling error.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This page helps Java developers hash passwords safely. We rely on OWASP's [[Password Storage Cheat Sheet]] to explain hashing best practice and theory.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
&lt;br /&gt;
    public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) {&lt;br /&gt;
  &lt;br /&gt;
        try {&lt;br /&gt;
            SecretKeyFactory skf = SecretKeyFactory.getInstance( &amp;quot;PBKDF2WithHmacSHA512&amp;quot; );&lt;br /&gt;
            PBEKeySpec spec = new PBEKeySpec( password, salt, iterations, keyLength );&lt;br /&gt;
            SecretKey key = skf.generateSecret( spec );&lt;br /&gt;
            byte[] res = key.getEncoded( );&lt;br /&gt;
            return res;&lt;br /&gt;
  &lt;br /&gt;
        } catch( NoSuchAlgorithmException | InvalidKeySpecException e ) {&lt;br /&gt;
            throw new RuntimeException( e );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Guidance==&lt;br /&gt;
&lt;br /&gt;
The password and salt arguments are arrays, as is the result of the hashPassword function.&lt;br /&gt;
Sensitive data should be ''cleared'' after you have used it (set the array elements to zero).&lt;br /&gt;
&lt;br /&gt;
The example uses a Password Based Key Derivation Function 2 (PBKDF2), as discussed in the [[Password Storage Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
The ''salt'' argument should be random data and vary for each user. It should be at least 32 bytes long. Remember to save the salt with the hashed password!&lt;br /&gt;
&lt;br /&gt;
The ''iterations'' argument specifies how many times the PBKDF2 executes its underlying algorithm. A higher value is safer. You need to experiment on hardware equivalent to your production systems. As a starting point, find a value that requires one half second to execute. Scaling to huge number of users is beyond the scope of this document. Remember to save the value of iterations with the hashed password!&lt;br /&gt;
&lt;br /&gt;
A keyLength of 256 is safe.&lt;br /&gt;
&lt;br /&gt;
If the example code generates a NoSuchAlgorithmException, replace PBKDF2WithHmacSHA512 with PBKDF2WithHmacSHA1. Both are adequate to the task but you may be criticized when people see &amp;quot;SHA1&amp;quot; in the specification (SHA1 can be unsafe outside of the context of PBKDF2).&lt;br /&gt;
&lt;br /&gt;
The SecretKeyFactory and PBEKeySpec classes have been part of Java SE since version 1.4.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
See ''Iron-Clad Java: Building Secure Web Applications'' by Manico and Detlefsen, 2015, Oracle Press.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206683</id>
		<title>Hashing Java</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206683"/>
				<updated>2016-01-17T04:48:58Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Missing closing brace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This page helps Java developers hash passwords safely. We rely on OWASP's [[Password Storage Cheat Sheet]] to explain hashing best practice and theory.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
&lt;br /&gt;
    public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) {&lt;br /&gt;
  &lt;br /&gt;
        try {&lt;br /&gt;
            SecretKeyFactory skf = SecretKeyFactory.getInstance( &amp;quot;PBKDF2WithHmacSHA512&amp;quot; );&lt;br /&gt;
            PBEKeySpec spec = new PBEKeySpec( password, salt, iterations, keyLength );&lt;br /&gt;
            SecretKey key = skf.generateSecret( spec );&lt;br /&gt;
            byte[] res = key.getEncoded( );&lt;br /&gt;
            return res;&lt;br /&gt;
  &lt;br /&gt;
        } catch( NoSuchAlgorithmException | InvalidKeySpecException e ) {&lt;br /&gt;
            throw new RuntimeException( e );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Guidance==&lt;br /&gt;
&lt;br /&gt;
The password and salt arguments are arrays, as is the result of the hashPassword function.&lt;br /&gt;
Sensitive data should be ''cleared'' after you have used it (set the array elements to zero).&lt;br /&gt;
&lt;br /&gt;
The example uses a Password Based Key Derivation Function 2 (PBKDF2), as discussed in the [[Password Storage Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
The ''salt'' argument should be random data and vary for each user. It should be at least 32 bytes long. Remember to save the salt with the hashed password!&lt;br /&gt;
&lt;br /&gt;
The ''interations'' argument specifies how many times the PBKDF2 executes its underlying algorithm. A higher value is safer. You need to experiment on hardware equivalent to your production systems. As a starting point, find a value that requires one half second to execute. Scaling to huge number of users is beyond the scope of this document. Remember to save the value of iterations with the hashed password!&lt;br /&gt;
&lt;br /&gt;
A keyLength of 256 is safe.&lt;br /&gt;
&lt;br /&gt;
If the example code generates a NoSuchAlgorithmException, replace PBKDF2WithHmacSHA512 with PBKDF2WithHmacSHA1. Both are adequate to the task but you may be criticized when people see &amp;quot;SHA1&amp;quot; in the specification (SHA1 can be unsafe outside of the context of PBKDF2).&lt;br /&gt;
&lt;br /&gt;
The SecretKeyFactory and PBEKeySpec classes have been part of Java SE since version 1.4.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
See ''Iron-Clad Java: Building Secure Web Applications'' by Manico and Detlefsen, 2015, Oracle Press.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206622</id>
		<title>Hashing Java</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206622"/>
				<updated>2016-01-16T21:17:18Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Reworked code to avoid possible copyright issue. Switched PBKDF2WithHmacSHA1 to PBKDF2WithHmacSHA512 in case some code reviewer has read about SHA1 issues(!).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This page helps Java developers hash passwords safely. We rely on OWASP's [[Password Storage Cheat Sheet]] to explain hashing best practice and theory.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
&lt;br /&gt;
    public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) {&lt;br /&gt;
  &lt;br /&gt;
    try {&lt;br /&gt;
        SecretKeyFactory skf = SecretKeyFactory.getInstance( &amp;quot;PBKDF2WithHmacSHA512&amp;quot; );&lt;br /&gt;
        PBEKeySpec spec = new PBEKeySpec( password, salt, iterations, keyLength );&lt;br /&gt;
        SecretKey key = skf.generateSecret( spec );&lt;br /&gt;
        byte[] res = key.getEncoded( );&lt;br /&gt;
        return res;&lt;br /&gt;
  &lt;br /&gt;
    } catch( NoSuchAlgorithmException | InvalidKeySpecException e ) {&lt;br /&gt;
        throw new RuntimeException( e );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Guidance==&lt;br /&gt;
&lt;br /&gt;
The password and salt arguments are arrays, as is the result of the hashPassword function.&lt;br /&gt;
Sensitive data should be ''cleared'' after you have used it (set the array elements to zero).&lt;br /&gt;
&lt;br /&gt;
The example uses a Password Based Key Derivation Function 2 (PBKDF2), as discussed in the [[Password Storage Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
The ''salt'' argument should be random data and vary for each user. It should be at least 32 bytes long. Remember to save the salt with the hashed password!&lt;br /&gt;
&lt;br /&gt;
The ''interations'' argument specifies how many times the PBKDF2 executes its underlying algorithm. A higher value is safer. You need to experiment on hardware equivalent to your production systems. As a starting point, find a value that requires one half second to execute. Scaling to huge number of users is beyond the scope of this document. Remember to save the value of iterations with the hashed password!&lt;br /&gt;
&lt;br /&gt;
A keyLength of 256 is safe.&lt;br /&gt;
&lt;br /&gt;
If the example code generates a NoSuchAlgorithmException, replace PBKDF2WithHmacSHA512 with PBKDF2WithHmacSHA1. Both are adequate to the task but you may be criticized when people see &amp;quot;SHA1&amp;quot; in the specification (SHA1 can be unsafe outside of the context of PBKDF2).&lt;br /&gt;
&lt;br /&gt;
The SecretKeyFactory and PBEKeySpec classes have been part of Java SE since version 1.4.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
See ''Iron-Clad Java: Building Secure Web Applications'' by Manico and Detlefsen, 2015, Oracle Press.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206514</id>
		<title>Hashing Java</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=206514"/>
				<updated>2016-01-16T00:39:18Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Remove theory &amp;amp; motivation of hashing. Instead, direct the reader to OWASP Password Storage Cheat Sheet. Replace example guidance based on Manico &amp;amp; Detlefsen's Iron-Clad Java: Building Secure Web Applications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This page helps Java developers hash passwords safely. We rely on OWASP's [[Password Storage Cheat Sheet]] to explain the theory of hashing. Here we discuss only how Java developers can safely implement the advice in that cheat sheet.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
&lt;br /&gt;
    public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) {&lt;br /&gt;
  &lt;br /&gt;
    try {&lt;br /&gt;
        return SecretKeyFactory.getInstance( &amp;quot;PBKDF2WithHmacSHA1&amp;quot; ).generateSecret(&lt;br /&gt;
            new PBEKeySpec( password, salt, iterations, keyLength )).getEncoded( );&lt;br /&gt;
  &lt;br /&gt;
    } catch( NoSuchAlgorithmException | InvalidKeySpecException e ) {&lt;br /&gt;
        throw new RuntimeException( e );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Guidance==&lt;br /&gt;
&lt;br /&gt;
The password and salt arguments are arrays, as is the result of the hashPassword function.&lt;br /&gt;
Sensitive data should be ''cleared'' after you have used it (generally, this means set the data to nulls).&lt;br /&gt;
&lt;br /&gt;
The example uses a Password Based Key Derivation Function 2 (PBKDF2), as discussed in [[Password Storage Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
The ''salt'' argument should be random data and vary for each user. It should be at least 32 bytes long. Remember to save the salt with the hashed password!&lt;br /&gt;
&lt;br /&gt;
The ''interations'' argument specifies how many times the PBKDF2 executes its underlying algorithm. A higher value is safer. You need to experiment on hardware equivalent to your production systems. As a starting point, find a value that requires one half second to execute. Scaling to huge number of users is beyond the scope of this document. Remember to save the value of iterations with the hashed password!&lt;br /&gt;
&lt;br /&gt;
A keyLength of 256 is safe.&lt;br /&gt;
&lt;br /&gt;
The SecretKeyFactory and PBEKeySpec classes have been part of Java SE since version 1.4.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&lt;br /&gt;
See ''Iron-Clad Java: Building Secure Web Applications'' by Manico and Detlefsen, 2015, Oracle Press.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=205288</id>
		<title>Hashing Java</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Hashing_Java&amp;diff=205288"/>
				<updated>2015-12-16T19:04:53Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Grammatical correction to test my ability to edit this page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{taggedDocument&lt;br /&gt;
| type=old&lt;br /&gt;
| lastRevision=2010-08-30&lt;br /&gt;
| comment=The page should be updated or removed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Status ==&lt;br /&gt;
For more information on password storage for authentication, please visit the password storage cheatsheet here: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet .&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Most of today’s applications use login/password in order to authenticate. Users often use the same login/password for different kinds of applications. If the pair is stolen, everybody can access all the applications the user has access to. &lt;br /&gt;
&lt;br /&gt;
Too often passwords are stored as clear text. Thus the password can be read directly by the database’s administrator, super users or SQL Injection attack etc. The backup media is also vulnerable. &lt;br /&gt;
In order to solve this problem, passwords must be stored encrypted. Two kinds of encryption are available:&lt;br /&gt;
* One way functions (SHA-256 SHA-1 MD5, ..;) also known as Hashing functions&lt;br /&gt;
* Reversible encryption functions (DES, AES, …). &lt;br /&gt;
However, the reversible property of encryption function is useless for credentials storing (cf. OWASP Guide v2.0.1) :&lt;br /&gt;
&lt;br /&gt;
''Passwords are secrets. There is no reason to decrypt them under any circumstances. Helpdesk staff should be able to set new passwords (with an audit trail, obviously), not read back old passwords. Therefore, there is no reason to store passwords in a reversible form.''&lt;br /&gt;
&lt;br /&gt;
==Definition of  cryptographic Hashing function:==&lt;br /&gt;
A Hash function creates a fixed length small fingerprint (or message digest) from an unlimited input string.&lt;br /&gt;
&lt;br /&gt;
hash(X) -&amp;gt;Y          X is a infinite set and Y is a finite set.&lt;br /&gt;
&lt;br /&gt;
A good cryptographic Hash function must have these properties: &lt;br /&gt;
* Preimage  resistant : From the function output y it must impossible to compute the input x such that hash(x)=y. &lt;br /&gt;
* Second preimage  resistant : from an input x1 it must impossible to compute another input x2 (different of x1) such that hash(x1)=hash(x2).&lt;br /&gt;
* Collision resistant : It must be difficult to find two inputs x1 and x2 (x1&amp;lt;&amp;gt;x2) such that hash(x1)=hash(x2).&lt;br /&gt;
&lt;br /&gt;
'''Sample java code :''' &lt;br /&gt;
  import java.security.MessageDigest;&lt;br /&gt;
  &lt;br /&gt;
  public byte[] getHash(String password) throws NoSuchAlgorithmException {&lt;br /&gt;
        MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-1&amp;quot;);&lt;br /&gt;
        digest.reset();&lt;br /&gt;
        byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Credential storage.==&lt;br /&gt;
&lt;br /&gt;
If the password’s digest is stored in a database, an attacker should be unable to recover the password thanks to the preimage resistance. The only way to go past this would be a [[Brute force attack|brute force attack]], i.e. computing the hash of all possible passwords or a dictionary attack, i.e. computing all the often used password.&lt;br /&gt;
&lt;br /&gt;
==Why add salt ? ==&lt;br /&gt;
&lt;br /&gt;
If each password is simply hashed, identical passwords will have the same hash. There are two drawbacks to choosing to only storing the password’s hash: &lt;br /&gt;
*	Due to the birthday paradox (http://en.wikipedia.org/wiki/Birthday_paradox), the attacker can find a password very quickly especially if the number of passwords the database is large.&lt;br /&gt;
*	An attacker can use a list of precomputed hashes (http://en.wikipedia.org/wiki/Rainbow_table) to break passwords in seconds.&lt;br /&gt;
&lt;br /&gt;
In order to solve these problems, a salt can be concatenated to the password before the digest operation. &lt;br /&gt;
&lt;br /&gt;
A salt is a random number of a fixed length. This salt must be different for each stored entry. It must be stored as clear text next to the hashed password.&lt;br /&gt;
&lt;br /&gt;
In this configuration, an attacker must handle a brute force attack on each individual password. The database is now birthday attack/rainbow crack resistant.&lt;br /&gt;
&lt;br /&gt;
A 64-bit salt is recommended in RSA PKCS5 standard.&lt;br /&gt;
&lt;br /&gt;
'''Sample java code :''' &lt;br /&gt;
  import java.security.MessageDigest;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  public byte[] getHash(String password, byte[] salt) throws NoSuchAlgorithmException {&lt;br /&gt;
        MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
        digest.reset();&lt;br /&gt;
        digest.update(salt);&lt;br /&gt;
        return digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Hardening against the attacker's attack==&lt;br /&gt;
&lt;br /&gt;
To slow down the computation it is recommended to iterate the hash operation n times. While hashing the password n times does slow down hashing for both attackers and typical users, typical users don't really notice it being that hashing is such a small percentage of their total time interacting with the system. On the other hand, an attacker trying to crack passwords spends nearly 100% of their time hashing so hashing n times gives the appearance of slowing the attacker down by a factor of n while not noticeably affecting the typical user. &lt;br /&gt;
A minimum of 1000 operations is recommended in RSA PKCS5 standard.&lt;br /&gt;
&lt;br /&gt;
The stored password looks like this :&lt;br /&gt;
		Hash(hash(hash(hash(……….hash(password||salt)))))))))))))))&lt;br /&gt;
&lt;br /&gt;
To authenticate a user, the operation same as above must be performed, followed by a comparison of the two hashes.&lt;br /&gt;
&lt;br /&gt;
The hash function you need to use depends of your security policy. SHA-256 or SHA-512 is recommended for long term storage.&lt;br /&gt;
&lt;br /&gt;
'''Sample java code :''' &lt;br /&gt;
  import java.security.*;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
   public byte[] getHash(int iterationNb, String password, byte[] salt) throws NoSuchAlgorithmException {&lt;br /&gt;
        MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-1&amp;quot;);&lt;br /&gt;
        digest.reset();&lt;br /&gt;
        digest.update(salt);&lt;br /&gt;
        byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
        for (int i = 0; i &amp;lt; iterationNb; i++) {&lt;br /&gt;
            digest.reset();&lt;br /&gt;
            input = digest.digest(input);&lt;br /&gt;
        }&lt;br /&gt;
        return input;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Complete Java Sample==&lt;br /&gt;
In order to create the table needed by this application, call the method createTable().&lt;br /&gt;
It creates a TABLE called CREDENTIAL, with these fields : &lt;br /&gt;
* LOGIN VARCHAR (100)  PRIMARY KEY&lt;br /&gt;
* PASSWORD VARCHAR (32)&lt;br /&gt;
* SALT VARCHAR (32)&lt;br /&gt;
&lt;br /&gt;
In this database, the password and the salt are stored in Base64 representation.&lt;br /&gt;
&lt;br /&gt;
The method ''authenticate'' is used in order to authenticate a user, the method ''createUser'' is used to create a new user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  package org.psafix.memopwd;&lt;br /&gt;
  &lt;br /&gt;
  import java.security.MessageDigest;&lt;br /&gt;
  import java.security.NoSuchAlgorithmException;&lt;br /&gt;
  import java.io.IOException;&lt;br /&gt;
  import sun.misc.BASE64Decoder;&lt;br /&gt;
  import sun.misc.BASE64Encoder;&lt;br /&gt;
  import java.sql.*;&lt;br /&gt;
  import java.util.Arrays;&lt;br /&gt;
  import java.security.SecureRandom;&lt;br /&gt;
  &lt;br /&gt;
  public class Owasp {&lt;br /&gt;
    private final static int ITERATION_NUMBER = 1000;&lt;br /&gt;
  &lt;br /&gt;
    public Owasp() {&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * Authenticates the user with a given login and password&lt;br /&gt;
     * If password and/or login is null then always returns false.&lt;br /&gt;
     * If the user does not exist in the database returns false.&lt;br /&gt;
     * @param con Connection An open connection to a databse&lt;br /&gt;
     * @param login String The login of the user&lt;br /&gt;
     * @param password String The password of the user&lt;br /&gt;
     * @return boolean Returns true if the user is authenticated, false otherwise&lt;br /&gt;
     * @throws SQLException If the database is inconsistent or unavailable (&lt;br /&gt;
     *           (Two users with the same login, salt or digested password altered etc.)&lt;br /&gt;
     * @throws NoSuchAlgorithmException If the algorithm SHA-1 is not supported by the JVM&lt;br /&gt;
     */&lt;br /&gt;
    public boolean authenticate(Connection con, String login, String password)&lt;br /&gt;
            throws SQLException, NoSuchAlgorithmException{&lt;br /&gt;
        boolean authenticated=false;&lt;br /&gt;
        PreparedStatement ps = null;&lt;br /&gt;
        ResultSet rs = null;&lt;br /&gt;
        try {&lt;br /&gt;
            boolean userExist = true;&lt;br /&gt;
            // INPUT VALIDATION&lt;br /&gt;
            if (login==null||password==null){&lt;br /&gt;
                // TIME RESISTANT ATTACK&lt;br /&gt;
                // Computation time is equal to the time needed by a legitimate user&lt;br /&gt;
                userExist = false;&lt;br /&gt;
                login=&amp;quot;&amp;quot;;&lt;br /&gt;
                password=&amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
  &lt;br /&gt;
            ps = con.prepareStatement(&amp;quot;SELECT PASSWORD, SALT FROM CREDENTIAL WHERE LOGIN = ?&amp;quot;);&lt;br /&gt;
            ps.setString(1, login);&lt;br /&gt;
            rs = ps.executeQuery();&lt;br /&gt;
            String digest, salt;&lt;br /&gt;
            if (rs.next()) {&lt;br /&gt;
                digest = rs.getString(&amp;quot;PASSWORD&amp;quot;);&lt;br /&gt;
                salt = rs.getString(&amp;quot;SALT&amp;quot;);&lt;br /&gt;
                // DATABASE VALIDATION&lt;br /&gt;
                if (digest == null || salt == null) {&lt;br /&gt;
                    throw new SQLException(&amp;quot;Database inconsistant Salt or Digested Password altered&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                if (rs.next()) { // Should not append, because login is the primary key&lt;br /&gt;
                    throw new SQLException(&amp;quot;Database inconsistent two CREDENTIALS with the same LOGIN&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            } else { // TIME RESISTANT ATTACK (Even if the user does not exist the&lt;br /&gt;
                // Computation time is equal to the time needed for a legitimate user&lt;br /&gt;
                digest = &amp;quot;000000000000000000000000000=&amp;quot;;&lt;br /&gt;
                salt = &amp;quot;00000000000=&amp;quot;;&lt;br /&gt;
                userExist = false;&lt;br /&gt;
            }&lt;br /&gt;
  &lt;br /&gt;
            byte[] bDigest = base64ToByte(digest);&lt;br /&gt;
            byte[] bSalt = base64ToByte(salt);&lt;br /&gt;
  &lt;br /&gt;
            // Compute the new DIGEST&lt;br /&gt;
            byte[] proposedDigest = getHash(ITERATION_NUMBER, password, bSalt);&lt;br /&gt;
  &lt;br /&gt;
            return Arrays.equals(proposedDigest, bDigest) &amp;amp;&amp;amp; userExist;&lt;br /&gt;
        } catch (IOException ex){&lt;br /&gt;
            throw new SQLException(&amp;quot;Database inconsistant Salt or Digested Password altered&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        finally{&lt;br /&gt;
            close(rs);&lt;br /&gt;
            close(ps);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * Inserts a new user in the database&lt;br /&gt;
     * @param con Connection An open connection to a databse&lt;br /&gt;
     * @param login String The login of the user&lt;br /&gt;
     * @param password String The password of the user&lt;br /&gt;
     * @return boolean Returns true if the login and password are ok (not null and length(login)&amp;lt;=100&lt;br /&gt;
     * @throws SQLException If the database is unavailable&lt;br /&gt;
     * @throws NoSuchAlgorithmException If the algorithm SHA-1 or the SecureRandom is not supported by the JVM&lt;br /&gt;
     */&lt;br /&gt;
    public boolean createUser(Connection con, String login, String password)&lt;br /&gt;
            throws SQLException, NoSuchAlgorithmException&lt;br /&gt;
    {&lt;br /&gt;
        PreparedStatement ps = null;&lt;br /&gt;
        try {&lt;br /&gt;
            if (login!=null&amp;amp;&amp;amp;password!=null&amp;amp;&amp;amp;login.length()&amp;lt;=100){&lt;br /&gt;
                // Uses a secure Random not a simple Random&lt;br /&gt;
                SecureRandom random = SecureRandom.getInstance(&amp;quot;SHA1PRNG&amp;quot;);&lt;br /&gt;
                // Salt generation 64 bits long&lt;br /&gt;
                byte[] bSalt = new byte[8];&lt;br /&gt;
                random.nextBytes(bSalt);&lt;br /&gt;
                // Digest computation&lt;br /&gt;
                byte[] bDigest = getHash(ITERATION_NUMBER,password,bSalt);&lt;br /&gt;
                String sDigest = byteToBase64(bDigest);&lt;br /&gt;
                String sSalt = byteToBase64(bSalt);&lt;br /&gt;
  &lt;br /&gt;
                ps = con.prepareStatement(&amp;quot;INSERT INTO CREDENTIAL (LOGIN, PASSWORD, SALT) VALUES (?,?,?)&amp;quot;);&lt;br /&gt;
                ps.setString(1,login);&lt;br /&gt;
                ps.setString(2,sDigest);&lt;br /&gt;
                ps.setString(3,sSalt);&lt;br /&gt;
                ps.executeUpdate();&lt;br /&gt;
                return true;&lt;br /&gt;
            } else {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        } finally {&lt;br /&gt;
            close(ps);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * From a password, a number of iterations and a salt,&lt;br /&gt;
     * returns the corresponding digest&lt;br /&gt;
     * @param iterationNb int The number of iterations of the algorithm&lt;br /&gt;
     * @param password String The password to encrypt&lt;br /&gt;
     * @param salt byte[] The salt&lt;br /&gt;
     * @return byte[] The digested password&lt;br /&gt;
     * @throws NoSuchAlgorithmException If the algorithm doesn't exist&lt;br /&gt;
     */&lt;br /&gt;
    public byte[] getHash(int iterationNb, String password, byte[] salt) throws NoSuchAlgorithmException {&lt;br /&gt;
        MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-1&amp;quot;);&lt;br /&gt;
        digest.reset();&lt;br /&gt;
        digest.update(salt);&lt;br /&gt;
        byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
        for (int i = 0; i &amp;lt; iterationNb; i++) {&lt;br /&gt;
            digest.reset();&lt;br /&gt;
            input = digest.digest(input);&lt;br /&gt;
        }&lt;br /&gt;
        return input;&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    public void createTable(Connection con) throws SQLException{&lt;br /&gt;
        Statement st = null;&lt;br /&gt;
        try {&lt;br /&gt;
            st = con.createStatement();&lt;br /&gt;
            st.execute(&amp;quot;CREATE TABLE CREDENTIAL (LOGIN VARCHAR(100) PRIMARY KEY, PASSWORD VARCHAR(32) NOT NULL, SALT VARCHAR(32) NOT NULL)&amp;quot;);&lt;br /&gt;
        } finally {&lt;br /&gt;
            close(st);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * Closes the current statement&lt;br /&gt;
     * @param ps Statement&lt;br /&gt;
     */&lt;br /&gt;
    public void close(Statement ps) {&lt;br /&gt;
        if (ps!=null){&lt;br /&gt;
            try {&lt;br /&gt;
                ps.close();&lt;br /&gt;
            } catch (SQLException ignore) {&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * Closes the current resultset&lt;br /&gt;
     * @param ps Statement&lt;br /&gt;
     */&lt;br /&gt;
    public void close(ResultSet rs) {&lt;br /&gt;
        if (rs!=null){&lt;br /&gt;
            try {&lt;br /&gt;
                rs.close();&lt;br /&gt;
            } catch (SQLException ignore) {&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * From a base 64 representation, returns the corresponding byte[] &lt;br /&gt;
     * @param data String The base64 representation&lt;br /&gt;
     * @return byte[]&lt;br /&gt;
     * @throws IOException&lt;br /&gt;
     */&lt;br /&gt;
    public static byte[] base64ToByte(String data) throws IOException {&lt;br /&gt;
        BASE64Decoder decoder = new BASE64Decoder();&lt;br /&gt;
        return decoder.decodeBuffer(data);&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
    /**&lt;br /&gt;
     * From a byte[] returns a base 64 representation&lt;br /&gt;
     * @param data byte[]&lt;br /&gt;
     * @return String&lt;br /&gt;
     * @throws IOException&lt;br /&gt;
     */&lt;br /&gt;
    public static String byteToBase64(byte[] data){&lt;br /&gt;
        BASE64Encoder endecoder = new BASE64Encoder();&lt;br /&gt;
        return endecoder.encode(data);&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Java Project]]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=138439</id>
		<title>User talk:Markgordon</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User_talk:Markgordon&amp;diff=138439"/>
				<updated>2012-10-31T17:37:12Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Created page with &amp;quot;Greetings. I'm Mark Gordon, living in Edmonton, Alberta, Canada. I'm a software developer with a strong interest in infosec.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Greetings. I'm Mark Gordon, living in Edmonton, Alberta, Canada. I'm a software developer with a strong interest in infosec.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=17729</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=17729"/>
				<updated>2007-04-05T01:25:19Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Notice of the April 10, 2007 meeting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will take place Tuesday, April 10, 2007 at 6:00 PM at the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15. This [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map] guides you to Telus Plaza North.&lt;br /&gt;
&lt;br /&gt;
The April topic will be &amp;quot;Using OWASP WSFuzzer for Web Service Penetration Testing&amp;quot;, by Mark Gordon.&lt;br /&gt;
&lt;br /&gt;
You don't need to bring an understanding of web services to the talk. After a 5-minute introduction to the basics of web services you will know plenty of new buzzwords, enough to impress your friends and befuddle your enemies. After the intro Mark will demonstrate several concrete examples of how [http://www.owasp.org/index.php/Category:OWASP_WSFuzzer_Project WSFuzzer] helps automate testing web services for vulnerabilities. If time permits we can also discuss other details of web services such as using Akamai for better performance and the acronym soup that is the world of [http://en.wikipedia.org/wiki/Service-oriented_architecture SOA].&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;br /&gt;
* Pub Night(!); discussed strategies for secure use of personal web applications&lt;br /&gt;
* &amp;quot;Building Defensible Web App Architectures&amp;quot;, by Jason Meltzer of Strange Research&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=16364</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=16364"/>
				<updated>2007-02-09T15:47:20Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: February, 2007 Meeting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
''Note we return to Telus Plaza for the February meeting.''&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will take place Tuesday, February 27, 2007 at 6:00 PM at the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15. This [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map] guides you to Telus Plaza North.&lt;br /&gt;
&lt;br /&gt;
The February topic will be &amp;quot;Building Defensible Web App Architectures&amp;quot;, by Jason Meltzer of Strange Research, http://www.strangeresearch.com.&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;br /&gt;
* Pub Night(!); discussed strategies for secure use of personal web applications&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=15311</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=15311"/>
				<updated>2007-01-13T19:17:30Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
''Note change of time and venue for our next meeting.''&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be January 16, 2007 at 5:45 PM. This meeting will be an informal Pub Night, to be held at the Sherlock's on  [http://www.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10012+101A+Avenue+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=15&amp;amp;ll=53.542985,-113.490872&amp;amp;spn=0.013541,0.048752&amp;amp;om=1&amp;amp;iwloc=addr Rice Howard Way]. We've booked a room upstairs. We would like to use the opportunity to get to know each other a bit more and have a less formal set of discussions. Robert Martin will chat about his thoughts about the web-centric computing model for the future and the security requirements needed to make that happen. We anticipate having an open discussion about the benefits and challenges of secure web-centric computing.&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=15310</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=15310"/>
				<updated>2007-01-13T19:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
''Note change of time and venue for our next meeting.''&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be January 16, 2007 at 5:45 PM. This meeting will be an informal Pub Night, to be held at the Sherlock's on  [http://www.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10012+101A+Avenue+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=15&amp;amp;ll=53.542985,-113.490872&amp;amp;spn=0.013541,0.048752&amp;amp;om=1&amp;amp;iwloc=addr Rice Howard Way]. We would like to use the opportunity to get to know each other a bit more and have a less formal set of discussions. Robert Martin will chat about his thoughts about the web-centric computing model for the future and the security requirements needed to make that happen. We anticipate having an open discussion about the benefits and challenges of secure web-centric computing.&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=14343</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=14343"/>
				<updated>2006-12-14T06:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be January 16, 2007. Our speaker and topic are To Be Determined.&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday the 16th at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map] that highlights the meeting location.&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks (Yegor's [http://www.owasp.org/images/5/5e/XssYegorJbanov.pdf slideshow])&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:XssYegorJbanov.pdf&amp;diff=14342</id>
		<title>File:XssYegorJbanov.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:XssYegorJbanov.pdf&amp;diff=14342"/>
				<updated>2006-12-14T05:58:25Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: Yegor Jbanov's slideshow from his talk on Cross Site Scripting exploits, given to the OWASP Edmonton chapter, 2006.12.5.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yegor Jbanov's slideshow from his talk on Cross Site Scripting exploits, given to the OWASP Edmonton chapter, 2006.12.5.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=13982</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=13982"/>
				<updated>2006-12-06T04:46:04Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be January 16, 2007. Our speaker and topic are To Be Determined.&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday the 16th at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map] that highlights the meeting location.&lt;br /&gt;
&lt;br /&gt;
Previous meetings covered:&lt;br /&gt;
* OWASP's Top Ten Project&lt;br /&gt;
* OWASP's WebGoat insecure web application&lt;br /&gt;
* Cross Site Scripting Attacks&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=13865</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=13865"/>
				<updated>2006-11-30T15:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be Dec 5. Yegor Jbanov will talk on Cross Site Scripting (XSS) attacks. Yegor will present and analyze several examples of XSS exploits.&lt;br /&gt;
&lt;br /&gt;
Cross Site Scripting is item #4 on OWASP's Top Ten most critical web application security flaws. The Top Ten project describes the exploit this way: The web application can be used as a mechanism to transport an attack to an end user's browser. A successful attack can disclose the end user's session token, attack the local machine, or spoof content to fool the user.&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, December 5, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map] that highlights the meeting location.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=11134</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=11134"/>
				<updated>2006-10-27T01:42:03Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Our chapter's next meeting will be Dec 5. Yegor Jbanov will continue his overview of OWASP's WebGoat project. WebGoat is a deliberately insecure J2EE web application maintained by OWASP designed to teach web application security lessons. In each lesson, users must demonstrate their understanding of a security issue by exploiting a real vulnerability in the WebGoat application. For example, in one of the lessons the user must use SQL injection to steal fake credit card numbers. The application is a realistic teaching environment, providing users with hints and code to further explain the lesson.&lt;br /&gt;
&lt;br /&gt;
Yegor started his presentation at our October meeting. There was good discussion around the practical matters of how the security exploits work. Given the level of interest Yegor offered to present more exploits in the December meeting (Cross site scripting attacks and SQL Injection in particular!). Note: a knowledge of Java was ''not'' required to follow along.&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, December 5, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby before 6:00 so that we can escort you to the boardroom. The meeting will be over by 7:15.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=10841</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=10841"/>
				<updated>2006-10-19T15:01:01Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
October will see our chapter's 2nd meeting. Yegor Jbanov will introduce us to OWASP's WebGoat project. WebGoat is a deliberately insecure J2EE web application maintained by OWASP designed to teach web application security lessons. In each lesson, users must demonstrate their understanding of a security issue by exploiting a real vulnerability in the WebGoat application. For example, in one of the lessons the user must use SQL injection to steal fake credit card numbers. The application is a realistic teaching environment, providing users with hints and code to further explain the lesson.&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, October 24, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby so that we can escort you to the boardroom.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9602</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9602"/>
				<updated>2006-09-11T05:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
This September we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this project says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP [[Top Ten]] represents a broad consensus about what the most critical web application security flaws are.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, September 12, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby so that we can escort you to the boardroom.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9601</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9601"/>
				<updated>2006-09-11T05:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
This September we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this project says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP [[Top Ten]] represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, September 12, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby so that we can escort you to the boardroom.&lt;br /&gt;
&lt;br /&gt;
Here is a [http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;q=10025+Jasper+Ave+NW,+Edmonton,+AB&amp;amp;ie=UTF8&amp;amp;z=17&amp;amp;ll=53.54097,-113.491248&amp;amp;spn=0.004578,0.010493&amp;amp;t=h&amp;amp;om=1 map]&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9600</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9600"/>
				<updated>2006-09-11T05:41:31Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
This September we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this project says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP [[Top Ten]] represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, September 12, 2006 at 6:00 PM in the Telus Plaza North Tower. Please meet us in the building's lobby so that we can escort you to the boardroom.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9599</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9599"/>
				<updated>2006-09-11T05:35:21Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On September 12, 2006 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this project says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP [[Top Ten]] represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
The meeting will take place Tuesday, September 12 at 6:00 PM in the Telus Plaza North Tower. The room number will determined early Monday on the 11th and will be posted here at that time.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9285</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9285"/>
				<updated>2006-08-26T22:20:04Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On September 12, 2006 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this project says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
Time and coordinates for the meeting TBD. Probably downtown at the end of the workday.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9284</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9284"/>
				<updated>2006-08-26T22:19:25Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On September 12, 2006 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this page says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
Time and coordinates for the meeting TBD. Probably downtown at the end of the workday.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9283</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9283"/>
				<updated>2006-08-26T22:18:58Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On the evening of September 12, 2006, we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this page says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
Time and coordinates for the meeting TBD. Probably downtown at the end of the workday.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9282</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9282"/>
				<updated>2006-08-26T22:18:12Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On the evening of September 12 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this page says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot; [And if I knew anything about MediaWiki I would give you a link to that page!]&lt;br /&gt;
&lt;br /&gt;
Time and coordinates for the meeting TBD.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9281</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9281"/>
				<updated>2006-08-26T22:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On the evening of September 12 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this page says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot; (and if I knew anything about MediaWiki I would give you a link to that page!).&lt;br /&gt;
&lt;br /&gt;
Time and coordinates for the meeting TBD.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9280</id>
		<title>Edmonton</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Edmonton&amp;diff=9280"/>
				<updated>2006-08-26T21:53:39Z</updated>
		
		<summary type="html">&lt;p&gt;Markgordon: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chapter Template|chaptername=Edmonton|extra=The chapter leader is [mailto:robert.martin@shunda.com Robert Martin]|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-edmonton|emailarchives=http://lists.owasp.org/pipermail/owasp-edmonton}}&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
&lt;br /&gt;
Robert, Anuj and Mark are starting the Edmonton chapter.&lt;br /&gt;
&lt;br /&gt;
On the evening of September 12 we will hold our first formal meeting. Anuj will talk on OWASP's ''Top Ten'' project. The main page for this page says, &amp;quot;The OWASP Top Ten provides a minimum standard for web application security. The OWASP Top Ten represents a broad consensus about what the most critical web application security flaws are.&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Markgordon</name></author>	</entry>

	</feed>