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

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway_Day_2018&amp;diff=240445</id>
		<title>Norway Day 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway_Day_2018&amp;diff=240445"/>
				<updated>2018-05-06T19:43:56Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Created page with &amp;quot;Date: Late November 2018  Location: Oslo (Venue currently begin discussed)  Target number of participants: 100-200  Type: Single track one-day conference  === Call for present...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Date: Late November 2018&lt;br /&gt;
&lt;br /&gt;
Location: Oslo (Venue currently begin discussed)&lt;br /&gt;
&lt;br /&gt;
Target number of participants: 100-200&lt;br /&gt;
&lt;br /&gt;
Type: Single track one-day conference&lt;br /&gt;
&lt;br /&gt;
=== Call for presentations ===&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Sponsoring options coming soon. Please contact erlend.oftedal@owasp.org to learn more.&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=240444</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=240444"/>
				<updated>2018-05-06T19:40:21Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 19. mars 2018 17:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Teknologihuset, Pilestedet 56, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/247571296/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/247571296/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 9. april 2018 17:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Teknologihuset, Pilestedet 56, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/248655998/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/248655998/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2017]] ===&lt;br /&gt;
=== [[Medlemsmøter 2016]] ===&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=REST_Security_Cheat_Sheet&amp;diff=230479</id>
		<title>REST Security Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=REST_Security_Cheat_Sheet&amp;diff=230479"/>
				<updated>2017-06-07T20:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; __NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:160px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[File:Cheatsheets-header.jpg|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Representational_state_transfer REST] (or REpresentational State Transfer) is a means of expressing specific entities in a system by URL path elements. REST is not an architecture but it is an architectural style to build services on top of the Web. REST allows interaction with a web-based system via simplified URLs rather than complex request body or &amp;lt;tt&amp;gt;POST&amp;lt;/tt&amp;gt; parameters to request specific items from the system. This document serves as a guide (although not exhaustive) of best practices to help REST-based services.&lt;br /&gt;
&lt;br /&gt;
== Session management ==&lt;br /&gt;
&lt;br /&gt;
RESTful web services should use session-based authentication, either by establishing a session token via a POST or by using an API key as a POST body argument or as a cookie. Usernames, passwords, session tokens, and API keys should not appear in the URL, as this can be captured in web server logs, which makes them intrinsically valuable.&lt;br /&gt;
&lt;br /&gt;
OK:&lt;br /&gt;
&lt;br /&gt;
* [https://example.com/resourceCollection/123/action https://example.com/resourceCollection/&amp;lt;id&amp;gt;/action]&lt;br /&gt;
* https://twitter.com/vanderaj/lists&lt;br /&gt;
&lt;br /&gt;
NOT OK:&lt;br /&gt;
&lt;br /&gt;
* [https://example.com/controller/123/action?apiKey=a53f435643de32 https://example.com/controller/&amp;lt;id&amp;gt;/action?apiKey=a53f435643de32] (API Key in URL)&lt;br /&gt;
* [http://example.com/controller/123/action?apiKey=a53f435643de32 http://example.com/controller/&amp;lt;id&amp;gt;/action?apiKey=a53f435643de32] (transaction not protected by TLS; API Key in URL)&lt;br /&gt;
&lt;br /&gt;
== Protocol for Authentication and Authorization ==&lt;br /&gt;
&lt;br /&gt;
* Oauth2.0  &lt;br /&gt;
The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. &lt;br /&gt;
&lt;br /&gt;
https://tools.ietf.org/html/rfc6749&lt;br /&gt;
&lt;br /&gt;
* OpenID Connect&lt;br /&gt;
The openID Connect which is based on Oauth2.0 widely used in federation authentication.  It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server, as well as to obtain basic profile information in JSON Web Token format. &lt;br /&gt;
&lt;br /&gt;
http://openid.net/connect/&lt;br /&gt;
&lt;br /&gt;
== Protect Session State ==&lt;br /&gt;
&lt;br /&gt;
Many web services are written to be as stateless as possible. This usually ends up with a state blob being sent as part of the transaction. &lt;br /&gt;
&lt;br /&gt;
* Consider using only the session token or API key to maintain client state in a server-side cache. This is directly equivalent to how normal web apps do it, and there's a reason why this is moderately safe. &lt;br /&gt;
* Anti-replay. Attackers will cut and paste a blob and become someone else.  Consider using a time limited encryption key, keyed against the session token or API key, date and time, and incoming IP address. In general, implement some protection of local client storage of the authentication token to mitigate replay attacks.&lt;br /&gt;
* Don't make it easy to decrypt; change the internal state to be much better than it should be.&lt;br /&gt;
* The session token is expected to be  short-lived tokens with expiration period. i.e. 2 hours.&lt;br /&gt;
* The access token is suggested to have limited access scope. &lt;br /&gt;
&lt;br /&gt;
In short, even if you have a brochureware web site, don't put in &amp;lt;tt&amp;gt;https://example.com/users/2313/edit?isAdmin=false&amp;amp;debug=false&amp;amp;allowCSRPanel=false&amp;lt;/tt&amp;gt; as you will quickly end up with a lot of admins, and help desk helpers, and &amp;quot;developers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Access Control =&lt;br /&gt;
&lt;br /&gt;
== Anti-farming ==&lt;br /&gt;
&lt;br /&gt;
Many RESTful web services are put up, and then farmed, such as a price matching website or aggregation service. There's no technical method of preventing this use, so strongly consider means to encourage it as a business model by making high velocity farming is possible for a fee, or contractually limiting service using terms and conditions. CAPTCHAs and similar methods can help reduce simpler adversaries, but not well funded or technically competent adversaries. Using mutually assured client side TLS certificates may be a method of limiting access to trusted organizations, but this is by no means certain, particularly if certificates are posted deliberately or by accident to the Internet.  &lt;br /&gt;
&lt;br /&gt;
API Key can be used for every API request. If there is any suspecius behaviors in the API requests, it will be able to be idenfied by the API Key and revoke the specific API Key for further requets. Furthrmore, API rate limites control can also enforce on the API key as source of identifier of every API requets. &lt;br /&gt;
&lt;br /&gt;
== Protect HTTP methods ==&lt;br /&gt;
&lt;br /&gt;
RESTful API often use GET (read), POST (create), PUT (replace/update) and DELETE (to delete a record). Not all of these are valid choices for every single resource collection, user, or action. Make sure the incoming HTTP method is valid for the session token/API key and associated resource collection, action, and record. For example, if you have an RESTful API for a library, it's not okay to allow anonymous users to DELETE book catalog entries, but it's fine for them to GET a book catalog entry. On the other hand, for the librarian, both of these are valid uses.&lt;br /&gt;
&lt;br /&gt;
== Whitelist allowable methods ==&lt;br /&gt;
&lt;br /&gt;
It is common with RESTful services to allow multiple methods for a given URL for different operations on that entity. For example, a &amp;lt;tt&amp;gt;GET&amp;lt;/tt&amp;gt; request might read the entity while &amp;lt;tt&amp;gt;PUT&amp;lt;/tt&amp;gt; would update an existing entity, &amp;lt;tt&amp;gt;POST&amp;lt;/tt&amp;gt; would create a new entity, and &amp;lt;tt&amp;gt;DELETE&amp;lt;/tt&amp;gt; would delete an existing entity. It is important for the service to properly restrict the allowable verbs such that only the allowed verbs would work, while all others would return a proper response code (for example, a &amp;lt;tt&amp;gt;403 Forbidden&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
In Java EE in particular, this can be difficult to implement properly. See [http://www.aspectsecurity.com/research-presentations/bypassing-vbaac-with-http-verb-tampering Bypassing Web Authentication and Authorization with HTTP Verb Tampering] for an explanation of this common misconfiguration.&lt;br /&gt;
&lt;br /&gt;
== Protect privileged actions and sensitive resource collections ==&lt;br /&gt;
&lt;br /&gt;
Not every user has a right to every web service. This is vital, as you don't want administrative web services to be misused:&lt;br /&gt;
&lt;br /&gt;
* https://example.com/admin/exportAllData&lt;br /&gt;
&lt;br /&gt;
The session token or API key should be sent along as a cookie or body parameter to ensure that privileged collections or actions are properly protected from unauthorized use.&lt;br /&gt;
&lt;br /&gt;
== Protect against cross-site request forgery ==&lt;br /&gt;
&lt;br /&gt;
For resources exposed by RESTful web services, it's important to make sure any PUT, POST, and DELETE request is protected from Cross Site Request Forgery. Typically one would use a token-based approach. See [[Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet]] for more information on how to implement CSRF-protection.&lt;br /&gt;
&lt;br /&gt;
CSRF is easily achieved even using random tokens if any XSS exists within your application, so please make sure you understand [[XSS (Cross Site Scripting) Prevention Cheat Sheet|how to prevent XSS]].&lt;br /&gt;
&lt;br /&gt;
== Insecure direct object references ==&lt;br /&gt;
&lt;br /&gt;
It may seem obvious, but if you had a bank account REST web service, you'd have to make sure there is adequate checking of primary and foreign keys:&lt;br /&gt;
&lt;br /&gt;
* https://example.com/account/325365436/transfer?amount=$100.00&amp;amp;toAccount=473846376&lt;br /&gt;
&lt;br /&gt;
In this case, it would be possible to transfer money from any account to any other account, which is clearly absurd. Not even a random token makes this safe.&lt;br /&gt;
&lt;br /&gt;
* https://example.com/invoice/2362365&lt;br /&gt;
&lt;br /&gt;
In this case, it would be possible to get a copy of all invoices. &lt;br /&gt;
&lt;br /&gt;
This is essentially a data-contextual access control enforcement need. A URL or even a POSTed form should NEVER contain an access control &amp;quot;key&amp;quot; or similar that provides automatic verification. &amp;lt;b&amp;gt;A data contextual check needs to be done, server side, with each request.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API Rate limits ==&lt;br /&gt;
The objective of the API Rate limits is to reduce massive API requests that cause denial of services, and also to mitigate potential brute-force attack, or misuses of the services. The API rate limits can be controlled at API gateway or WAF. The following API rate limits mechanism can be considered.&lt;br /&gt;
&lt;br /&gt;
* API rate limits per application or per API: Every API or application can only access the services for defined the number of requests per rate limit window. &lt;br /&gt;
* API rate limits per GET or POST request: The allowed access requests may vary based on GET or POST requests per period.&lt;br /&gt;
* HTTP error return code: If there are too many error return (i.e. 401, 404, 501...), the identifier of the API (API Key) will be blocked temporarily for further access.&lt;br /&gt;
&lt;br /&gt;
The results of exceeding API rate limits can be temporarily blacklisted the application/API access or notification alert to relevant users/admin. The service should return HTTP return code. &amp;quot;429 Too Many Requests&amp;quot; - The error is used when there may be DOS attack detected or the request is rejected due to rate limiting&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Input validation =&lt;br /&gt;
&lt;br /&gt;
== Input validation 101 ==&lt;br /&gt;
&lt;br /&gt;
Everything you know about input validation applies to RESTful web services, but add 10% because automated tools can easily fuzz your interfaces for hours on end at high velocity. So:&lt;br /&gt;
&lt;br /&gt;
* Assist the user &amp;gt; Reject input &amp;gt; Sanitize (filtering) &amp;gt; No input validation&lt;br /&gt;
&lt;br /&gt;
Assisting the user makes the most sense, as the most common scenario is &amp;quot;problem exists between keyboard and chair&amp;quot; (PEBKAC). Help the user input high quality data into your web services, such as ensuring a Zip code makes sense for the supplied address, or the date makes sense. If not, reject that input. If they continue on, or it's a text field or some other difficult to validate field, input sanitization is a losing proposition but still better than XSS or SQL injection. If you're already reduced to  sanitization or no input validation, make sure output encoding is very strong for your application. &lt;br /&gt;
&lt;br /&gt;
Log input validation failures, particularly if you assume that client-side code you wrote is going to call your web services. The reality is that anyone can call your web services, so assume that someone who is performing hundreds of failed input validations per second is up to no good. Also consider rate limiting the API to a certain number of requests per hour or day to prevent abuse.&lt;br /&gt;
&lt;br /&gt;
== Secure parsing ==&lt;br /&gt;
&lt;br /&gt;
Use a secure parser for parsing the incoming messages. If you are using XML, make sure to use a parser that is not vulnerable to [https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing XXE] and similar attacks.&lt;br /&gt;
&lt;br /&gt;
== Strong typing ==&lt;br /&gt;
&lt;br /&gt;
It's difficult to perform most attacks if the only allowed values are true or false, or a number, or one of a small number of acceptable values. Strongly type incoming data as quickly as possible. &lt;br /&gt;
&lt;br /&gt;
== Validate incoming content-types ==&lt;br /&gt;
&lt;br /&gt;
When POSTing or PUTting new data, the client will specify the Content-Type (e.g. &amp;lt;tt&amp;gt;application/xml&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;application/json&amp;lt;/tt&amp;gt;) of the incoming data. The server should never assume the Content-Type; it should always check that the Content-Type header and the content are the same type. A lack of Content-Type header or an unexpected Content-Type header should result in the server rejecting the content with a &amp;lt;tt&amp;gt;406 Not Acceptable&amp;lt;/tt&amp;gt; response.&lt;br /&gt;
&lt;br /&gt;
== Validate response types ==&lt;br /&gt;
&lt;br /&gt;
It is common for REST services to allow multiple response types (e.g. &amp;lt;tt&amp;gt;application/xml&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;application/json&amp;lt;/tt&amp;gt;, and the client specifies the preferred order of response types by the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header in the request. '''Do NOT''' simply copy the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header to the &amp;lt;tt&amp;gt;Content-type&amp;lt;/tt&amp;gt; header of the response. Reject the request (ideally with a &amp;lt;tt&amp;gt;406 Not Acceptable&amp;lt;/tt&amp;gt; response) if the &amp;lt;tt&amp;gt;Accept&amp;lt;/tt&amp;gt; header does not specifically contain one of the allowable types.&lt;br /&gt;
&lt;br /&gt;
Because there are many MIME types for the typical response types, it's important to document for clients specifically which MIME types should be used.&lt;br /&gt;
&lt;br /&gt;
== XML input validation == &lt;br /&gt;
&lt;br /&gt;
XML-based services must ensure that they are protected against common XML based attacks by using secure XML-parsing. This typically means protecting against XML External Entity attacks, XML-signature wrapping etc. See  http://ws-attacks.org for examples of such attacks.&lt;br /&gt;
&lt;br /&gt;
== Framework-Provided Validation ==&lt;br /&gt;
&lt;br /&gt;
Many frameworks, such as [https://jersey.java.net/ Jersey], allow for validation constraints to be enforced automatically by the framework at request or response time. (See [https://jersey.java.net/documentation/latest/bean-validation.html Bean Validation Support] for more information). While this does not validate the structure of JSON or XML data before being unmarshaled, it does provide automatic validation after unmarshaling, but before the data is presented to the application.&lt;br /&gt;
&lt;br /&gt;
= Output encoding =&lt;br /&gt;
&lt;br /&gt;
== Send security headers ==&lt;br /&gt;
&lt;br /&gt;
To make sure the content of a given resources is interpreted correctly by the browser, the server should always send the Content-Type header with the correct Content-Type, and preferably the Content-Type header should include a charset. The server should also send an &amp;lt;tt&amp;gt;X-Content-Type-Options: nosniff&amp;lt;/tt&amp;gt; to make sure the browser does not try to detect a different Content-Type than what is actually sent (can lead to XSS).&lt;br /&gt;
&lt;br /&gt;
Additionally the client should send an &amp;lt;tt&amp;gt;X-Frame-Options: deny&amp;lt;/tt&amp;gt; to protect against drag'n drop clickjacking attacks in older browsers.&lt;br /&gt;
&lt;br /&gt;
== JSON encoding ==&lt;br /&gt;
&lt;br /&gt;
A key concern with JSON encoders is preventing arbitrary JavaScript remote code execution within the browser... or, if you're using node.js, on the server. It's vital that you use a proper JSON serializer to encode user-supplied data properly to prevent the execution of user-supplied input on the browser.&lt;br /&gt;
&lt;br /&gt;
When inserting values into the browser DOM, strongly consider using &amp;lt;tt&amp;gt;.value&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.innerText&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;.textContent&amp;lt;/tt&amp;gt; rather than &amp;lt;tt&amp;gt;.innerHTML&amp;lt;/tt&amp;gt; updates, as this protects against simple DOM XSS attacks. &lt;br /&gt;
&lt;br /&gt;
== XML encoding ==&lt;br /&gt;
&lt;br /&gt;
XML should never be built by string concatenation. It should always be constructed using an XML serializer. This ensures that the XML content sent to the browser is parseable and does not contain XML injection. For more information, please see the [[Web Service Security Cheat Sheet]].&lt;br /&gt;
&lt;br /&gt;
= Cryptography =&lt;br /&gt;
&lt;br /&gt;
== Data in transit ==&lt;br /&gt;
&lt;br /&gt;
Unless the public information is completely read-only, the use of TLS should be mandated, particularly where credentials, updates, deletions, and any value transactions are performed. The overhead of TLS is negligible on modern hardware, with a minor latency increase that is more than compensated by safety for the end user.&lt;br /&gt;
&lt;br /&gt;
Consider the use of mutually authenticated client-side certificates to provide additional protection for highly privileged web services.&lt;br /&gt;
&lt;br /&gt;
== Data in storage ==&lt;br /&gt;
&lt;br /&gt;
Leading practices are recommended as per any web application when it comes to correctly handling stored sensitive or regulated data. For more information, please see [[Top 10 2010-A7|OWASP Top 10 2010 - A7 Insecure Cryptographic Storage]].&lt;br /&gt;
&lt;br /&gt;
= Message Integrity =&lt;br /&gt;
In addition to HTTPS/TLS, JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. JWT can not only be used to ensure the message integrity but also authentication of both message sender/receiver. The JWT includes the digital signature hash value of the message body to ensure the message integrity during the transmition.&lt;br /&gt;
&lt;br /&gt;
https://jwt.io/introduction/&lt;br /&gt;
&lt;br /&gt;
= HTTP Return Code =&lt;br /&gt;
HTTP defines status code [https://en.wikipedia.org/wiki/List_of_HTTP_status_codes].&lt;br /&gt;
When design REST API, don't just use 200 for success or 404 for error.&lt;br /&gt;
&lt;br /&gt;
Here are some guideline to consider for each REST API status return code. Proper error handle may help to validate the incoming requests and better identify the potential security risks.   &lt;br /&gt;
&lt;br /&gt;
* 200 OK - Response to a successful REST API action. The HTTP method can be GET, POST, PUT, PATCH or DELETE. &lt;br /&gt;
&lt;br /&gt;
* 400 Bad Request - The request is malformed, such as message body format error.&lt;br /&gt;
&lt;br /&gt;
* 401 Unauthorized - Wrong or no authencation ID/password provided.&lt;br /&gt;
&lt;br /&gt;
* 403 Forbidden - It's used when the authentication succeeded but authenticated user doesn't have permission to the request resource&lt;br /&gt;
&lt;br /&gt;
* 404 Not Found - When a non-existent resource is requested&lt;br /&gt;
&lt;br /&gt;
* 405 Method Not Allowed - The error checking for unexpected HTTP method. For example, the RestAPI is expecting HTTP GET, but HTTP PUT is used.&lt;br /&gt;
&lt;br /&gt;
* 429 Too Many Requests - The error is used when there may be DOS attack detected or the request is rejected due to rate limiting&lt;br /&gt;
&lt;br /&gt;
= Related articles =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
= Authors and primary editors  =&lt;br /&gt;
&lt;br /&gt;
Erlend Oftedal - erlend.oftedal@owasp.org&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew van der Stock - vanderaj@owasp.org&amp;lt;br /&amp;gt;&lt;br /&gt;
Tony Hsu Hsiang Chih- Hsiang_chihi@yahoo.com&amp;lt;br /&amp;gt;&lt;br /&gt;
== Other cheatsheets ==&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation_Body}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Server_Side_Request_Forgery&amp;diff=229534</id>
		<title>Server Side Request Forgery</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Server_Side_Request_Forgery&amp;diff=229534"/>
				<updated>2017-05-11T06:50:40Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Attack}}&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
In a Server-Side Request Forgery (SSRF) attack, the attacker can abuse functionality on the server to read or update internal resources. The attacker can supply or a modify a URL which the code running on the server will read or submit data to, and by carefully selecting the URLs, the attacker may be able to read server configuration such as AWS metadata, connect to internal services like http enabled databases or perform post requests towards internal services which are not intended to be exposed.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The target application may have functionality for importing data from a URL, publishing data to a URL or otherwise reading data from a URL that can be tampered with. The attacker modifies the calls to this functionality by supplying a completely different URL or by manipulating how URLs are built (path traversal etc.).&lt;br /&gt;
&lt;br /&gt;
When the manipulated request goes to the server, the server side code picks up the manipulated URL and tries to read data to the manipulated URL. By selecting target URLs the attacker may be able to read data from services that are not directly exposed on the internet:&lt;br /&gt;
* Cloud server meta-data - Cloud services such as AWS provide a REST interface on http://169.254.169.254/ where important configuration and sometimes even authentication keys can be extracted&lt;br /&gt;
* Database HTTP interfaces - NoSQL database such as MongoDb provide REST interfaces on HTTP ports. If the database is expected to only be available to internally, authentication may be disabled and the attacker can extract data&lt;br /&gt;
* Internal REST interfaces&lt;br /&gt;
* Files - The attacker may be able to read files using file:// URIs&lt;br /&gt;
&lt;br /&gt;
The attacker may also use this functionality to import untrusted data into code that expects to only read data from trusted sources, and as such circumvent input validation.&lt;br /&gt;
&lt;br /&gt;
== Security controls for stopping SSRF ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spoofing]]&lt;br /&gt;
[[Category:Abuse of Functionality]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Server_Side_Request_Forgery&amp;diff=229533</id>
		<title>Server Side Request Forgery</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Server_Side_Request_Forgery&amp;diff=229533"/>
				<updated>2017-05-11T06:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Attack}}&lt;br /&gt;
&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
In a Server-Side Request Forgery (SSRF) attack, the attacker can abuse functionality on the server to read or update internal resources. The attacker can supply or a modify a URL which the code running on the server will read or submit data to, and by carefully selecting the URLs, the attacker may be able to read server configuration such as AWS metadata, connect to internal services like http enabled databases or perform post requests towards internal services which are not intended to be exposed.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The target application may have functionality for importing data from a URL, publishing data to a URL or otherwise reading data from a URL that can be tampered with. The attacker modifies the calls to this functionality by supplying a completely different URL or by manipulating how URLs are built (path traversal etc.).&lt;br /&gt;
&lt;br /&gt;
When the manipulated request goes to the server, the server side code picks up the manipulated URL and tries to read data to the manipulated URL. By selecting target URLs the attacker may be able to read data from services that are not directly exposed on the internet:&lt;br /&gt;
* Cloud server meta-data - Cloud services such as AWS provide a REST interface on http://169.254.169.254/ where important configuration and sometimes even authentication keys can be extracted&lt;br /&gt;
* Database HTTP interfaces - NoSQL database such as MongoDb provide REST interfaces on HTTP ports. If the database is expected to only be available to internally, authentication may be disabled and the attacker can extract data&lt;br /&gt;
* Internal REST interfaces&lt;br /&gt;
* Files - The attacker may be able to read files using file:// URIs&lt;br /&gt;
&lt;br /&gt;
The attacker may also use this functionality to import untrusted data into code that expects to only read data from trusted sources, and as such circumvent input validation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spoofing]]&lt;br /&gt;
[[Category:Abuse of Functionality]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=225623</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=225623"/>
				<updated>2017-01-26T10:04:23Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 26. januar 17:00 - 19:30 ====&lt;br /&gt;
'''Sted:''' Teknologihuset&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/236787346/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/236787346/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 30. november 17:00 - 19:30 ====&lt;br /&gt;
'''Sted:''' Domus Nova auditorium 7, St. Olavs plass 5, Oslo &lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/235670341/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/235670341/&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 1. november kl 18:00 - 20:00 ====&lt;br /&gt;
Se http://www.meetup.com/OWASP-Norway/events/234968368/ for detaljer&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 24. august kl 16:30 - 19:00 ====&lt;br /&gt;
'''Sted:''' SpareBank1, Hammersborggata 2, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
[[Generalforsamling 2016 - referat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' Schibsted Products &amp;amp; Technology, Apotekergata 10, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/230205922/ eller send epost til josteitv@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/230205922/&lt;br /&gt;
&lt;br /&gt;
Presentasjoner:&lt;br /&gt;
* Marie Moe: [[Media:2016-04-18-OWASP-Oslo-til-publisering.pdf]]&lt;br /&gt;
* Preben Gustavsen: [[Media:OWASP 18 4 2016.pdf]]&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. mars kl 18:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Brønnøysundregistrene sine lokaler, Grev edels plass 9, 2 etasje&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/229436674/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/229436674/&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=222550</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=222550"/>
				<updated>2016-10-20T15:35:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte 24. august kl 16:30 - 19:00 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 1. november kl 18:00 - 20:00 ====&lt;br /&gt;
Se http://www.meetup.com/OWASP-Norway/events/234968368/ for detaljer&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 24. august kl 16:30 - 19:00 ====&lt;br /&gt;
'''Sted:''' SpareBank1, Hammersborggata 2, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
[[Generalforsamling 2016 - referat]]&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' Schibsted Products &amp;amp; Technology, Apotekergata 10, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/230205922/ eller send epost til josteitv@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/230205922/&lt;br /&gt;
&lt;br /&gt;
Presentasjoner:&lt;br /&gt;
* Marie Moe: [[Media:2016-04-18-OWASP-Oslo-til-publisering.pdf]]&lt;br /&gt;
* Preben Gustavsen: [[Media:OWASP 18 4 2016.pdf]]&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. mars kl 18:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Brønnøysundregistrene sine lokaler, Grev edels plass 9, 2 etasje&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/229436674/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/229436674/&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=222549</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=222549"/>
				<updated>2016-10-20T15:34:53Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Neste møter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 24. august kl 16:30 - 19:00 ====&lt;br /&gt;
Se http://www.meetup.com/OWASP-Norway/events/234968368/ for detaljer&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 24. august kl 16:30 - 19:00 ====&lt;br /&gt;
'''Sted:''' SpareBank1, Hammersborggata 2, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
[[Generalforsamling 2016 - referat]]&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' Schibsted Products &amp;amp; Technology, Apotekergata 10, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/230205922/ eller send epost til josteitv@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/230205922/&lt;br /&gt;
&lt;br /&gt;
Presentasjoner:&lt;br /&gt;
* Marie Moe: [[Media:2016-04-18-OWASP-Oslo-til-publisering.pdf]]&lt;br /&gt;
* Preben Gustavsen: [[Media:OWASP 18 4 2016.pdf]]&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. mars kl 18:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Brønnøysundregistrene sine lokaler, Grev edels plass 9, 2 etasje&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/229436674/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/229436674/&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway_Chapter_styret&amp;diff=220695</id>
		<title>Norway Chapter styret</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway_Chapter_styret&amp;diff=220695"/>
				<updated>2016-08-24T14:45:12Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Styret ==&lt;br /&gt;
Leder: Erlend Oftedal (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer: Asbjørn Thorsen (tidl. styremedlem)&lt;br /&gt;
&lt;br /&gt;
Styremedlemmer:&lt;br /&gt;
&lt;br /&gt;
Jostein Tveit (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jon Are Rakvåg (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Tor E Bjørstad (ny)&lt;br /&gt;
&lt;br /&gt;
Ståle Pettersen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte M. Østvold (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jøran Lillesand (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Joakim Tørmoen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tilbake til [[Norway]] Chapter&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220694</id>
		<title>Generalforsamling 2016 - referat</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220694"/>
				<updated>2016-08-24T14:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Instilling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Agenda =&lt;br /&gt;
&lt;br /&gt;
1. Valg av møteleder og referent&lt;br /&gt;
&lt;br /&gt;
2. Godkjenning av dagsorden&lt;br /&gt;
&lt;br /&gt;
3. Godkjenning av nytt styre&lt;br /&gt;
&lt;br /&gt;
== Referat ==&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold valgt til styreleder. Erlend Oftedal valgt til referent.&lt;br /&gt;
&lt;br /&gt;
Godkjent ved akklamasjon&lt;br /&gt;
&lt;br /&gt;
=== Innstilling ===&lt;br /&gt;
&lt;br /&gt;
'''Leder:''' Erlend Oftedal (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
'''Kasserer:''' Asbjørn Thorsen (tidl. styremedlem)&lt;br /&gt;
&lt;br /&gt;
'''Styremedlemmer:'''&lt;br /&gt;
&lt;br /&gt;
Jostein Tveit (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jon Are Rakvåg (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Tor E Bjørstad (ny)&lt;br /&gt;
&lt;br /&gt;
Ståle Pettersen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Valgkomite:'''&lt;br /&gt;
&lt;br /&gt;
Bjarte M. Østvold (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jøran Lillesand (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Joakim Tørmoen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Godkjent ved akklamasjon'''&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220693</id>
		<title>Generalforsamling 2016 - referat</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220693"/>
				<updated>2016-08-24T14:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Referat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Agenda =&lt;br /&gt;
&lt;br /&gt;
1. Valg av møteleder og referent&lt;br /&gt;
&lt;br /&gt;
2. Godkjenning av dagsorden&lt;br /&gt;
&lt;br /&gt;
3. Godkjenning av nytt styre&lt;br /&gt;
&lt;br /&gt;
== Referat ==&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold valgt til styreleder. Erlend Oftedal valgt til referent.&lt;br /&gt;
&lt;br /&gt;
Godkjent ved akklamasjon&lt;br /&gt;
&lt;br /&gt;
=== Instilling ===&lt;br /&gt;
&lt;br /&gt;
'''Leder:''' Erlend Oftedal (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
'''Kasserer:''' Asbjørn Thorsen (tidl. styremedlem)&lt;br /&gt;
&lt;br /&gt;
'''Styremedlemmer:'''&lt;br /&gt;
&lt;br /&gt;
Jostein Tveit (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jon Are Rakvåg (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Tor E Bjørstad (ny)&lt;br /&gt;
&lt;br /&gt;
Ståle Pettersen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Valgkomite:'''&lt;br /&gt;
&lt;br /&gt;
Bjarte M. Østvold (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Jøran Lillesand (gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Joakim Tørmoen (ny)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Godkjent ved akklamasjon'''&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220692</id>
		<title>Generalforsamling 2016 - referat</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220692"/>
				<updated>2016-08-24T13:54:34Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Agenda =&lt;br /&gt;
&lt;br /&gt;
1. Valg av møteleder og referent&lt;br /&gt;
&lt;br /&gt;
2. Godkjenning av dagsorden&lt;br /&gt;
&lt;br /&gt;
3. Godkjenning av nytt styre&lt;br /&gt;
&lt;br /&gt;
== Referat ==&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220691</id>
		<title>Generalforsamling 2016 - referat</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Generalforsamling_2016_-_referat&amp;diff=220691"/>
				<updated>2016-08-24T13:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Created page with &amp;quot;= Agenda =  1. Valg av møteleder og referent 2. Godkjenning av dagsorden 3. Godkjenning av nytt styre  == Referat ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Agenda =&lt;br /&gt;
&lt;br /&gt;
1. Valg av møteleder og referent&lt;br /&gt;
2. Godkjenning av dagsorden&lt;br /&gt;
3. Godkjenning av nytt styre&lt;br /&gt;
&lt;br /&gt;
== Referat ==&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=220690</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=220690"/>
				<updated>2016-08-24T13:52:46Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' SpareBank1, Hammersborggata 2, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
[[Generalforsamling 2016 - referat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' Schibsted Products &amp;amp; Technology, Apotekergata 10, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/230205922/ eller send epost til josteitv@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/230205922/&lt;br /&gt;
&lt;br /&gt;
Presentasjoner:&lt;br /&gt;
* Marie Moe: [[Media:2016-04-18-OWASP-Oslo-til-publisering.pdf]]&lt;br /&gt;
* Preben Gustavsen: [[Media:OWASP 18 4 2016.pdf]]&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. mars kl 18:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Brønnøysundregistrene sine lokaler, Grev edels plass 9, 2 etasje&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/229436674/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/229436674/&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=220689</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=220689"/>
				<updated>2016-08-24T13:52:19Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' SpareBank1, Hammersborggata 2, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' https://www.meetup.com/OWASP-Norway/events/232698579/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 18. april kl 18:30 - 20:00 ====&lt;br /&gt;
'''Sted:''' Schibsted Products &amp;amp; Technology, Apotekergata 10, Oslo&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/230205922/ eller send epost til josteitv@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/230205922/&lt;br /&gt;
&lt;br /&gt;
Presentasjoner:&lt;br /&gt;
* Marie Moe: [[Media:2016-04-18-OWASP-Oslo-til-publisering.pdf]]&lt;br /&gt;
* Preben Gustavsen: [[Media:OWASP 18 4 2016.pdf]]&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. mars kl 18:00 - 20:00 ====&lt;br /&gt;
'''Sted:''' Brønnøysundregistrene sine lokaler, Grev edels plass 9, 2 etasje&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/229436674/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/229436674/&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2015]] ===&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=3rd_Party_Javascript_Management_Cheat_Sheet&amp;diff=215686</id>
		<title>3rd Party Javascript Management Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=3rd_Party_Javascript_Management_Cheat_Sheet&amp;diff=215686"/>
				<updated>2016-04-20T06:17:12Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; __NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:160px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[File:Cheatsheets-header.jpg|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 __TOC__{{TOC hidden}}&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The rationale for third party vendor javascript ('tags') is to provide data from the user's browser DOM to the vendor for some form of marketing analysis. This data can be anything available in the DOM. The data is used for user navigation and clickstream analysis, identification of the user to determine further content to display etc., and various marketing analysis functions. &lt;br /&gt;
&lt;br /&gt;
The term 'host' refers to the original site the user goes to, such as a shopping or news site, that contains or retrieves and executes third party javascript tag for marketing analysis of the user actions.&lt;br /&gt;
&lt;br /&gt;
=  Major risks =&lt;br /&gt;
&lt;br /&gt;
The invocation of 3rd party JS code in a web application requires consideration for 3 risks in particular:&lt;br /&gt;
* 1. The loss of control over changes to the client application,&lt;br /&gt;
* 2. The execution of arbitrary code on client systems,&lt;br /&gt;
* 3. The disclosure or leakage of sensitive information to 3rd parties.&lt;br /&gt;
&lt;br /&gt;
== Risk 1: Loss of control over changes to the client application ==&lt;br /&gt;
This risk arises from the fact that there is usually no guaranty that the code hosted at the 3rd party will remain the same as seen from the developers and testers: new features may be pushed in the 3rd party code at any time, thus potentially breaking the interface or data-flows and exposing the availability of your application to its users/customers.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent alterations by 3rd parties), sub-resource integrity (to enable browser-level interception) and secure transmission of the 3rd party code (to prevent modifications while in-transit). See below for more details.&lt;br /&gt;
&lt;br /&gt;
== Risk 2: Execution of arbitrary code on client systems ==&lt;br /&gt;
This risk arises from the fact that 3rd party JavaScript code is rarely reviewed by the invoking party prior to its integration into a website/application. As the client reaches the hosting website/application, this 3rd party code gets executed, thus granting the 3rd party the exact same privileges that were granted to the user (similar to XSS attacks).&lt;br /&gt;
&lt;br /&gt;
Any testing performed prior to entering production loses some of its validity, including *AST testing (IAST, RAST, SAST, DAST, etc.). While it is widely accepted that the probability of having rogue code intentionally injected by the 3rd party is low, there are still cases of malicious injections in 3rd party code after the organization's servers were compromised (Yahoo, January 2014). This risk should therefore still be evaluated, in particular when the 3rd party does not show any documentation that it is enforcing better security measures than the invoking organization itself, or at least equivalent. Another example is that the domain hosting the 3rd party JavaScript code expires because the company maintaining it is bankrupt or the developers have abandoned the project. A malicious actor can then re-register the domain and publish malicious code.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent alterations by 3rd parties), sub-resource integrity (to enable browser-level interception) and secure transmission of the 3rd party code (to prevent modifications while in-transit). See below for more details.&lt;br /&gt;
&lt;br /&gt;
== Risk 3: Disclosure of sensitive information to 3rd parties ==&lt;br /&gt;
When a 3rd party script is invoked in a website/application, the browser directly contacts the 3rd party servers. By default, the request includes all regular HTTP headers. In addition to the originating IP address of the browser, the 3rd party also obtains other data such as the referrer (in non-https requests) and any cookies previously set by the 3rd party, for example when visiting another organization's website that also invokes the 3rd party script.&lt;br /&gt;
&lt;br /&gt;
In many cases, this grants the 3rd party primary access to information on the organization's users / customers / clients. Additionally, if the 3rd party is sharing the script with other entities, it also collects secondary data from all the other entities, thus knowing who the organization's visitors are but also what other organizations they interact with.&lt;br /&gt;
&lt;br /&gt;
A typical case is the current situation with major news/press sites that invoke 3rd party code (typically for ad engines, statistics and JavaScript APIs): any user visiting any of these websites also informs the 3rd parties of the visit. In many cases, the 3rd party also gets to know what news articles each individual user is clicking specifically (leakage occurs through the HTTP referrer field) and thus can establish deeper personality profiles.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent leakage of HTTP requests to 3rd parties). Users can reduce their profiling by random clicking links on leaking websites/applications (such as press/news websites) to reduce profiling. See below for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 3rd Party JavaScript Deployment Architectures =&lt;br /&gt;
&lt;br /&gt;
There are three basic deployment mechanisms for third party vendor javascript, or 'tags'.&lt;br /&gt;
&lt;br /&gt;
== Vendor Javascript on page ==&lt;br /&gt;
&lt;br /&gt;
This is where the vendor provides the host with the javascript and the host puts it on the host page. To be secure the host company must review the code for any vulnerabilities like cross site scripting or malicious actions such as sending sensitive data from the DOM to a malicious site. This is often difficult because the javascript is commonly obfuscated.&lt;br /&gt;
&lt;br /&gt;
== Javascript Request to Vendor == &lt;br /&gt;
&lt;br /&gt;
This is where one or a few lines of code on the host page each request a javascript file or URL directly from the vendor site. When the host page is being created, the developer includes the lines of code provided by the vendor that will request the vendor javascript.&lt;br /&gt;
Each time the page is accessed the requests are made to the vendor site for the javascript, which then executes on the user browser.&lt;br /&gt;
&lt;br /&gt;
== Indirect request to Vendor through Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
This is where one or a few lines of code on the host page each request a javascript file or URL from a tag aggregator or tag manager site; not from the javascript vendor site. The tag aggregator or tag manager site returns whatever third party javascript files that the host company has configured to be returned. Each file or URL request to the tag manager site can return lots of other javascript files from multiple vendors.&lt;br /&gt;
&lt;br /&gt;
The actual content that is returned from the aggregator or manager (i.e. the specific javascript files as well as exactly what they do) can be dynamically changed by host site employees using a graphical user interface for development, hosted on the tag manager site that non-technical users can work with, such as the marketing part of the business. The changes can be either 1. get a different javascript file from the 3rd party vendor for the same request; 2. change what DOM object data is read, and when, to send to the vendor. &lt;br /&gt;
&lt;br /&gt;
The tag manager developer user interface will generate code that does what the marketing functionality requires, basically determining what data to get from the browser DOM and when to get it. The tag manager always returns a 'container' javascript file to the browser which is basically a set of javascript functions that are used by the code generated by the user interface to implement the required functionality. Similar to java frameworks that provide functions and global data to the developer, the container javascript executes on the browser and lets the business user use the tag manager developer user interface to specify high level functionality without needing to know javascript.&lt;br /&gt;
&lt;br /&gt;
=== Security Problems with requesting Tags ===&lt;br /&gt;
&lt;br /&gt;
Previously described mechanisms are difficult to make secure because you can only see the code if you proxy the requests or if you get access to the GUI and see what is configured. The javascript is generally obfuscated so even seeing it is usually not useful. It is also instantly deployable because each new page request from a browser executes the requests to the aggregator which gets the javascript from the third party vendor. So as soon as any javascript files are changed on the vendor, or modified on the aggregator, the next call for them from any browser will get the changed javascript. This risk can be managed with the &amp;lt;i&amp;gt;Subresource Integrity&amp;lt;/i&amp;gt; standard described below.&lt;br /&gt;
&lt;br /&gt;
==  Server Direct ==&lt;br /&gt;
&lt;br /&gt;
The tag manager developer user interface can be used to get data from anywhere in the browser DOM. This can allow vulnerabilities because the interface can be used to generate code to get unvalidated data from the DOM (e.g. URL parameters) and store it in some page location that would execute javascript. &lt;br /&gt;
&lt;br /&gt;
The best way to constrain the generated code is to confine it to getting DOM data from a host defined data layer.&lt;br /&gt;
&lt;br /&gt;
With this mechanism, [[only the javascript you (the host site owner) generate]] using the tag manager developer user interface will get and send data values to the tag manager or tag aggregator site which then sends the data to vendors. '''This the most secure technique''' because only your javascript executes on your users browser, and only the data you decide on is sent to the vendor.&lt;br /&gt;
&lt;br /&gt;
This requires cooperation between the host, the aggregator or tag manager and the vendors. &lt;br /&gt;
&lt;br /&gt;
The host developers have to work with the vendor in order to know what type of data the vendor needs to do their analysis. Then the host programmer determines what DOM element will have that data. &lt;br /&gt;
&lt;br /&gt;
The host developers have to work with the tag manager or aggregator to agree on the protocol to send the data to the aggregator: what URL, parameters, format etc.&lt;br /&gt;
&lt;br /&gt;
The tag manager or aggregator has to work with the vendor to agree on the protocol to send the data to the vendor: what URL, parameters, format etc. Does the vendor have an API?&lt;br /&gt;
&lt;br /&gt;
= Security Defense Considerations = &lt;br /&gt;
&lt;br /&gt;
== Server Direct Data Layer ==&lt;br /&gt;
&lt;br /&gt;
The server direct mechanism is a good security standard for third party javascript management, deployment and execution.  A good practice for the host page is to create a data layer of DOM objects. The data layer is either (1) a DIV object with attribute values that have the marketing or user behavior data that the 3rd party wants or (2) a set of JSON objects with the same data.  Each variable or attribute contains the value of some DOM element. The data layer is the complete set of values that all vendors need for that page.&lt;br /&gt;
&lt;br /&gt;
The data layer can also perform any validation of the values, especially values from DOM objects exposed to the user like URL parameters and input fields, if these are required for the marketing analysis.&lt;br /&gt;
&lt;br /&gt;
An example statement for a corporate standard document is  'The tag javascript can only access values in the host data layer. The tag javascript can never access a URL parameter.&lt;br /&gt;
&lt;br /&gt;
You the host page developer have to agree with the 3rd party vendors or the tag manager what attribute in the data layer will have what value so they can create the javascript to read that value.&lt;br /&gt;
&lt;br /&gt;
== Indirect Requests ==&lt;br /&gt;
&lt;br /&gt;
For indirect requests to tag manager/aggregator sites that offer the GUI to configure the javascript, they may also implement technical controls such as only allowing the javascript to access the data layer values, no other DOM element. The host company should also verify the security practices of the tag manager site such as access controls to the tag configuration for the host company. &lt;br /&gt;
&lt;br /&gt;
Letting the marketing folks decide where to get the data they want can result in XSS because they may get it from a URL parameter and put it into a variable that is in a scriptable location on the page.&lt;br /&gt;
&lt;br /&gt;
== Sandboxing Content == &lt;br /&gt;
&lt;br /&gt;
Both of these tools be used by sites to sandbox/clean DOM data.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cure53/DOMPurify DOMPurify] is a fast, tolerant XSS sanitizer for HTML, MathML and SVG. DOMPurify works with a secure default, but offers a lot of configurability and hooks.&lt;br /&gt;
* [https://github.com/hackvertor/MentalJS MentalJS] is a JavaScript parser and sandbox. It whitelists JavaScript code by adding a &amp;quot;$&amp;quot; suffix to variables and accessors.&lt;br /&gt;
&lt;br /&gt;
== Subresource Integrity ==&lt;br /&gt;
&lt;br /&gt;
[https://www.w3.org/TR/SRI/ Subresource Integrity] will ensure that only the code that has been reviewed is executed. The developer generates integrity metadata for the vendor javascript, and adds it to the script element like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script src=&amp;quot;https://analytics.vendor.com/v1.1/script.js&amp;quot; &lt;br /&gt;
   integrity=&amp;quot;sha384-MBO5IDfYaE6c6Aao94oZrIOiC7CGiSNE64QUbHNPhzk8Xhm0djE6QqTpL0HzTUxk&amp;quot;&lt;br /&gt;
   crossorigin=&amp;quot;anonymous&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important to know that in order for SRI to work, the vendor host needs [https://www.w3.org/TR/cors/ CORS] enabled.&lt;br /&gt;
&lt;br /&gt;
== Keeping JavaScript libraries updated ==&lt;br /&gt;
&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities OWASP Top 10 2013 A9] describes the problem of using components with known vulnerabilities. This includes JavaScript libraries. JavaScript libraries must be kept up to date, as previous version can have known vulnerabilities which can lead to the site typically being vulnerable to Cross Site Scripting. There are several tools out there that can help identify such libraries. One such tool is the free open source tool [https://retirejs.github.io RetireJS]&lt;br /&gt;
&lt;br /&gt;
== Sandboxing with iframe ==&lt;br /&gt;
&lt;br /&gt;
You can also put vendor javascript into iframe from different domain (e.g. static data host). It will work as a &amp;quot;jail&amp;quot;&lt;br /&gt;
and vendor javascript will not have direct access to the host page DOM and cookies. The host main page and sandbox iframe can communicate between each other via [https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage postMessage mechanism].&lt;br /&gt;
&lt;br /&gt;
== Vendor Agreements ==&lt;br /&gt;
&lt;br /&gt;
You can have the agreement with the 3rd parties say that they have to implement and prove secure coding and general corporate security.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
https://randywestergren.com/widespread-xss-vulnerabilities-ad-network-code-affecting-top-tier-publishers-retailers/&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
&lt;br /&gt;
[[User:jweiler|Jim Weiler]] - Jim.Weiler@owasp.org&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other Cheatsheets =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation_Body}}&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=3rd_Party_Javascript_Management_Cheat_Sheet&amp;diff=215685</id>
		<title>3rd Party Javascript Management Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=3rd_Party_Javascript_Management_Cheat_Sheet&amp;diff=215685"/>
				<updated>2016-04-20T06:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; __NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;height:160px;border:0,margin:0;overflow: hidden;&amp;quot;&amp;gt;[[File:Cheatsheets-header.jpg|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}''' &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 __TOC__{{TOC hidden}}&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The rationale for third party vendor javascript ('tags') is to provide data from the user's browser DOM to the vendor for some form of marketing analysis. This data can be anything available in the DOM. The data is used for user navigation and clickstream analysis, identification of the user to determine further content to display etc., and various marketing analysis functions. &lt;br /&gt;
&lt;br /&gt;
The term 'host' refers to the original site the user goes to, such as a shopping or news site, that contains or retrieves and executes third party javascript tag for marketing analysis of the user actions.&lt;br /&gt;
&lt;br /&gt;
=  Major risks =&lt;br /&gt;
&lt;br /&gt;
The invocation of 3rd party JS code in a web application requires consideration for 3 risks in particular:&lt;br /&gt;
* 1. The loss of control over changes to the client application,&lt;br /&gt;
* 2. The execution of arbitrary code on client systems,&lt;br /&gt;
* 3. The disclosure or leakage of sensitive information to 3rd parties.&lt;br /&gt;
&lt;br /&gt;
== Risk 1: Loss of control over changes to the client application ==&lt;br /&gt;
This risk arises from the fact that there is usually no guaranty that the code hosted at the 3rd party will remain the same as seen from the developers and testers: new features may be pushed in the 3rd party code at any time, thus potentially breaking the interface or data-flows and exposing the availability of your application to its users/customers.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent alterations by 3rd parties), sub-resource integrity (to enable browser-level interception) and secure transmission of the 3rd party code (to prevent modifications while in-transit). See below for more details.&lt;br /&gt;
&lt;br /&gt;
== Risk 2: Execution of arbitrary code on client systems ==&lt;br /&gt;
This risk arises from the fact that 3rd party JavaScript code is rarely reviewed by the invoking party prior to its integration into a website/application. As the client reaches the hosting website/application, this 3rd party code gets executed, thus granting the 3rd party the exact same privileges that were granted to the user (similar to XSS attacks).&lt;br /&gt;
&lt;br /&gt;
Any testing performed prior to entering production loses some of its validity, including *AST testing (IAST, RAST, SAST, DAST, etc.). While it is widely accepted that the probability of having rogue code intentionally injected by the 3rd party is low, there are still cases of malicious injections in 3rd party code after the organization's servers were compromised (Yahoo, January 2014). This risk should therefore still be evaluated, in particular when the 3rd party does not show any documentation that it is enforcing better security measures than the invoking organization itself, or at least equivalent.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent alterations by 3rd parties), sub-resource integrity (to enable browser-level interception) and secure transmission of the 3rd party code (to prevent modifications while in-transit). See below for more details.&lt;br /&gt;
&lt;br /&gt;
== Risk 3: Disclosure of sensitive information to 3rd parties ==&lt;br /&gt;
When a 3rd party script is invoked in a website/application, the browser directly contacts the 3rd party servers. By default, the request includes all regular HTTP headers. In addition to the originating IP address of the browser, the 3rd party also obtains other data such as the referrer (in non-https requests) and any cookies previously set by the 3rd party, for example when visiting another organization's website that also invokes the 3rd party script.&lt;br /&gt;
&lt;br /&gt;
In many cases, this grants the 3rd party primary access to information on the organization's users / customers / clients. Additionally, if the 3rd party is sharing the script with other entities, it also collects secondary data from all the other entities, thus knowing who the organization's visitors are but also what other organizations they interact with.&lt;br /&gt;
&lt;br /&gt;
A typical case is the current situation with major news/press sites that invoke 3rd party code (typically for ad engines, statistics and JavaScript APIs): any user visiting any of these websites also informs the 3rd parties of the visit. In many cases, the 3rd party also gets to know what news articles each individual user is clicking specifically (leakage occurs through the HTTP referrer field) and thus can establish deeper personality profiles.&lt;br /&gt;
&lt;br /&gt;
Typical defenses include, but are not restricted to: in-house script mirroring (to prevent leakage of HTTP requests to 3rd parties). Users can reduce their profiling by random clicking links on leaking websites/applications (such as press/news websites) to reduce profiling. See below for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 3rd Party JavaScript Deployment Architectures =&lt;br /&gt;
&lt;br /&gt;
There are three basic deployment mechanisms for third party vendor javascript, or 'tags'.&lt;br /&gt;
&lt;br /&gt;
== Vendor Javascript on page ==&lt;br /&gt;
&lt;br /&gt;
This is where the vendor provides the host with the javascript and the host puts it on the host page. To be secure the host company must review the code for any vulnerabilities like cross site scripting or malicious actions such as sending sensitive data from the DOM to a malicious site. This is often difficult because the javascript is commonly obfuscated.&lt;br /&gt;
&lt;br /&gt;
== Javascript Request to Vendor == &lt;br /&gt;
&lt;br /&gt;
This is where one or a few lines of code on the host page each request a javascript file or URL directly from the vendor site. When the host page is being created, the developer includes the lines of code provided by the vendor that will request the vendor javascript.&lt;br /&gt;
Each time the page is accessed the requests are made to the vendor site for the javascript, which then executes on the user browser.&lt;br /&gt;
&lt;br /&gt;
== Indirect request to Vendor through Tag Manager ==&lt;br /&gt;
&lt;br /&gt;
This is where one or a few lines of code on the host page each request a javascript file or URL from a tag aggregator or tag manager site; not from the javascript vendor site. The tag aggregator or tag manager site returns whatever third party javascript files that the host company has configured to be returned. Each file or URL request to the tag manager site can return lots of other javascript files from multiple vendors.&lt;br /&gt;
&lt;br /&gt;
The actual content that is returned from the aggregator or manager (i.e. the specific javascript files as well as exactly what they do) can be dynamically changed by host site employees using a graphical user interface for development, hosted on the tag manager site that non-technical users can work with, such as the marketing part of the business. The changes can be either 1. get a different javascript file from the 3rd party vendor for the same request; 2. change what DOM object data is read, and when, to send to the vendor. &lt;br /&gt;
&lt;br /&gt;
The tag manager developer user interface will generate code that does what the marketing functionality requires, basically determining what data to get from the browser DOM and when to get it. The tag manager always returns a 'container' javascript file to the browser which is basically a set of javascript functions that are used by the code generated by the user interface to implement the required functionality. Similar to java frameworks that provide functions and global data to the developer, the container javascript executes on the browser and lets the business user use the tag manager developer user interface to specify high level functionality without needing to know javascript.&lt;br /&gt;
&lt;br /&gt;
=== Security Problems with requesting Tags ===&lt;br /&gt;
&lt;br /&gt;
Previously described mechanisms are difficult to make secure because you can only see the code if you proxy the requests or if you get access to the GUI and see what is configured. The javascript is generally obfuscated so even seeing it is usually not useful. It is also instantly deployable because each new page request from a browser executes the requests to the aggregator which gets the javascript from the third party vendor. So as soon as any javascript files are changed on the vendor, or modified on the aggregator, the next call for them from any browser will get the changed javascript. This risk can be managed with the &amp;lt;i&amp;gt;Subresource Integrity&amp;lt;/i&amp;gt; standard described below.&lt;br /&gt;
&lt;br /&gt;
==  Server Direct ==&lt;br /&gt;
&lt;br /&gt;
The tag manager developer user interface can be used to get data from anywhere in the browser DOM. This can allow vulnerabilities because the interface can be used to generate code to get unvalidated data from the DOM (e.g. URL parameters) and store it in some page location that would execute javascript. &lt;br /&gt;
&lt;br /&gt;
The best way to constrain the generated code is to confine it to getting DOM data from a host defined data layer.&lt;br /&gt;
&lt;br /&gt;
With this mechanism, [[only the javascript you (the host site owner) generate]] using the tag manager developer user interface will get and send data values to the tag manager or tag aggregator site which then sends the data to vendors. '''This the most secure technique''' because only your javascript executes on your users browser, and only the data you decide on is sent to the vendor.&lt;br /&gt;
&lt;br /&gt;
This requires cooperation between the host, the aggregator or tag manager and the vendors. &lt;br /&gt;
&lt;br /&gt;
The host developers have to work with the vendor in order to know what type of data the vendor needs to do their analysis. Then the host programmer determines what DOM element will have that data. &lt;br /&gt;
&lt;br /&gt;
The host developers have to work with the tag manager or aggregator to agree on the protocol to send the data to the aggregator: what URL, parameters, format etc.&lt;br /&gt;
&lt;br /&gt;
The tag manager or aggregator has to work with the vendor to agree on the protocol to send the data to the vendor: what URL, parameters, format etc. Does the vendor have an API?&lt;br /&gt;
&lt;br /&gt;
= Security Defense Considerations = &lt;br /&gt;
&lt;br /&gt;
== Server Direct Data Layer ==&lt;br /&gt;
&lt;br /&gt;
The server direct mechanism is a good security standard for third party javascript management, deployment and execution.  A good practice for the host page is to create a data layer of DOM objects. The data layer is either (1) a DIV object with attribute values that have the marketing or user behavior data that the 3rd party wants or (2) a set of JSON objects with the same data.  Each variable or attribute contains the value of some DOM element. The data layer is the complete set of values that all vendors need for that page.&lt;br /&gt;
&lt;br /&gt;
The data layer can also perform any validation of the values, especially values from DOM objects exposed to the user like URL parameters and input fields, if these are required for the marketing analysis.&lt;br /&gt;
&lt;br /&gt;
An example statement for a corporate standard document is  'The tag javascript can only access values in the host data layer. The tag javascript can never access a URL parameter.&lt;br /&gt;
&lt;br /&gt;
You the host page developer have to agree with the 3rd party vendors or the tag manager what attribute in the data layer will have what value so they can create the javascript to read that value.&lt;br /&gt;
&lt;br /&gt;
== Indirect Requests ==&lt;br /&gt;
&lt;br /&gt;
For indirect requests to tag manager/aggregator sites that offer the GUI to configure the javascript, they may also implement technical controls such as only allowing the javascript to access the data layer values, no other DOM element. The host company should also verify the security practices of the tag manager site such as access controls to the tag configuration for the host company. &lt;br /&gt;
&lt;br /&gt;
Letting the marketing folks decide where to get the data they want can result in XSS because they may get it from a URL parameter and put it into a variable that is in a scriptable location on the page.&lt;br /&gt;
&lt;br /&gt;
== Sandboxing Content == &lt;br /&gt;
&lt;br /&gt;
Both of these tools be used by sites to sandbox/clean DOM data.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cure53/DOMPurify DOMPurify] is a fast, tolerant XSS sanitizer for HTML, MathML and SVG. DOMPurify works with a secure default, but offers a lot of configurability and hooks.&lt;br /&gt;
* [https://github.com/hackvertor/MentalJS MentalJS] is a JavaScript parser and sandbox. It whitelists JavaScript code by adding a &amp;quot;$&amp;quot; suffix to variables and accessors.&lt;br /&gt;
&lt;br /&gt;
== Subresource Integrity ==&lt;br /&gt;
&lt;br /&gt;
[https://www.w3.org/TR/SRI/ Subresource Integrity] will ensure that only the code that has been reviewed is executed. The developer generates integrity metadata for the vendor javascript, and adds it to the script element like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script src=&amp;quot;https://analytics.vendor.com/v1.1/script.js&amp;quot; &lt;br /&gt;
   integrity=&amp;quot;sha384-MBO5IDfYaE6c6Aao94oZrIOiC7CGiSNE64QUbHNPhzk8Xhm0djE6QqTpL0HzTUxk&amp;quot;&lt;br /&gt;
   crossorigin=&amp;quot;anonymous&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important to know that in order for SRI to work, the vendor host needs [https://www.w3.org/TR/cors/ CORS] enabled.&lt;br /&gt;
&lt;br /&gt;
== Keeping JavaScript libraries updated ==&lt;br /&gt;
&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities OWASP Top 10 2013 A9] describes the problem of using components with known vulnerabilities. This includes JavaScript libraries. JavaScript libraries must be kept up to date, as previous version can have known vulnerabilities which can lead to the site typically being vulnerable to Cross Site Scripting. There are several tools out there that can help identify such libraries. One such tool is the free open source tool [https://retirejs.github.io RetireJS]&lt;br /&gt;
&lt;br /&gt;
== Sandboxing with iframe ==&lt;br /&gt;
&lt;br /&gt;
You can also put vendor javascript into iframe from different domain (e.g. static data host). It will work as a &amp;quot;jail&amp;quot;&lt;br /&gt;
and vendor javascript will not have direct access to the host page DOM and cookies. The host main page and sandbox iframe can communicate between each other via [https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage postMessage mechanism].&lt;br /&gt;
&lt;br /&gt;
== Vendor Agreements ==&lt;br /&gt;
&lt;br /&gt;
You can have the agreement with the 3rd parties say that they have to implement and prove secure coding and general corporate security.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
https://randywestergren.com/widespread-xss-vulnerabilities-ad-network-code-affecting-top-tier-publishers-retailers/&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
&lt;br /&gt;
[[User:jweiler|Jim Weiler]] - Jim.Weiler@owasp.org&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other Cheatsheets =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation_Body}}&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway_Chapter_styret&amp;diff=211408</id>
		<title>Norway Chapter styret</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway_Chapter_styret&amp;diff=211408"/>
				<updated>2016-03-18T15:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Styret ==&lt;br /&gt;
Styreleder: Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)  &lt;br /&gt;
&lt;br /&gt;
Kasserer: Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)  &lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Valgkomite ==&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)  &lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tilbake til [[Norway]] Chapter&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=203354</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=203354"/>
				<updated>2015-11-13T18:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Neste møter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
==== Medlemsmøte 19. november kl 17:00 - 19:00 ====&lt;br /&gt;
'''Sted:''' Rom Alfa &amp;amp; Omega, ved Norsk Regnesentral, NR ligger i 4. etasje av Kristen Nygaards hus, Gaustadalleen 23a, 0373 Oslo - også kjent som &amp;quot;det gamle IFI-bygget&amp;quot; på OiU&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/226703923/ eller send epost til asmund.skomedal@nr.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/226703923/&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 16. september kl 17:00 - 19:30 ====&lt;br /&gt;
'''Sted:''' Teknologihuset Pilestredet 56, Oslo, store salen&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/225200078/ eller send epost til a.r.thorsen@fsat.no&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/225200078/&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 7. mai kl 17:30 - D-Fens ====&lt;br /&gt;
&lt;br /&gt;
'''Sted:''' Forskningsveien 3b, Oslo (se kart på meetup.com)&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/221907724/ eller send epost til erlend.oftedal(æt)owasp.org&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/221907724/&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
[[Media:OWASP_Norway-Defender_Economics-Andreas_Lindh.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''Generalforsamling''' &lt;br /&gt;
&lt;br /&gt;
'''Tid''': Mandag 13.04.2015 '''Sted''': Mnemonic, Wergelandsveien 23&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1. Valg av nytt styre for OWASP Norway&lt;br /&gt;
 &lt;br /&gt;
Følgende styre ble valgt ved akklamasjon:&lt;br /&gt;
 &lt;br /&gt;
Styreleder:  Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer:    Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
2. Eventuelt&lt;br /&gt;
 &lt;br /&gt;
Erlend presenterte Trello som et verktøy for styremedlemmene å organisere fremtidige medlemsmøter og foreslo Teknologihuset som fast møtested.&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=194665</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=194665"/>
				<updated>2015-05-09T20:39:00Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte 7. mai kl 17:30 - D-Fens */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 7. mai kl 17:30 - D-Fens ====&lt;br /&gt;
&lt;br /&gt;
'''Sted:''' Forskningsveien 3b, Oslo (se kart på meetup.com)&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/221907724/ eller send epost til erlend.oftedal(æt)owasp.org&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/221907724/&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
[[Media:OWASP_Norway-Defender_Economics-Andreas_Lindh.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generalforsamling''' &lt;br /&gt;
&lt;br /&gt;
'''Tid''': Mandag 13.04.2015 '''Sted''': Mnemonic, Wergelandsveien 23&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1. Valg av nytt styre for OWASP Norway&lt;br /&gt;
 &lt;br /&gt;
Følgende styre ble valgt ved akklamasjon:&lt;br /&gt;
 &lt;br /&gt;
Styreleder:  Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer:    Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
2. Eventuelt&lt;br /&gt;
 &lt;br /&gt;
Erlend presenterte Trello som et verktøy for styremedlemmene å organisere fremtidige medlemsmøter og foreslo Teknologihuset som fast møtested.&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:OWASP_Norway-Defender_Economics-Andreas_Lindh.pdf&amp;diff=194664</id>
		<title>File:OWASP Norway-Defender Economics-Andreas Lindh.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:OWASP_Norway-Defender_Economics-Andreas_Lindh.pdf&amp;diff=194664"/>
				<updated>2015-05-09T20:36:49Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=194663</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=194663"/>
				<updated>2015-05-09T20:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte 7. mai kl 17:30 - D-Fens */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 7. mai kl 17:30 - D-Fens ====&lt;br /&gt;
&lt;br /&gt;
'''Sted:''' Forskningsveien 3b, Oslo (se kart på meetup.com)&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/221907724/ eller send epost til erlend.oftedal(æt)owasp.org&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' http://www.meetup.com/OWASP-Norway/events/221907724/&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generalforsamling''' &lt;br /&gt;
&lt;br /&gt;
'''Tid''': Mandag 13.04.2015 '''Sted''': Mnemonic, Wergelandsveien 23&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1. Valg av nytt styre for OWASP Norway&lt;br /&gt;
 &lt;br /&gt;
Følgende styre ble valgt ved akklamasjon:&lt;br /&gt;
 &lt;br /&gt;
Styreleder:  Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer:    Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
2. Eventuelt&lt;br /&gt;
 &lt;br /&gt;
Erlend presenterte Trello som et verktøy for styremedlemmene å organisere fremtidige medlemsmøter og foreslo Teknologihuset som fast møtested.&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=193741</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=193741"/>
				<updated>2015-04-20T17:58:29Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Neste møter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte 7. mai kl 17:30 - D-Fens ====&lt;br /&gt;
&lt;br /&gt;
'''Sted:''' Forskningsveien 3b, Oslo (se kart på meetup.com)&lt;br /&gt;
&lt;br /&gt;
'''Påmelding:''' http://www.meetup.com/OWASP-Norway/events/221907724/ eller send epost til erlend.oftedal(æt)owasp.org&lt;br /&gt;
&lt;br /&gt;
'''Agenda:''' [[http://www.meetup.com/OWASP-Norway/events/221907724/]]&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generalforsamling''' &lt;br /&gt;
&lt;br /&gt;
'''Tid''': Mandag 13.04.2015 '''Sted''': Mnemonic, Wergelandsveien 23&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1. Valg av nytt styre for OWASP Norway&lt;br /&gt;
 &lt;br /&gt;
Følgende styre ble valgt ved akklamasjon:&lt;br /&gt;
 &lt;br /&gt;
Styreleder:  Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer:    Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
2. Eventuelt&lt;br /&gt;
 &lt;br /&gt;
Erlend presenterte Trello som et verktøy for styremedlemmene å organisere fremtidige medlemsmøter og foreslo Teknologihuset som fast møtested.&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=193414</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=193414"/>
				<updated>2015-04-15T12:05:55Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Tidligere møter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Brønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der.&lt;br /&gt;
Det er anbefalt at du melder deg på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] slik at du får med deg oppdateringer og nyheter hos OWASP Norway.&lt;br /&gt;
&lt;br /&gt;
Hvis du har noen tanker eller ideer til tema for medlemsmøter så har vi en [[Forslagskasse]] som du kan poste i. For å se hva vi har snakket om tidligere kan du se i [[#Tidligere år|medlemsmøtehistorikken]].&lt;br /&gt;
&lt;br /&gt;
=== Neste møter ===&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generalforsamling''' &lt;br /&gt;
&lt;br /&gt;
'''Tid''': Mandag 13.04.2015 '''Sted''': Mnemonic, Wergelandsveien 23&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1. Valg av nytt styre for OWASP Norway&lt;br /&gt;
 &lt;br /&gt;
Følgende styre ble valgt ved akklamasjon:&lt;br /&gt;
 &lt;br /&gt;
Styreleder:  Erlend Oftedal &amp;lt;erlend.oftedal@owasp.org&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Kasserer:    Kåre Presttun &amp;lt;kaare@mnemonic.no&amp;gt; (Gjenvalg)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Audun Dragland &amp;lt;audun.dragland@computas.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jostein Tveit &amp;lt;jostein.tveit@steria.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Asbjørn Thorsen &amp;lt;asbjoert@gmail.com&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Jon Are Rakvåg &amp;lt;jonare@jonare.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Styremedlem: Åsmund Skomedal &amp;lt;asmund.skomedal@nr.no&amp;gt; (Ny)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Valgkomite:&lt;br /&gt;
&lt;br /&gt;
Bjarte Østvold &amp;lt;bjarte@nr.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Jøran Vanby Lillesand &amp;lt;joran.lillesand@bekk.no&amp;gt; (Ny)&lt;br /&gt;
&lt;br /&gt;
Markus Harboe &amp;lt;markus.harboe@gmail.com&amp;gt; (Gjenvalg)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
2. Eventuelt&lt;br /&gt;
 &lt;br /&gt;
Erlend presenterte Trello som et verktøy for styremedlemmene å organisere fremtidige medlemsmøter og foreslo Teknologihuset som fast møtested.&lt;br /&gt;
&lt;br /&gt;
== Lokale nyheter ==&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2014]] ===&lt;br /&gt;
=== [[Medlemsmøter 2013]] ===&lt;br /&gt;
=== [[Medlemsmøter 2012]] ===&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

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

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

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=176842</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=176842"/>
				<updated>2014-06-12T09:29:07Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte: 7. Februar, kl 17:00 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Bønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der&lt;br /&gt;
&lt;br /&gt;
Hvis du ikke er på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] så meld deg på!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
[[Forslagskasse]] for tema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neste møte ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 26. Juni, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/188627202/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Hacking with Unicode&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 7. Februar, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/98525562/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Crossing Domains by Crossing Origins&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 18. Oktober, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/84322982/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Sikkerhet i det norske eValg-systemet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 24. april, kl 19:30 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' -,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=Tordenskiolds+gate+3%2C+Oslo Mesh Norway, Tordenskiolds gate 3], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/t7kaxy7a5u7v6u6s klikk her]&lt;br /&gt;
&lt;br /&gt;
Tema denne gang er sikkerhet i mobile applikasjoner. Det blir først en introduksjon, deretter kommer&lt;br /&gt;
Martin Knobloch fra OWASP Nederland for å snakke om iGoat og GoatDroid, for så å dele erfaringer fra&lt;br /&gt;
en code review.&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
[[Media:Mobil - Introduksjon til applikasjonssikkerhet.pdf|OWASP Mobile Top 10]] - Ståle Pettersen&lt;br /&gt;
&lt;br /&gt;
[[Media:OWASP-mobile aps.pdf|OWASP Mobile]] - Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 19. mars, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' F5,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=the+dubliner+oslo&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;fb=1&amp;amp;hq=the+dubliner&amp;amp;hnear=0x46416e61f267f039:0x7e92605fd3231e9a,Oslo,+Norway&amp;amp;cid=0,0,12890284609415510924&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=A The Dubliner], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/d4rfandvnakqydc6 klikk her]&lt;br /&gt;
{|&lt;br /&gt;
|'''&amp;quot;Web Application Access Control Design Excellence&amp;quot;''', Jim Manico&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access Control is a necessary security control at almost every layer within a web application. This talk will discuss&lt;br /&gt;
several of the key access control anti-patterns commonly found during website security audits. These access control anti-patterns&lt;br /&gt;
include hard-coded security policies, lack of horizontal access control, and &amp;quot;fail open&amp;quot; access control mechanisms. In reviewing&lt;br /&gt;
these and other access control problems, we will discuss and design a positive access control mechanism that is data contextual,&lt;br /&gt;
activity based, configurable, flexible, and deny-by-default - among other positive design attributes that make up a robust&lt;br /&gt;
web-based access-control mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lokale Nyheter ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=168935</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=168935"/>
				<updated>2014-02-25T10:51:34Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Bønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der&lt;br /&gt;
&lt;br /&gt;
Hvis du ikke er på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] så meld deg på!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
[[Forslagskasse]] for tema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neste møte ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 7. Februar, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/98525562/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Crossing Domains by Crossing Origins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 18. Oktober, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/84322982/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Sikkerhet i det norske eValg-systemet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 24. april, kl 19:30 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' -,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=Tordenskiolds+gate+3%2C+Oslo Mesh Norway, Tordenskiolds gate 3], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/t7kaxy7a5u7v6u6s klikk her]&lt;br /&gt;
&lt;br /&gt;
Tema denne gang er sikkerhet i mobile applikasjoner. Det blir først en introduksjon, deretter kommer&lt;br /&gt;
Martin Knobloch fra OWASP Nederland for å snakke om iGoat og GoatDroid, for så å dele erfaringer fra&lt;br /&gt;
en code review.&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
[[Media:Mobil - Introduksjon til applikasjonssikkerhet.pdf|OWASP Mobile Top 10]] - Ståle Pettersen&lt;br /&gt;
&lt;br /&gt;
[[Media:OWASP-mobile aps.pdf|OWASP Mobile]] - Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 19. mars, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' F5,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=the+dubliner+oslo&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;fb=1&amp;amp;hq=the+dubliner&amp;amp;hnear=0x46416e61f267f039:0x7e92605fd3231e9a,Oslo,+Norway&amp;amp;cid=0,0,12890284609415510924&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=A The Dubliner], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/d4rfandvnakqydc6 klikk her]&lt;br /&gt;
{|&lt;br /&gt;
|'''&amp;quot;Web Application Access Control Design Excellence&amp;quot;''', Jim Manico&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access Control is a necessary security control at almost every layer within a web application. This talk will discuss&lt;br /&gt;
several of the key access control anti-patterns commonly found during website security audits. These access control anti-patterns&lt;br /&gt;
include hard-coded security policies, lack of horizontal access control, and &amp;quot;fail open&amp;quot; access control mechanisms. In reviewing&lt;br /&gt;
these and other access control problems, we will discuss and design a positive access control mechanism that is data contextual,&lt;br /&gt;
activity based, configurable, flexible, and deny-by-default - among other positive design attributes that make up a robust&lt;br /&gt;
web-based access-control mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lokale Nyheter ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=168934</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=168934"/>
				<updated>2014-02-25T10:51:26Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Bønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøte ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [http://www.meetup.com/OWASP-Norway/ meetup.com/OWASP-Norway/]. Påmelding finner du også der&lt;br /&gt;
&lt;br /&gt;
Hvis du ikke er på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] så meld deg på!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
[[Forslagskasse]] for tema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neste møte ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 7. Februar, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/98525562/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Crossing Domains by Crossing Origins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 18. Oktober, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/84322982/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Sikkerhet i det norske eValg-systemet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 24. april, kl 19:30 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' -,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=Tordenskiolds+gate+3%2C+Oslo Mesh Norway, Tordenskiolds gate 3], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/t7kaxy7a5u7v6u6s klikk her]&lt;br /&gt;
&lt;br /&gt;
Tema denne gang er sikkerhet i mobile applikasjoner. Det blir først en introduksjon, deretter kommer&lt;br /&gt;
Martin Knobloch fra OWASP Nederland for å snakke om iGoat og GoatDroid, for så å dele erfaringer fra&lt;br /&gt;
en code review.&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
[[Media:Mobil - Introduksjon til applikasjonssikkerhet.pdf|OWASP Mobile Top 10]] - Ståle Pettersen&lt;br /&gt;
&lt;br /&gt;
[[Media:OWASP-mobile aps.pdf|OWASP Mobile]] - Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 19. mars, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' F5,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=the+dubliner+oslo&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;fb=1&amp;amp;hq=the+dubliner&amp;amp;hnear=0x46416e61f267f039:0x7e92605fd3231e9a,Oslo,+Norway&amp;amp;cid=0,0,12890284609415510924&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=A The Dubliner], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/d4rfandvnakqydc6 klikk her]&lt;br /&gt;
{|&lt;br /&gt;
|'''&amp;quot;Web Application Access Control Design Excellence&amp;quot;''', Jim Manico&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access Control is a necessary security control at almost every layer within a web application. This talk will discuss&lt;br /&gt;
several of the key access control anti-patterns commonly found during website security audits. These access control anti-patterns&lt;br /&gt;
include hard-coded security policies, lack of horizontal access control, and &amp;quot;fail open&amp;quot; access control mechanisms. In reviewing&lt;br /&gt;
these and other access control problems, we will discuss and design a positive access control mechanism that is data contextual,&lt;br /&gt;
activity based, configurable, flexible, and deny-by-default - among other positive design attributes that make up a robust&lt;br /&gt;
web-based access-control mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lokale Nyheter ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=168933</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=168933"/>
				<updated>2014-02-25T10:50:36Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Bønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøte ==&lt;br /&gt;
&lt;br /&gt;
Fremtidige medlemsmøter blir annonsert på mailinglista og på [[http://www.meetup.com/OWASP-Norway/ meetup.com]]. Påmelding finner du også der&lt;br /&gt;
&lt;br /&gt;
Hvis du ikke er på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] så meld deg på!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
[[Forslagskasse]] for tema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neste møte ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 7. Februar, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/98525562/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Crossing Domains by Crossing Origins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 18. Oktober, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/84322982/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Sikkerhet i det norske eValg-systemet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 24. april, kl 19:30 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' -,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=Tordenskiolds+gate+3%2C+Oslo Mesh Norway, Tordenskiolds gate 3], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/t7kaxy7a5u7v6u6s klikk her]&lt;br /&gt;
&lt;br /&gt;
Tema denne gang er sikkerhet i mobile applikasjoner. Det blir først en introduksjon, deretter kommer&lt;br /&gt;
Martin Knobloch fra OWASP Nederland for å snakke om iGoat og GoatDroid, for så å dele erfaringer fra&lt;br /&gt;
en code review.&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
[[Media:Mobil - Introduksjon til applikasjonssikkerhet.pdf|OWASP Mobile Top 10]] - Ståle Pettersen&lt;br /&gt;
&lt;br /&gt;
[[Media:OWASP-mobile aps.pdf|OWASP Mobile]] - Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 19. mars, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' F5,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=the+dubliner+oslo&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;fb=1&amp;amp;hq=the+dubliner&amp;amp;hnear=0x46416e61f267f039:0x7e92605fd3231e9a,Oslo,+Norway&amp;amp;cid=0,0,12890284609415510924&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=A The Dubliner], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/d4rfandvnakqydc6 klikk her]&lt;br /&gt;
{|&lt;br /&gt;
|'''&amp;quot;Web Application Access Control Design Excellence&amp;quot;''', Jim Manico&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access Control is a necessary security control at almost every layer within a web application. This talk will discuss&lt;br /&gt;
several of the key access control anti-patterns commonly found during website security audits. These access control anti-patterns&lt;br /&gt;
include hard-coded security policies, lack of horizontal access control, and &amp;quot;fail open&amp;quot; access control mechanisms. In reviewing&lt;br /&gt;
these and other access control problems, we will discuss and design a positive access control mechanism that is data contextual,&lt;br /&gt;
activity based, configurable, flexible, and deny-by-default - among other positive design attributes that make up a robust&lt;br /&gt;
web-based access-control mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lokale Nyheter ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=REST_Assessment_Cheat_Sheet&amp;diff=162456</id>
		<title>REST Assessment Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=REST_Assessment_Cheat_Sheet&amp;diff=162456"/>
				<updated>2013-11-04T20:06:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* How to pen test a RESTful web service? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= About RESTful Web Services =&lt;br /&gt;
&lt;br /&gt;
Web Services are an implementation of web technology used for machine to machine communication. As such they are used for Inter application communication, Web 2.0 and Mashups and by desktop and mobile applications to call a server. RESTful web services (often called simply REST) are a light weight variant of Web Services based on the RESTful design pattern. In practice RESTful web services utilizes HTTP requests that are similar to regular HTTP calls in contrast with other Web Services technologies such as SOAP which utilizes a complex protocol.&lt;br /&gt;
&lt;br /&gt;
= Key relevant properties of RESTful web services =&lt;br /&gt;
* Use of HTTP methods (GET, POST, PUT and DELETE) as the primary verb for the requested operation.&lt;br /&gt;
* None standard parameters specifications:&lt;br /&gt;
** As part of the URL&lt;br /&gt;
** In headers&lt;br /&gt;
* Structured parameters and responses using JSON or XML in a parameter values, request body or response body. Those are required to communicate machine useful information.&lt;br /&gt;
* Custom authentication and session management, often utilizing custom security tokens: this is needed as machine to machine communication does not allow for login sequences.&lt;br /&gt;
* Lack of formal documentation. A proposed standard for describing RESTful web services called WADL was never officially adapted. &lt;br /&gt;
&lt;br /&gt;
= The challenge of security testing RESTful web services =&lt;br /&gt;
* Inspecting the application does not reveal the attack surface, I.e. the URLs and parameter structure used by the RESTful web service. The reasons are:&lt;br /&gt;
** No application utilizes all the available functions and parameters exposed by the service &lt;br /&gt;
** Those used are often activated dynamically by client side code and not as links in pages.&lt;br /&gt;
** The client application is often not a web application and does not allow inspection of the activating link or even relevant code. &lt;br /&gt;
* The parameters are none standard making it hard to determine what is just part of the URL or a constant header and what is a parameter worth fuzzing.&lt;br /&gt;
* As a machine interface the number of parameters used can be very large, for example a JSON structure may include dozens of parameters. Fuzzing each one significantly lengthen the time required for testing.&lt;br /&gt;
* Custom authentication mechanisms require reverse engineering and make popular tools not useful as they cannot track a login session.&lt;br /&gt;
&lt;br /&gt;
= How to pen test a RESTful web service? =&lt;br /&gt;
; Determine the attack surface through documentation - RESTful pen testing might be better off if some level of white box testing is allowed and you can get information about the service. This information will ensure fuller coverage of the attack surface. Such information to look for:&lt;br /&gt;
* Formal service description - While for other types of web services such as SOAP a formal description, usually in WSDL is often available, this is seldom the case for REST. That said, either WSDL 2.0 or WADL can describe REST and are sometimes used.&lt;br /&gt;
* A developer guide for using the service may be less detailed but will commonly be found, and might even be considered &amp;quot;black box&amp;quot;&lt;br /&gt;
* Application source or configuration - in many frameworks, including dotNet ,the REST service definition  might be easily obtained from configuration files rather than from code.&lt;br /&gt;
		&lt;br /&gt;
; Collect full requests using a proxy - while always an important pen testing step, this is more important for REST based applications as the application UI may not give clues on the actual attack surface. Note that the proxy must be able to collect full requests and not just URLs as REST services utilize more than just GET parameters.&lt;br /&gt;
	&lt;br /&gt;
; Analyze collected requests to determine the attack surface:&lt;br /&gt;
* Look for non-standard parameters:&lt;br /&gt;
** Look for abnormal HTTP headers - those would many times be header based parameters. &lt;br /&gt;
** Determine if a URL segment has a repeating pattern across URLs. Such patterns can include a date, a number or an ID like string and indicate that the URL segment is a URL embedded parameter. For example: http://server/srv/2013-10-21/use.php&lt;br /&gt;
** Look for structured parameter values - those may be JSON, XML or a non-standard structure. &lt;br /&gt;
** If the last element of a URL does not have an extension, it may be a parameter. This is especially true if the application technology normally uses extensions or if a previous segment does have an extension. For example: http://server/svc/Grid.asmx/GetRelatedListItems&lt;br /&gt;
** Look for highly varying URL segments - a single URL segment that has many values may be parameter and not a physical directory. For example if the URL http://server/src/XXXX/page repeats with hundreds of value for XXXX, chances XXXX is a parameter.&lt;br /&gt;
; Verify non-standard parameters: in some cases (but not all), setting the value of a URL segment suspected of being a parameter to a value expected to be invalid can help determine if it is a path elements of a parameter. If a path element, the web server will return a 404 message, while for an invalid value to a parameter the answer would be an application level message as the value is legal at the web server level.&lt;br /&gt;
			&lt;br /&gt;
; Analyzing collected requests to optimize fuzzing - after identifying potential parameters to fuzz, analyze the collected values for each to determine -&lt;br /&gt;
* Valid vs. invalid values, so that fuzzing can focus on marginal invalid values. For example sending &amp;quot;0&amp;quot; for a value found to be always a positive integer.&lt;br /&gt;
* Sequences allowing to fuzz beyond the range presumably allocated to the current user.&lt;br /&gt;
&lt;br /&gt;
; Lastly, when fuzzing, don't forget to emulate the authentication mechanism used.&lt;br /&gt;
&lt;br /&gt;
= Related Resources =&lt;br /&gt;
* [[REST Security Cheat Sheet]] - the other side of this cheat sheet&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://www.xiom.com/2011/11/20/restful_webservices_testing RESTful services, web security blind spot] - a presentation (including video) elaborating on most of the topics on this cheat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors  =&lt;br /&gt;
&lt;br /&gt;
Ofer Shezaf - ofer@shezaf.com&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158315</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158315"/>
				<updated>2013-09-12T05:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext ''&amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;'' and a cipher with a block size ''&amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;'', the number of blocks will be ''&amp;lt;tt&amp;gt;b = ceil( length(b) / n)&amp;lt;/tt&amp;gt;''. The length of the encrypted string will be ''&amp;lt;tt&amp;gt;y=(b+1)*n&amp;lt;/tt&amp;gt;'' due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the second-to-last block ''&amp;lt;tt&amp;gt;b-1&amp;lt;/tt&amp;gt;'' (the least significant bit of the byte at ''&amp;lt;tt&amp;gt;y-n-1&amp;lt;/tt&amp;gt;''), re-encode and send. Next, decode the original string, flip the last bit of the block ''&amp;lt;tt&amp;gt;b-2&amp;lt;/tt&amp;gt;'' (the least significant bit of the byte at ''&amp;lt;tt&amp;gt;y-2*n-1&amp;lt;/tt&amp;gt;''), re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Examples'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Visualization of the decryption process - [http://erlend.oftedal.no/blog/poet/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158314</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158314"/>
				<updated>2013-09-12T05:50:05Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Black Box testing and example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext ''&amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;'' and a cipher with a block size ''&amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;'', the number of blocks will be ''&amp;lt;tt&amp;gt;b = ceil( length(b) / n)&amp;lt;/tt&amp;gt;''. The length of the encrypted string will be ''&amp;lt;tt&amp;gt;y=(b+1)*n&amp;lt;/tt&amp;gt;'' due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the second-to-last block ''&amp;lt;tt&amp;gt;b-1&amp;lt;/tt&amp;gt;'' (the least significant bit of the byte at ''&amp;lt;tt&amp;gt;y-n-1&amp;lt;/tt&amp;gt;''), re-encode and send. Next, decode the original string, flip the last bit of the block ''&amp;lt;tt&amp;gt;b-2&amp;lt;/tt&amp;gt;'' (the least significant bit of the byte at ''&amp;lt;tt&amp;gt;y-2*n-1&amp;lt;/tt&amp;gt;''), re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Examples'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Visualization of the decryption process - [http://erlend.oftedal.no/blog/poet/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158313</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158313"/>
				<updated>2013-09-12T05:47:24Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Black Box testing and example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext ''&amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt;'' and a cipher with a block size ''&amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;'', the number of blocks will be ''&amp;lt;tt&amp;gt;b = ceil( length(b) / n)&amp;lt;/tt&amp;gt;''. The length of the encrypted string will be ''&amp;lt;tt&amp;gt;(b+1)*n&amp;lt;/tt&amp;gt;'' due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the second-to-last block (the last bit of block ''&amp;lt;tt&amp;gt;b-1&amp;lt;/tt&amp;gt;''), re-encode and send. Next, decode the original string, flip the last bit of the block ''&amp;lt;tt&amp;gt;b-2&amp;lt;/tt&amp;gt;'', re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Examples'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Visualization of the decryption process - [http://erlend.oftedal.no/blog/poet/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158312</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158312"/>
				<updated>2013-09-12T05:40:29Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Black Box testing and example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext p and a cipher with a block size n, the number of blocks will be b = ceil( length(b) / n). The length of the encrypted string will be (b+1)*n due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the second-to-last block (the last bit of block b), re-encode and send. Next, decode the original string, flip the last bit of the block b - 1, re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Examples'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Visualization of the decryption process - [http://erlend.oftedal.no/blog/poet/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158311</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158311"/>
				<updated>2013-09-12T05:39:20Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext p and a cipher with a block size n, the number of blocks will be b = ceil( length(b) / n). The length of the encrypted string will be (b+1)*n due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the string (the last bit of block b+1), re-encode and send. Next, decode the original string, flip the last bit of the second to last block (block b), re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Examples'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Visualization of the decryption process - [http://erlend.oftedal.no/blog/poet/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158310</id>
		<title>Testing for Padding Oracle (OTG-CRYPST-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Padding_Oracle_(OTG-CRYPST-002)&amp;diff=158310"/>
				<updated>2013-09-12T05:36:36Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Black Box testing and example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A padding oracle is a function of an application which decrypts encrypted data provided by the client, e.g. internal session state stored on the client, and leaks the state of the validity of the padding after decryption. The existence of a padding oracle allows an attacker to decrypt encrypted data and encrypt arbitrary data without knowledge of the key used for these cryptographic operations. This can lead to leakage of sensible data or to privilege escalation vulnerabilities, if integrity of the encrypted data is assumed by the application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Block ciphers encrypt data only in blocks of certain sizes. Block sizes used by common ciphers are 8 and 16 bytes. Data where the size doesn't matches a multiple of the block size of the used cipher has to be padded in a manner, that the decryptor is able to strip the padding. A commonly used padding scheme is PKCS#7. It fills the remaining bytes with the value of the padding length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' if the padding has the length of 5 bytes, the byte value 0x05 is repeated five times after the plain text. &lt;br /&gt;
&lt;br /&gt;
An error condition is present, if the padding doesn't matches the syntax of the used padding scheme. A padding oracle is present, if an application leaks this specific padding error condition for encrypted data provided by the client. This can happen by exposing exceptions (e.g. BadPaddingException in Java) directly, by subtle differences in the responses sent to the client or by another side-channel like timing behavior.&lt;br /&gt;
&lt;br /&gt;
Certain modes of operation of cryptography allow bit-flipping attacks, where flipping of a bit in the cipher text causes that the bit is also flipped in the plain text. Flipping a bit in the n-th block of CBC encrypted data causes that the same bit in the (n+1)-th block is flipped in the decrypted data. The n-th block of the decrypted cipher text is garbaged by this manipulation.&lt;br /&gt;
&lt;br /&gt;
The padding oracle attack enables an attacker to decrypt encrypted data without knowledge of the encryption key and used cipher by adaptively sending skillful manipulated cipher texts to the padding oracle and observing of the results returned by it. This causes loss of confidentiality of the encrypted data. E.g. in the case of session data stored on the client side the attacker can gain information about the internal state and structure of the application. A padding oracle attack also enables an attacker to encrypt arbitrary plain texts without knowledge of the used key and cipher. If the application assumes that integrity and authenticity of the decrypted data is given, an attacker could be able to manipulate internal session state and possibly gain higher privileges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
First, possible input points for padding oracles must be identified. Generally the following conditions must be met:&lt;br /&gt;
&lt;br /&gt;
# The data is encrypted. Good candidates are values which appear to be random.&lt;br /&gt;
# A block cipher is used. The length of the decoded (Base64 is used often) cipher text is a multiple of common cipher block sizes like 8 or 16 bytes. Different cipher texts (e.g. gathered by different sessions or manipulation of session state) share a common divisor in the length.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;Dg6W8OiWMIdVokIDH15T/A==&amp;lt;/nowiki&amp;gt; results after Base64 decoding in 0e 0e 96 f0 e8 96 30 87 55 a2 42 03 1f 5e 53 fc. This seems to be random and 16 byte long.&lt;br /&gt;
&lt;br /&gt;
If such an input value candidate is identified, the behavior of the application to bit-wise tampering of the encrypted value should be verified. Normally this Base64 encoded value will include the initialization vector (IV) prepended to the cipher text. Given a plaintext p and a cipher with a block size n, the number of blocks will be b = ceil( length(b) / n). The length of the encrypted string will be (b+1)*n due to the initialization vector. To verify the precense of the oracle, decode the string, flip the last bit of the string (the last bit of block b+1), re-encode and send. Next, decode the original string, flip the last bit of the second to last block (block b), re-encode and send. &lt;br /&gt;
&lt;br /&gt;
If it's known that the encrypted string is a single block (the IV is stored on the server or the application is using a bad practice hardcoded IV), several bit flips must be performed in turn. An alternative approach could be to prepend a random block, and flip bits in order to make the last byte of the added block take all possible values (0 to 255).&lt;br /&gt;
&lt;br /&gt;
The tests and the base value should at least cause three different states while and after decryption:&lt;br /&gt;
&lt;br /&gt;
* Cipher text gets decrypted, resulting data is correct.&lt;br /&gt;
* Cipher text gets decrypted, resulting data is garbled and causes some exception or error handling in the application logic.&lt;br /&gt;
* Cipher text decryption fails due to padding errors.&lt;br /&gt;
&lt;br /&gt;
Compare the responses carefully. Search especially for exceptions and messages which state that something is wrong with the padding. If such messages appear, the application contains a padding oracle. If the three different states described above are observable implicitly (different error messages, timing side-channels), there is a high probability, that there is a padding oracle present at this point. Try to perform the padding oracle attack to ensure this.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* ASP.NET throws &amp;quot;System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.&amp;quot; if padding of a decrypted cipher text is broken.&lt;br /&gt;
* In Java a javax.crypto.BadPaddingException is thrown in this case.&lt;br /&gt;
* Decryption errors or similar can be possible padding oracles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
A secure implementation will check for integrity and cause only two responses: ok and failed. There are no side channels which can be used to determine internal error states.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== White Box testing and example ==&lt;br /&gt;
'''Testing for padding oracle vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Verify all places where encrypted data from the client, that should only be known by the server, is decrypted. The following conditions should be met by such code:&lt;br /&gt;
&lt;br /&gt;
# The integrity of the cipher text should be verified by a secure mechanism which uses a different secret than the encryption and decryption of the cipher text.&lt;br /&gt;
# All error states while decryption and further processing are handled uniformly.&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Wikipedia - Padding oracle attack - [http://en.wikipedia.org/wiki/Padding_oracle_attack]&lt;br /&gt;
* Juliano Rizzo, Thai Duong, &amp;quot;Practical Padding Oracle Attacks&amp;quot; - [http://www.usenix.org/event/woot10/tech/full_papers/Rizzo.pdf]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
* PadBuster - [https://github.com/GDSSecurity/PadBuster]&lt;br /&gt;
* Poracle - [https://github.com/iagox86/Poracle]&lt;br /&gt;
* Padding Oracle Exploitation Tool (POET) - [http://netifera.com/research/]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

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

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

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_NoSQL_injection&amp;diff=156971</id>
		<title>Testing for NoSQL injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_NoSQL_injection&amp;diff=156971"/>
				<updated>2013-08-19T13:26:53Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* References */  typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
NoSQL databases provide looser consistency restrictions than traditional SQL databases. By requiring fewer relational constraints and consistency checks, NoSQL databases often offer performance and scaling benefits. Yet these databases are still potentially vulnerable to injection attacks, even if they aren't using the traditional SQL syntax. Because these NoSQL injection attacks may execute within a procedural[http://en.wikipedia.org/wiki/Procedural_programming] language , rather than in the declarative[http://en.wikipedia.org/wiki/Declarative_programming] SQL language, the potential impacts are greater than traditional SQL injection.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
NoSQL database calls are written in the application's programming language, a custom API call, or formatted according to a common convention (such as XML, JSON, LINQ, etc). Malicious input targeting those specifications may not trigger the primarily application sanitization checks. For example, filtering out common HTML special characters such as &amp;lt;code&amp;gt; &amp;lt; &amp;gt; &amp;amp; ; &amp;lt;/code&amp;gt; will not prevent attacks against a JSON API, where special characters include &amp;lt;code&amp;gt; / { } : &amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
There are now over 150 NoSQL databases available[http://nosql-database.org/] for use within an application, providing APIs in a variety of languages and relationship models. Each offers different features and restrictions. Because there is not a common language between them, example injection code will not apply across all NoSQL databases. For this reason, anyone testing for NoSQL injection attacks will need to familiarize themselves with the syntax, data model, and underlying programming language in order to craft specific tests.&lt;br /&gt;
&lt;br /&gt;
NoSQL injection attacks may execute in different areas of an application than traditional SQL injection. Where SQL injection would execute within the database engine, NoSQL variants may execute during within the application layer or the database layer, depending on the NoSQL API used and data model. Typically NoSQL injection attacks will execute where the attack string is parsed, evaluated, or concatenated into a NoSQL API call.&lt;br /&gt;
&lt;br /&gt;
Additional timing attacks may be relevant to the lack of concurrency checks within a NoSQL database. These are not covered under injection testing.&lt;br /&gt;
&lt;br /&gt;
At the time of writing MongoDB is the most widely used NoSQL database, and so all examples will feature MongoDB APIs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for NoSQL injection vulnerabilities in MongoDB:''' &amp;lt;br&amp;gt;&lt;br /&gt;
The MongoDB API expects BSON (Binary JSON) calls, and includes a secure BSON query assembly tool. However, according to MongoDB documentation - unserialized JSON and JavaScript expressions are permitted in several alternative query parameters.[http://docs.mongodb.org/manual/faq/developers/#javascript] The most commonly used API call allowing arbitrary JavaScript input is the $where operator.&lt;br /&gt;
&lt;br /&gt;
The MongoDB $where operator typically is used as a simple filter or check, as it is within SQL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; db.myCollection.find( { $where: &amp;quot;this.credits == this.debits&amp;quot; } ); &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally JavaScript is also evaluated to allow more advanced conditions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; db.myCollection.find( { $where: function() { return obj.credits - obj.debits &amp;lt; 0; } } ); &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example 1===&lt;br /&gt;
&lt;br /&gt;
If an attacker were able to manipulate the data passed into the $where operator, that attacker could include arbitrary JavaScript to be evaluated as part of the MongoDB query. An example vulnerability is exposed in the following code, if user input is passed directly into the MongoDB query without sanitization.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;db.myCollection.find( { active: true, $where: function() { return obj.credits - obj.debits &amp;lt; $userInput; } } );;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As with testing other types of injection, one does not need to fully exploit the vulnerability to demonstrate a problem. By injecting special characters relevant to the target API language, and observing the results, a tester can determine if the application correctly sanitized the input. For example within MongoDB, if a string containing any of the following special characters were passed unsanitized, it would trigger a database error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;' &amp;quot; \ ; { }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With normal SQL injection, a similar vulnerability would allow an attacker to execute arbitrary SQL commands - exposing or manipulating data at will. However, because JavaScript is a fully featured language, not only does this allow an attacker to manipulate data, but also to run arbitrary code. For example, instead of just causing an error when testing, a full exploit would use the special characters to craft valid JavaScript.&lt;br /&gt;
&lt;br /&gt;
This input &amp;lt;code&amp;gt;0;var date=new Date(); do{curDate = new Date();}while(curDate-date&amp;lt;10000)&amp;lt;/code&amp;gt; inserted into $userInput in the above example code would result in the following JavaScript function being executed. This specific attack string would case the entire MongoDB instance to execute at 100% CPU usage for 10 second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function() { return obj.credits - obj.debits &amp;lt; 0;var date=new Date(); do{curDate = new Date();}while(curDate-date&amp;lt;10000); }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example 2===&lt;br /&gt;
&lt;br /&gt;
Even if the input used within queries is completely sanitized or parameterized, there is an alternate path in which one might trigger NoSQL injection. Many NoSQL instances have their own reserved variable names, independent of the application programming language. &lt;br /&gt;
&lt;br /&gt;
For example within MongoDB, the &amp;lt;code&amp;gt;$where&amp;lt;/code&amp;gt; syntax itself is a reserved query operator. It needs to be passed into the query exactly as shown; any alteration would cause a database error. However, because &amp;lt;code&amp;gt;$where&amp;lt;/code&amp;gt; is also a valid PHP variable name, it may be possible for an attacker to insert code into the query by creating a PHP variable named &amp;lt;code&amp;gt;$where&amp;lt;/code&amp;gt;. The PHP MongoDB documentation explicitly warns developers: &amp;lt;pre&amp;gt;Please make sure that for all special query operators (starting with $) you use single quotes so that PHP doesn't try to replace &amp;quot;$exists&amp;quot; with the value of the variable $exists.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Even if a query depended on no user input, such as the following example, an attacker could exploit MongoDB by replacing the operator with malicious data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; db.myCollection.find( { $where: function() { return obj.credits - obj.debits &amp;lt; 0; } } ); &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One way to potentially assign data to PHP variables is via HTTP Parameter Pollution (see: [[Testing_for_HTTP_Parameter_pollution_(OWASP-DV-004)]]). By creating a variable named &amp;lt;code&amp;gt;$where&amp;lt;/code&amp;gt; via parameter pollution, one could trigger a MongoDB error indicating that the query is no longer valid. Any value of &amp;lt;code&amp;gt;$where&amp;lt;/code&amp;gt; other than the string &amp;quot;$where&amp;quot; itself, should suffice to demonstrate vulnerability. An attacker would develop a full exploit by inserting the following: &amp;lt;code&amp;gt;&amp;quot;$where: function() { //arbitrary JavaScript here }&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
Bryan Sullivan from Adobe: &amp;quot;Server-Side JavaScript Injection&amp;quot; - https://media.blackhat.com/bh-us-11/Sullivan/BH_US_11_Sullivan_Server_Side_WP.pdf&lt;br /&gt;
&lt;br /&gt;
Bryan Sullivan from Adobe: &amp;quot;NoSQL, But Even Less Security&amp;quot; - http://blogs.adobe.com/asset/files/2011/04/NoSQL-But-Even-Less-Security.pdf&lt;br /&gt;
&lt;br /&gt;
Erlend from Bekk Consulting: &amp;quot;[Security] NOSQL-injection&amp;quot; - http://erlend.oftedal.no/blog/?blogid=110&lt;br /&gt;
&lt;br /&gt;
Felipe Aragon from Syhunt: &amp;quot;NoSQL/SSJS Injection&amp;quot; - http://www.syhunt.com/?n=Articles.NoSQLInjection&lt;br /&gt;
&lt;br /&gt;
MongoDB Documentation: &amp;quot;How does MongoDB address SQL or Query injection?&amp;quot; - http://docs.mongodb.org/manual/faq/developers/#how-does-mongodb-address-sql-or-query-injection&lt;br /&gt;
&lt;br /&gt;
PHP Documentation: &amp;quot;MongoCollection::find&amp;quot; - http://php.net/manual/en/mongocollection.find.php&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154336</id>
		<title>OWASP SafeNuGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154336"/>
				<updated>2013-06-23T20:50:34Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OWASP Top 10 2013 contains a new entry: [https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities A9 - Using Components with Known Vulnerabilities]. SafeNuGet can currently be used to scan .NET applications to identify any known vulnerable components.&lt;br /&gt;
&lt;br /&gt;
The problem with using known vulnerable components was described very well in a paper by Jeff Williams and Arshan Dabirsiaghi titled, &amp;quot;[https://www.aspectsecurity.com/uploads/downloads/2012/03/Aspect-Security-The-Unfortunate-Reality-of-Insecure-Libraries.pdf The Unfortunate Reality of Insecure Libraries]&amp;quot;. The gist of the paper is that we as a development community include third party libraries in our applications that contain well known published vulnerabilities (such as those at the [http://web.nvd.nist.gov/view/vuln/search National Vulnerability Database]).&lt;br /&gt;
&lt;br /&gt;
OWASP SafeNuGet is an MSBuild task which will warn developers if they are using NuGet packages with known vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
More information about SafeNuGet can be found on the [https://github.com/owasp/SafeNuGet Github SafeNuGet site].&lt;br /&gt;
&lt;br /&gt;
For a similar tool for java see [[OWASP_Dependency_Check]]&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_SafeNuGet}} &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154335</id>
		<title>OWASP SafeNuGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154335"/>
				<updated>2013-06-23T20:48:31Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OWASP Top 10 2013 contains a new entry: [https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities A9 - Using Components with Known Vulnerabilities]. SafeNuGet can currently be used to scan .NET applications to identify any known vulnerable components.&lt;br /&gt;
&lt;br /&gt;
The problem with using known vulnerable components was described very well in a paper by Jeff Williams and Arshan Dabirsiaghi titled, &amp;quot;[https://www.aspectsecurity.com/uploads/downloads/2012/03/Aspect-Security-The-Unfortunate-Reality-of-Insecure-Libraries.pdf The Unfortunate Reality of Insecure Libraries]&amp;quot;. The gist of the paper is that we as a development community include third party libraries in our applications that contain well known published vulnerabilities (such as those at the [http://web.nvd.nist.gov/view/vuln/search National Vulnerability Database]).&lt;br /&gt;
&lt;br /&gt;
OWASP SafeNuGet is an MSBuild task which will warn developers if they are using NuGet packages with known vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
More information about SafeNuGet can be found on the [https://github.com/owasp/SafeNuGet Github SafeNuGet site].&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_SafeNuGet}} &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154334</id>
		<title>OWASP SafeNuGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154334"/>
				<updated>2013-06-23T20:48:15Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OWASP Top 10 2013 contains a new entry: [https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities A9 - Using Components with Known Vulnerabilities]. SafeNuGet can currently be used to scan .NET applications to identify any known vulnerable components.&lt;br /&gt;
&lt;br /&gt;
The problem with using known vulnerable components was described very well in a paper by Jeff Williams and Arshan Dabirsiaghi titled, &amp;quot;[https://www.aspectsecurity.com/uploads/downloads/2012/03/Aspect-Security-The-Unfortunate-Reality-of-Insecure-Libraries.pdf The Unfortunate Reality of Insecure Libraries]&amp;quot;. The gist of the paper is that we as a development community include third party libraries in our applications that contain well known published vulnerabilities (such as those at the [http://web.nvd.nist.gov/view/vuln/search National Vulnerability Database]).&lt;br /&gt;
&lt;br /&gt;
OWASP SafeNuGet is an MSBuild task which will warn developers if they are using NuGet packages with known vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
More information about dependency-check can be found on the [https://github.com/owasp/SafeNuGet Github SafeNuGet site].&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_SafeNuGet}} &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet/Releases/Current&amp;diff=154328</id>
		<title>Projects/OWASP SafeNuGet/Releases/Current</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet/Releases/Current&amp;diff=154328"/>
				<updated>2013-06-23T19:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The latest release is found here: [http://nuget.org/packages/SafeNuGet/ http://nuget.org/packages/SafeNuGet/]&lt;br /&gt;
&lt;br /&gt;
The code is here: [http://github.com/OWASP/SafeNuGet/ http://github.com/OWASP/SafeNuGet/]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet/Releases/Current&amp;diff=154327</id>
		<title>Projects/OWASP SafeNuGet/Releases/Current</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet/Releases/Current&amp;diff=154327"/>
				<updated>2013-06-23T19:14:54Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Created page with &amp;quot;The latest release is found here: [http://nuget.org/packages/SafeNuGet/ http://nuget.org/packages/SafeNuGet/]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The latest release is found here: [http://nuget.org/packages/SafeNuGet/ http://nuget.org/packages/SafeNuGet/]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet&amp;diff=154326</id>
		<title>Projects/OWASP SafeNuGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_SafeNuGet&amp;diff=154326"/>
				<updated>2013-06-23T18:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Created page with &amp;quot;{{Template:Project About | project_name =OWASP SafeNuGet | project_home_page =OWASP_SafeNuGet | project_description =OWASP SafeNuGet is an MsBuild task to warn about the use o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Project About&lt;br /&gt;
| project_name =OWASP SafeNuGet&lt;br /&gt;
| project_home_page =OWASP_SafeNuGet&lt;br /&gt;
| project_description =OWASP SafeNuGet is an MsBuild task to warn about the use of NuGet libraries with known vulnerabilities.&lt;br /&gt;
| project_license =GNU GPL v3 License &lt;br /&gt;
| leader_name1 =Erlend Oftedal&lt;br /&gt;
| leader_email1 =erlend.oftedal@owasp.org &lt;br /&gt;
| mailing_list_name = N/A&lt;br /&gt;
| project_road_map = https://www.owasp.org/index.php/Projects/OWASP_SafeNuGet/Roadmap&lt;br /&gt;
&lt;br /&gt;
| links_url1 = https://github.com/OWASP/SafeNuGet&lt;br /&gt;
| links_name1 = https://github.com/OWASP/SafeNuGet&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154325</id>
		<title>OWASP SafeNuGet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_SafeNuGet&amp;diff=154325"/>
				<updated>2013-06-23T17:26:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OWASP Top 10 2013 contains a new entry: [https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities A9 - Using Components with Known Vulnerabilities]. Dependency-check can currently be used to scan Java applications (and their dependent libraries) to identify any known vulnerable components.&lt;br /&gt;
&lt;br /&gt;
The problem with using known vulnerable components was described very well in a paper by Jeff Williams and Arshan Dabirsiaghi titled, &amp;quot;[https://www.aspectsecurity.com/uploads/downloads/2012/03/Aspect-Security-The-Unfortunate-Reality-of-Insecure-Libraries.pdf The Unfortunate Reality of Insecure Libraries]&amp;quot;. The gist of the paper is that we as a development community include third party libraries in our applications that contain well known published vulnerabilities (such as those at the [http://web.nvd.nist.gov/view/vuln/search National Vulnerability Database]).&lt;br /&gt;
&lt;br /&gt;
OWASP SafeNuGet is an MSBuild task which will warn developers if they are using NuGet packages with known vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
More information about dependency-check can be found on the [https://github.com/owasp/SafeNuGet Github SafeNuGet site].&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_SafeNuGet}} &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Project&amp;diff=154324</id>
		<title>Category:OWASP Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Project&amp;diff=154324"/>
				<updated>2013-06-23T17:23:08Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: Adding OWASP SafeNuGet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &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;center&amp;quot; | [[Image:NEW-PROJECTS-BANNER.jpg|950px| link=https://www.owasp.org/index.php/Category:OWASP_Project]] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Welcome  =&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 100%; color: rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
{| style=&amp;quot;border: 0px solid ; background: transparent none repeat scroll 0% 0%; width: 100%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 95%; color: rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Welcome to the OWASP Global Projects Page ===&lt;br /&gt;
&lt;br /&gt;
An OWASP project is a collection of related tasks that have a defined roadmap and team members. OWASP project leaders are responsible for defining the vision, roadmap, and tasks for the project. The project leader also promotes the project and builds the team. OWASP currently has over 148 active projects, and new project applications are submitted every week.  &lt;br /&gt;
&lt;br /&gt;
This is one of the most popular divisions of OWASP as it gives members an opportunity to freely test theories and ideas with the professional advice and support of the OWASP community. Every project has an associated mail list. You can view all the lists, examine their archives, and subscribe to any project by visiting the [http://lists.owasp.org/mailman/listinfo OWASP Project Mailing Lists] page. A summary of recent project announcements is available on the [[OWASP Updates]] page. &lt;br /&gt;
&lt;br /&gt;
'''[https://www.owasp.org/images/6/6a/OWASP_Projects_Handbook_2013.pdf Download the OWASP Projects Handbook 2013]'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP Project Inventory ===&lt;br /&gt;
&lt;br /&gt;
All OWASP tools, document, and code library projects are organized into the following categories: &lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/index.php/OWASP_Project_Inventory#Incubator_Projects Incubator Projects:]''' OWASP Incubator projects represent the experimental playground where projects are still being fleshed out, ideas are still being proven, and development is still underway. &lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/index.php/OWASP_Project_Inventory#Labs_Projects Lab Projects:]''' OWASP Labs projects represent projects that have produced an OWASP reviewed deliverable of value. &lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/index.php/OWASP_Project_Inventory#Flagship_Projects Flagship Projects:]''' The OWASP Flagship designation is given to projects that have demonstrated superior maturity, established quality, and strategic value to OWASP and application security as a whole. &lt;br /&gt;
&lt;br /&gt;
=== Who Should Start an OWASP Project? ===&lt;br /&gt;
&lt;br /&gt;
*Application Developers. &lt;br /&gt;
*Software Architects. &lt;br /&gt;
* Information Security Authors.  &lt;br /&gt;
*Those who would like the support of a world wide professional community to develop or test an idea.&lt;br /&gt;
*Anyone wishing to take advantage of the professional body of knowledge OWASP has to offer.&lt;br /&gt;
&lt;br /&gt;
=== Contact Us===&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please do not hesitate to contact the [http://owasp4.owasp.org/contactus.html OWASP Projects Manager, Samantha Groves] by using the form provided here. Please allow five working days for your question or comment to be answered. This is due to the large amount of queries the foundation staff receive every day. We thank you for your patience. &lt;br /&gt;
&lt;br /&gt;
=== Social Media ===&lt;br /&gt;
&lt;br /&gt;
We recommend using the links below to find our official OWASP social media channels. These are a great way to keep in touch with the different initiatives going on at OWASP throughout the world. They are all updated regularly by chapter leaders, project leaders, the OWASP Board Members, and our OWASP Staff. If you have any questions or concerns about any of these accounts, please drop us a line using our [https://docs.google.com/a/owasp.org/spreadsheet/viewform?formkey=dGR5QXFWYThiOHZNSldCdkFIMW9kNXc6MQ &amp;quot;Contact Us&amp;quot;] form found above.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Blogger-32x32.png|32px|link=http://owasp.blogspot.co.uk/]] [[Image:Twitter-32x32.png|32px|link=https://twitter.com/OWASP]] [[Image:Facebook-32x32.png|32px|link=https://www.facebook.com/groups/172892372831444/]] [[Image:Linkedin-32x32.png|32px|link=http://www.linkedin.com/groups/Global-OWASP-Foundation-36874]] [[Image:Google-32x32.png|32px|link=https://plus.google.com/u/0/communities/105181517914716500346?cfem=1]] [[Image:Ning-32x32.png|32px|link=http://myowasp.ning.com/]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mediawiki needs all these spaces --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Twitter Box --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;border: 3px solid rgb(204, 204, 204); vertical-align: top; width: 95%; font-size: 95%; color: rgb(0, 0, 0);&amp;quot; |  &amp;lt;!-- DON'T REMOVE ME, I'M STRUCTURAL --&amp;gt;&lt;br /&gt;
&amp;lt;!-- There be dragons here --&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:Projects_Front_Page_Graphic3.jpg|center|300px| link=https://www.owasp.org/index.php/OWASP_Mobile_Security_Project]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:AppSec USA.jpg|center|300px| link=http://www.appsecusa.org/]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Projects_Banner_3.jpg|center|300px| link=http://owasp.force.com/volunteers/GW_Volunteers__VolunteersJobListing]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Projects_Front_Page_Donation.jpg|center|300px| link=http://www.regonline.com/Register/Checkin.aspx?EventID=1044369]]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 110px; font-size: 95%; color: rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 110px; font-size: 95%; color: rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- End Banner --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Starting a New Project  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
== So you want to start a project... ==&lt;br /&gt;
&lt;br /&gt;
Starting an OWASP Project is easy.  You don't have to be an application security expert.  You just have to have the drive and desire to make a contribution to the application security community.&lt;br /&gt;
&lt;br /&gt;
Here are some of the guidelines for running a successful OWASP project:&lt;br /&gt;
&lt;br /&gt;
* The best OWASP projects are strategic - they make it easier to produce secure applications by filling a gap in the application security knowledge-base or technology support.&lt;br /&gt;
&lt;br /&gt;
* You ''can'' run a single person project, but it's usually best to get the community involved.  You should be prepared to support a mailing list, build a team, speak at conferences, and promote your project.&lt;br /&gt;
&lt;br /&gt;
* You can contribute existing documents or tools to OWASP! Assuming you have the intellectual property rights to a work, you can open it to the world as an OWASP Project.  Please coordinate this with OWASP by contacting owasp(at)owasp.org.&lt;br /&gt;
&lt;br /&gt;
* Available Grants to consider if you need funding - [https://www.owasp.org/index.php/Grants Click Here]&lt;br /&gt;
&lt;br /&gt;
* You should promote your project through the OWASP channels as well as by outside means.  Get people to blog about it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a new project ==&lt;br /&gt;
&lt;br /&gt;
[http://sl.owasp.org/new-project Here's the simple process for starting a new OWASP Project].&lt;br /&gt;
* Check out the '''[[Guidelines for OWASP Projects]]'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Get the following information together:&lt;br /&gt;
&lt;br /&gt;
A - PROJECT&lt;br /&gt;
# Project Name,&lt;br /&gt;
# Project purpose / overview,&lt;br /&gt;
# Project Roadmap,&lt;br /&gt;
# Project links (if any) to external sites,&lt;br /&gt;
# [http://www.owasp.org/index.php/Guidelines_for_OWASP_Projects#Project_Licensing Project License],&lt;br /&gt;
# Project Leader name,&lt;br /&gt;
# Project Leader email address,&lt;br /&gt;
# Project Leader wiki account - the username (you'll need this to edit the wiki),&lt;br /&gt;
# Project Contributor(s) (if any) - name email and wiki account (if any),&lt;br /&gt;
# Project Main Links (if any).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OWASP	Recommended Licenses==&lt;br /&gt;
&lt;br /&gt;
{{Recommended_Licenses}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Funding your Project==&lt;br /&gt;
An OWASP project does not receive any funding for development at project inception; however, a new project does have the opportunity to submit an application to receive funds if they are available for the year. Additionally, project leaders have the option of seeking sponsorship from outside organisations, but project leaders are required to seek funding through their own initiative. &lt;br /&gt;
&lt;br /&gt;
== Project Release ==&lt;br /&gt;
&lt;br /&gt;
*As your project reaches a point that you'd like OWASP to assist in its promotion, the [[Global Projects Committee|OWASP Global Projects Committee]]  will need the following to help spread the word about your project:&lt;br /&gt;
&lt;br /&gt;
# [http://globalprojectscommittee.wordpress.com/2009/07/27/what-is-the-3x-slide-presentation-thing/ Conference style presentation that describes the tool/document in at least 3 slides],&lt;br /&gt;
# [http://globalprojectscommittee.wordpress.com/2009/07/21/what-is-this-project-flyerpamphlet-thing/ Project Flyer/Pamphlet (PDF file)],&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* If possible, get also the following information together:&lt;br /&gt;
&lt;br /&gt;
B – FIRST RELEASE&lt;br /&gt;
# Release Name,&lt;br /&gt;
# Release Description,&lt;br /&gt;
# Release Downloadable file link &lt;br /&gt;
# Release Leader,&lt;br /&gt;
# Release Contributor(s),&lt;br /&gt;
# Release Reviewer,&lt;br /&gt;
# Release Sponsor(s) (if any),&lt;br /&gt;
# Release Notes&lt;br /&gt;
# Release Main Links (if any),&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Project Process Forms==&lt;br /&gt;
These forms were created to help project leaders, and those interested in a going through a process in the OWASP projects infrastructure. They facilitate the management of each query based on the specific task an applicant will need help with. The forms are described below, and they are linked with their designated online application form. &lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264422 Project Transition Application]:The OWASP project transition form gives current project leaders an easy way of handing over project administration information to individuals wishing to take over a project.  &lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264413 Project Review Application]:This form is for current project leaders to request a review of their project based on OWASP graduation criteria. The aim is to designate an OWASP volunteer to review these projects within 3 months time. &lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264418 Project Donation Application]:This form is for projects outside of the OWASP project infrastructure. Project Leaders for these open source projects can choose to partner or give their project to OWASP directly through this form.&lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264428 Project Adoption Request]:This form is used when someone is interested in adopting an archived project. &lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264426 Project Abandonment Request]:The OWASP project abandonment form gives current project leaders an easy way of letting the OWASP Foundation know that they wish to resign their project leader duties. This form should be used when no replacement project leader exists to take over these duties.&lt;br /&gt;
&lt;br /&gt;
* [http://www.tfaforms.com/264392 Incubator Project Graduation Application]:This application form is for Incubator Projects to apply for Labs Project status. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Assessments  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
==OWASP Project Lifecycle==&lt;br /&gt;
The OWASP Projects Lifecycle represents a balance between keeping a very loose structure around OWASP projects, and ensuring that OWASP consumers are not confused about a project’s maturity and quality. The lifecycle stage allows consumers to easily identify mature projects, and projects that are proofs of concept, experimental, and classified as prototypes in their current state. The greater the maturity of the project, the greater the level of responsibility for the project leader. These responsibilities are not trivial as OWASP provides incentives and benefits (Section 7) for projects who take on these added responsibilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OWASP Project Lifecycle is broken down into the following stages:'''&lt;br /&gt;
&lt;br /&gt;
'''Incubator Projects:''' OWASP Incubator projects represent the experimental playground where projects are still being designed, ideas are still being proven, and development is still underway.  The “OWASP Incubator” label allows OWASP consumers to readily identify a project’s maturity; moreover, the label allows project leaders to leverage the OWASP name while their project is still maturing. OWASP Incubator projects are given a place on the OWASP Projects Portal to leverage the organizations' infrastructure, and establish their presence and project history.&lt;br /&gt;
&lt;br /&gt;
'''Labs Projects:''' OWASP Labs projects represent projects that have produced a deliverable of significant value. Leaders of OWASP Labs projects are expected to stand behind the quality of their projects as these projects have matured to the point where they are accepted by a significant portion of the OWASP community. While these projects are typically not production ready, the OWASP community expects that an OWASP Labs project leader is producing releases that are ready for mainstream usage. OWASP Labs Projects are meant to be the collection of established projects that have gained community support and acclaim by undergoing the project review process. &lt;br /&gt;
&lt;br /&gt;
'''Flagship Projects:''' The OWASP Flagship designation is given to projects that have demonstrated superior maturity, established quality, and strategic value to OWASP and application security as a whole. Eligible projects are selected from the OWASP Labs project pool. This selection process generally ensures that there is only one project of each type covering any particular security space. OWASP Flagship projects represent projects that are not only mature, but are also projects that OWASP as an organization provides direct support to maintaining. The core mission of OWASP is to make application security visible and so as an organization, OWASP has a vested interest in the success of its Flagship projects. Since Flagship projects have such high visibility, these projects are expected to uphold the most stringent requirements of all OWASP Projects.&lt;br /&gt;
&lt;br /&gt;
== OWASP Project Stage Benefits==&lt;br /&gt;
This section outlines the benefits of starting an OWASP project, and the benefits of being at each different stage in the projects lifecycle. In my short time here at OWASP as the PM, I have had several potential project leaders ask me what the benefits are of starting their project with OWASP. Below is my proposal for each Stage’s benefits.&lt;br /&gt;
&lt;br /&gt;
'''Incubator'''&lt;br /&gt;
* Financial Donation Management Assistance &lt;br /&gt;
* Project Review Support&lt;br /&gt;
* WASPY Awards Nominations&lt;br /&gt;
* OWASP OSS and OPT Participation&lt;br /&gt;
* Opportunity to submit proposal: $500 for Development.&lt;br /&gt;
* Community Engagement and Support&lt;br /&gt;
* Recognition and visibility of being associated with the OWASP Brand.&lt;br /&gt;
&lt;br /&gt;
'''Labs'''&lt;br /&gt;
* All benefits given to Incubator Projects &lt;br /&gt;
* Technical Writing Support&lt;br /&gt;
* Graphic Design Support&lt;br /&gt;
* Project Promotion Support&lt;br /&gt;
* OWASP OSS and OPT: Preference&lt;br /&gt;
&lt;br /&gt;
'''Flagship'''&lt;br /&gt;
* All benefits given to Incubator &amp;amp; Labs Projects&lt;br /&gt;
* Grant finding and proposal writing help&lt;br /&gt;
* Yearly marketing plan development&lt;br /&gt;
* OWASP OSS and OPT participation preference&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more detailed information on OWASP Project Stage Benefits, please see the 2013 Project Handbook. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OWASP Project Graduation==&lt;br /&gt;
The Project Graduation Process is an optional process undertaken at the request of a project leader using the Incubator Graduation Form. The purpose of this process is to move a project from the OWASP Incubator into the OWASP Labs. In order to be considered for OWASP Labs, an Incubator project must have submitted an OWASP reviewed deliverable, and obtained at least two (2) positive responses for each of the core criteria project health questions.&lt;br /&gt;
&lt;br /&gt;
The review centers around the following core questions. Each core question has three (3) specific questions made up of binary queries. A project must receive at least two (2) positive responses from each reviewer in two of the binary questions, to warrant a postive response for the core question. Each core question must receive a positive response from both project reviewers to pass the Project Health Assessment for Incubator Projects. &lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheet/ccc?key=0AllOCxlYdf1AdG5NZGhzTjZpT1RDcnRibjd0aXhfOUE Project Graduation Criteria Checklist]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OWASP Project Health Assessment==&lt;br /&gt;
The Project Health Assessment is an optional process undertaken at the request of a project leader when he/she applies for Project Graduation The purpose of this assessment is to determine whether a project meets the minimum criteria of an OWASP Project outlined in the [https://docs.google.com/spreadsheet/ccc?key=0AllOCxlYdf1AdG5NZGhzTjZpT1RDcnRibjd0aXhfOUE Project Health Assessment Criteria Document]. If a project passes the assessment, it then becomes eligible to graduate into the OWASP Labs Project stage. In order to be considered for OWASP Labs, an Incubator project must have submitted an OWASP reviewed deliverable, and obtained at least two (2) positive responses for each of the core criteria project health questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OWASP Project Deliverable/Release Assessment==&lt;br /&gt;
The Project Deliverable/Release Review is an optional process undertaken at the request of a project leader using the Project Deliverable Review Form. The purpose of this process is to  review a project’s progress, and to make sure the project is heading in the right direction based on the roadmap they provided at project inception. &lt;br /&gt;
&lt;br /&gt;
Reviews must be performed by two (2) OWASP Chapter or Project Leaders, and their review must answer affirmatively to at least the first two (2) core Project Deliverable/Release Review questions. A project must pass the OWASP Project Deliverable/Release Assessment in order to graduate into the OWASP Labs Project stage. &lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheet/ccc?key=0AllOCxlYdf1AdG5NZGhzTjZpT1RDcnRibjd0aXhfOUE Project Deliverable/Release Assessment Criteria Checklist]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Inventory  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flagship Projects==&lt;br /&gt;
&lt;br /&gt;
The OWASP Flagship designation is given to projects that have demonstrated superior maturity, established quality, and strategic value to OWASP and application security as a whole. OWASP Flagship projects represent projects that are not only mature, but are also projects that OWASP as an organization provides direct support to maintaining. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Code'''&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project OWASP AntiSamy Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API OWASP Enterprise Security API]&lt;br /&gt;
* [https://www.owasp.org/index.php/Projects/OWASP_ModSecurity_Core_Rule_Set_Project OWASP ModSecurity Core Rule Set Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project OWASP CSRFGuard Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* [https://www.owasp.org/index.php?title=OWASP_Web_Testing_Environment_Project OWASP Web Testing Environment Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Webgoat OWASP WebGoat Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project OWASP Zed Attack Proxy]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project OWASP Application Security Verification Standard Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Code_Review_Project OWASP Code Review Guide Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Codes_of_Conduct OWASP Codes of Conduct]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Guide_Project OWASP Development Guide Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Secure_Coding_Practices_-_Quick_Reference_Guide OWASP Secure Coding Practices - Quick Reference Guide]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:Software_Assurance_Maturity_Model OWASP Software Assurance Maturity Model (SAMM)]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Testing_Project OWASP Testing Guide Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project OWASP Top Ten Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Labs Projects==&lt;br /&gt;
&lt;br /&gt;
OWASP Labs projects represent projects that have produced a deliverable of value. While these projects are typically not production ready, the OWASP community expects that an OWASP Labs project leader is producing releases that are at least ready for mainstream usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools''' &lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project OWASP Broken Web Applications Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CSRFTester_Project OWASP CSRFTester Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_EnDe OWASP EnDe Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Fiddler_Addons_for_Security_Testing_Project OWASP Fiddler Addons for Security Testing Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Forward_Exploit_Tool_Project OWASP Forward Exploit Tool Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Hackademic_Challenges_Project OWASP Hackademic Challenges Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Hatkit_Datafiddler_Project OWASP Hatkit Datafiddler Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Hatkit_Proxy_Project OWASP Hatkit Proxy Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_HTTP_Post_Tool OWASP HTTP POST Tool]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Java_XML_Templates_Project OWASP Java XML Templates Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_JavaScript_Sandboxes OWASP JavaScript Sandboxes Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Joomla_Vulnerability_Scanner_Project OWASP Joomla Vulnerability Scanner Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_LAPSE_Project OWASP LAPSE Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Mantra_-_Security_Framework OWASP Mantra Security Framework]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Mutillidae OWASP Mutillidae Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_O2_Platform OWASP O2 Platform]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Orizon_Project OWASP Orizon Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Scrubbr OWASP Scrubbr]&lt;br /&gt;
* [http://owasp.com/index.php/Category:OWASP_Security_Assurance_Testing_of_Virtual_Worlds_Project OWASP Security Assurance Testing of Virtual Worlds Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Project_Information:template_Vicnum_Project OWASP Vicnum Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Wapiti_Project OWASP Wapiti Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Web_Browser_Testing_System_Project OWASP Web Browser Testing System Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Webscarab OWASP WebScarab Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Project_Information:template_Webslayer_Project OWASP Webslayer Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Project_Information:template_WSFuzzer_Project OWASP WSFuzzer Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Project_Information:template_Yasca_Project OWASP Yasca Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Appsec_Tutorial_Series OWASP AppSec Tutorial Series]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_AppSensor_Project OWASP AppSensor Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Cloud_‐_10_Project OWASP Cloud ‐ 10 Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CTF_Project OWASP CTF Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Fuzzing_Code_Database OWASP Fuzzing Code Database]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Legal_Project OWASP Legal Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Podcast OWASP Podcast Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Virtual_Patching_Best_Practices Virtual Patching Best Practices]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sammysam&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Incubator Projects==&lt;br /&gt;
&lt;br /&gt;
OWASP Incubator projects represent the experimental playground where projects are still being fleshed out, ideas are still being proven, and development is still underway.  The “OWASP Incubator” label allows OWASP consumers to readily identify a project’s maturity. The label also allows project leaders to leverage the OWASP name while their project is still maturing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Code'''&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Secure_the_Flag_Competition_Project OWASP Secure the Flag Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Opa OWASP OPA]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Alchemist_Project OWASP Alchemist Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_ESOP_Framework OWASP ESOP Framework]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Java_Encoder_Project OWASP Java Encoder Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Passfault OWASP Passfault]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_OctoMS OWASP OctoMS]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Java_Uncertain_Form_Submit_Prevention OWASP Java Uncertain Form Submit Prevention]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Ecuador OWASP Ecuador]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_AW00T OWASP AW00t]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_ONYX OWASP ONYX]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_JSON_Sanitizer OWASP JSON Sanitizer]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Security_Research_and_Development_Framework OWASP Security Research and Development Framework]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_1-Liner OWASP 1-Liner]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Focus OWASP Focus]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_PHPRBAC_Project OWASP PHPRBAC Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_EJSF_Project OWASP EJSF Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Barbarus OWASP Barbarus]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_iMAS_iOS_Mobile_Application_Security_Project OWASP iMAS - iOS Mobile Application Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_RBAC_Project OWASP RBAC Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_PHP_Security_Project OWASP PHP Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Simple_Host_Base_Incidence_Detection_System_Project OWASP Simple Host Base Incidence Detection System Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_WhatTheFuzz_Project#tab=Project_About OWASP WhatTheFuzz Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Security_Tools_for_Developers_Project OWASP Security Tools for Developers Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_SIMBA_Project OWASP SIMBA Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_VFW_Project OWASP VFW Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_OVAL_Content_Project OWASP OVAL Content Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_WAF_Project OWASP WAF Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_NAXSI_Project OWASP NAXSI Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Passw3rd_Project OWASP Passw3rd Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_File_Hash_Repository OWASP File Hash Repository]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_WebGoat.NET OWASP WebGoat.NET]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_AJAX_Crawling_Tool OWASP AJAX Crawling Tool]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_OWTF OWASP OWTF]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Path_Traverser OWASP Path Traverser]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Watiqay OWASP Watiqay]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Security_Shepherd OWASP Security Shepherd]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Xenotix_XSS_Exploit_Framework OWASP Xenotix XSS Exploit Framework]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Mantra_OS OWASP Mantra OS]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_XSSER OWASP XSSER]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Academy_Portal_Project OWASP Academy Portal Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_ASIDE_Project OWASP ASIDE Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Browser_Security_ACID_Tests_Project OWASP Browser Security ACID Test Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_iGoat_Project OWASP iGoat Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Java_HTML_Sanitizer OWASP Java HTML Sanitizer Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Proxy OWASP Proxy Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_SamuraiWTF_Project OWASP SamuraiWTF]&lt;br /&gt;
* [https://www.owasp.org/index.php/O-Saft O-Saft]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Crowdtesting OWASP Crowdtesting]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_OpenStack_Security_Project OWASP OpenStack Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Desktop_Goat_and_Top_5_Project OWASP Desktop Goat and Top 5 Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Bricks OWASP Bricks]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Dependency_Check OWASP Dependency Check]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_SafeNuGet OWASP SafeNuGet]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Hive_Project OWASP Hive Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Droid_Fusion OWASP Droid Fusion]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_iSABEL_Proxy_Server OWASP iSABEL Proxy Server]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Rails_Goat_Project OWASP Rails Goat Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Bywaf_Project OWASP Bywaf Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_S.T.I.N.G_Project OWASP S.T.I.N.G Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Application_Fuzzing_Framework_Project OWASP Application Fuzzing Framework Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_VaultDB_Project OWASP VaultDB Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_WS_Amplification_DoS_Project OWASP WS-Amplification DoS Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Mutillidae_2_Project OWASP Mutillidae 2 Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Skanda_SSRF_Exploitation_Framework OWASP Skanda - SSRF Exploitation Framework]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_SeraphimDroid_Project OWASP SeraphimDroid Project]&lt;br /&gt;
&lt;br /&gt;
'''Documentation'''&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Data_Exchange_Format_Project OWASP Data Exchange Format Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Cheat_Sheets OWASP Cheat Sheets Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Proactive_Controls OWASP Proactive Controls]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Java_J2EE_Secure_Development_Curriculum OWASP Java/J2EE Secure Development Curriculum]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Crossword_of_the_Month OWASP Crossword of the Month]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Secure_Password_Project OWASP Secure Password Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Security_Baseline_Project OWASP Security Baseline Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Software_Security_Assurance_Process OWASP Software Security Assurance Process]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Threat_Modelling_Project OWASP Threat Modeling Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Web_Application_Security_Accessibility_Project#tab=Project_About OWASP Web Application Security Accessibility Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Application_Security_Requirements_Project OWASP Application Security Requirements Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Common_Numbering_Project OWASP Common Numbering Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Favicon_Database_Project OWASP Favicon Database Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Application_Security_Assessment_Standards_Project OWASP Application Security Assessment Standards Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Application_Security_Program_for_Managers OWASP Application Security Program for Managers]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Application_Security_Skills_Assessment OWASP Application Security Skills Assessment]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Browser_Security_Project OWASP Browser Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CBT_Project OWASP Computer Based Training Project (OWASP CBT Project)]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Enterprise_Application_Security_Project OWASP Enterprise Application Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Exams_Project OWASP Exams Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Projects/OWASP_GoatDroid_Project OWASP GoatDroid Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Myth_Breakers_Project OWASP Myth Breakers Project]&lt;br /&gt;
* [http://owasp.com/index.php/OWASP_Project_Partnership_Model OWASP Project Partnership Model]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_RFP-Criteria OWASP Request For Proposal]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_University_Challenge OWASP University Challenge]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Hacking_Lab OWASP Hacking-Lab]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Application_Security_Awareness_Top_10_E-learning_Project OWASP Application Security Awareness Top 10 E-learning Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Periodic_Table_of_Vulnerabilities OWASP Periodic Table of Vulnerabilities]&lt;br /&gt;
* [https://www.owasp.org/index.php/WASC_OWASP_Web_Application_Firewall_Evaluation_Criteria_Project WASC/OWASP Web Application Firewall Evaluation Criteria (WAFEC)]&lt;br /&gt;
* [https://www.owasp.org/index.php/ESAPI_Swingset OWASP ESAPI Swingset Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Press OWASP Press]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_CISO_Survey OWASP CISO Survey]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Application_Security_Guide_For_CISOs_Project OWASP Application Security Guide For CISOs]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Embedded_Application_Security OWASP Embedded Application Security]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Scada_Security_Project OWASP Scada Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Cornucopia OWASP Cornucopia]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Secure_Application_Design_Project OWASP Secure Application Design Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Top_10_Fuer_Entwickler_Project OWASP Top 10 Fuer Entwickler Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Good_Component_Practices_Project OWASP Good Component Practices Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Web_Application_Security_Quick_Reference_Guide_Project OWASP Web Application Security Quick Reference Guide Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Security_JDIs_Project OWASP Security JDIs Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Windows_Binary_Executable_Files_Security_Checks_Project OWASP Windows Binary Executable Files Security Checks Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Wordpress_Security_Checklist_Project OWASP Wordpress Security Checklist Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Supporting_Legacy_Web_Applications_in_the_Current_Environment_Project OWASP Supporting Legacy Web Applications in the Current Environment Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Inactive Projects==&lt;br /&gt;
&lt;br /&gt;
'''Archived Projects''' &lt;br /&gt;
&lt;br /&gt;
OWASP Archived Projects are inactive Labs projects. If you are interested in pursuing any of the projects below, please contact us and let us know of your interest.  &lt;br /&gt;
&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Access_Control_Rules_Tester_Project OWASP Access Control Rules Tester Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Application_Security_Metrics_Project OWASP Application Security Metrics Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_AppSec_FAQ_Project OWASP AppSec FAQ Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Asdr OWASP ASDR Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Backend_Security_Project OWASP Backend Security Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Best_Practices:_Use_of_Web_Application_Firewalls OWASP Best Practices: Use of Web Application Firewalls]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CAL9000_Project OWASP CAL9000 Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_CLASP_Project OWASP CLASP Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Code_Crawler OWASP CodeCrawler Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Content_Validation_using_Java_Annotations_Project OWASP Content Validation using Java Annotations Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project OWASP DirBuster Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Encoding_Project OWASP Encoding Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Google_Hacking_Project OWASP Google Hacking Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Insecure_Web_App_Project OWASP Insecure Web App Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Interceptor_Project OWASP Interceptor Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_JSP_Testing_Tool_Project OWASP JSP Testing Tool Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_LiveCD_Education_Project OWASP LiveCD Education Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Logging_Project OWASP Logging Guide]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_NetBouncer_Project OWASP NetBouncer Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_OpenPGP_Extensions_for_HTTP_-_Enigform_and_mod_openpgp OWASP OpenPGP Extensions for HTTP - Enigform and mod_openpgp Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_OpenSign_Server_Project OWASP OpenSign Server Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Pantera_Web_Assessment_Studio_Project OWASP Pantera Web Assessment Studio Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_PHP_Project OWASP PHP Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/ORG_%28OWASP_Report_Generator%29 OWASP Report Generator]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Ruby_on_Rails_Security_Guide_V2 OWASP Ruby on Rails Security Guide V2]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_SASAP_Project OWASP Scholastic Application Security Assessment Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project OWASP Security Analysis of Core J2EE Design Patterns Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Security_Spending_Benchmarks OWASP Security Spending Benchmarks Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_SiteGenerator OWASP Site Generator Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Skavenger_Project OWASP Skavenger Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Source_Code_Flaws_Top_10_Project OWASP Source Code Flaws Top 10 Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Sprajax_Project OWASP Sprajax Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Sqlibench_Project OWASP Sqlibench Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_SQLiX_Project OWASP sqliX Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Stinger_Project OWASP Stinger Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Teachable_Static_Analysis_Workbench_Project OWASP Teachable Static Analysis Workbench Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Tiger OWASP Tiger]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_Tools_Project OWASP Tools Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/Projects/OWASP_Uniform_Reporting_Guidelines OWASP Uniform Reporting Guidelines]&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_WeBekci_Project OWASP Webekci Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/JBroFuzz JBroFuzz]&lt;br /&gt;
* [https://owasp.org/index.php/Category:OWASP_SWAAT_Project OWASP SWAAT Project]&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Secure_Web_Application_Framework_Manifesto OWASP Secure Web Application Framework Manifesto]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Marketing Materials  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Philosophy==&lt;br /&gt;
&lt;br /&gt;
OWASP stands for informed security decisions based on a solid, comprehensive understanding of the business risk associated with an application. OWASP's philosophy is that achieving security involves all parts of an organization, including people, process, and technology. We support the use of our brand consistent with this philosophy. However, we cannot allow the use of our brand when it implies something inconsistent with OWASP's comprehensive and balanced approach to application security. Therefore, we have defined these brand usage rules to clarify appropriate and inappropriate uses of the OWASP brand, including our name, domain, logos, project names, and other trademarks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brand Usage Rules==&lt;br /&gt;
&lt;br /&gt;
The following rules make reference to all OWASP marketing and graphic materials. This refers to any tools, documentation, or other content from OWASP. The rules also make reference to &amp;quot;OWASP Published Standards&amp;quot; which are currently in the process of being developed and released. Currently there are no OWASP Published Standards.&lt;br /&gt;
&lt;br /&gt;
# The OWASP Brand may be used to direct people to the OWASP website for information about application security.&lt;br /&gt;
# The OWASP Brand may be used in commentary about the materials found on the OWASP website.&lt;br /&gt;
# The OWASP Brand may be used by OWASP Members in good standing to promote a person or company's involvement in OWASP.&lt;br /&gt;
# The OWASP Brand may be used in association with an application security assessment only if a complete and detailed methodology, sufficient to reproduce the results, is disclosed.&lt;br /&gt;
# The OWASP Brand must not be used in a manner that suggests that The OWASP Foundation supports, advocates, or recommends any particular product or technology.&lt;br /&gt;
# The OWASP Brand must not be used in a manner that suggests that a product or technology is compliant with any OWASP Materials other than an OWASP Published Standard.&lt;br /&gt;
# The OWASP Brand must not be used in a manner that suggests that a product or technology can enable compliance with any OWASP Materials other than an OWASP Published Standard.&lt;br /&gt;
# The OWASP Brand must not be used in any materials that could mislead readers by narrowly interpreting a broad application security category. For example, a vendor product that can find or protect against forced browsing must not claim that they address all of the access control category.&lt;br /&gt;
# The OWASP Brand may be used by special arrangement with The OWASP Foundation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Social Media==&lt;br /&gt;
[[Image:Blogger-32x32.png|32px|link=http://owasp.blogspot.co.uk/]] [[Image:Twitter-32x32.png|32px|link=https://twitter.com/OWASP]] [[Image:Facebook-32x32.png|32px|link=https://www.facebook.com/groups/172892372831444/]] [[Image:Linkedin-32x32.png|32px|link=http://www.linkedin.com/groups/Global-OWASP-Foundation-36874]] [[Image:Google-32x32.png|32px|link=https://plus.google.com/u/0/communities/105181517914716500346?cfem=1]] [[Image:Ning-32x32.png|32px|link=http://myowasp.ning.com/]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* '''[https://www.owasp.org/images/0/07/OWASP_Image_Toolbox.zip OWASP Logo Toolbox]:''' This includes all of OWASP's logo image files in various formats.&lt;br /&gt;
* '''[https://www.owasp.org/images/2/2a/OWASP_BUSINESS_CARD_TEMPLATES.zip OWASP Business Card Templates]:''' This includes the front and back PSD files for the OWASP Business Card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Merchandise Requests'''&lt;br /&gt;
&lt;br /&gt;
*Submit your application using the '''[https://spreadsheets.google.com/a/owasp.org/spreadsheet/viewform?formkey=dF85bGtvdWdrd2JjYldNZ1gxSkJxaEE6MQ OWASP Merchandise Request Form]'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ads/Flyers'''&lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/images/4/49/OWASP_Brochure_-_Global.pdf OWASP Flyer]'''&lt;br /&gt;
* '''[https://www.owasp.org/images/a/ac/OWASP-AD-V3-FINAL.pdf OWASP 2012 Standard Print Ad]'''&lt;br /&gt;
* '''[https://www.owasp.org/images/2/2d/OWASP-AD-V3-FINAL-A4.pdf OWASP 2012 A4 Print Ready Ad]'''&lt;br /&gt;
* '''[https://www.owasp.org/images/1/1f/OWASP-AD-V3-FINAL-A42.pdf OWASP 2012 A4-2 Print Ready Ad]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Banners'''&lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/index.php/OWASP_Merchandise#Banners Banner Examples]'''&lt;br /&gt;
* '''[http://dl.dropbox.com/u/38979962/owasp_gear_335x83_300dpi.pdf Cog wheel banner]'''&lt;br /&gt;
* '''[http://dl.dropbox.com/u/38979962/OWASP_Banner_300dpi.pdf/OWASP_Banner_300dpi.pdf Honeycomb banner]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Presentations'''&lt;br /&gt;
&lt;br /&gt;
These slides are presented at Global AppSec Conferences by the Global Board to provide a high level overview of OWASP and to highlight some of the key initiatives at a Global level. This can be presented in its current form at OWASP Chapter meetings to enable a clarification of the mission and purpose of the local chapter. This can also be used or sent to the press/media when looking for an &amp;quot;overview of owasp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* '''[https://www.owasp.org/images/3/35/2012Whereweare..Wherearewegoing.pdf 2012 Athens Where we are, Where we are going..]'''&lt;br /&gt;
* '''[https://www.owasp.org/images/8/83/FINAL-OWASP_Global_Board_Update_AppSecUS11.ppt.pdf 2011 Where we are, Where we are going..]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Security Podcast with Jim Manico==&lt;br /&gt;
{| style=&amp;quot;background-color: transparent&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;1000&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[Image:Jim_Projects.jpg|100px]]&lt;br /&gt;
| align=&amp;quot;justify&amp;quot; | The OWASP foundation presents the OWASP PODCAST SERIES hosted and produced by [mailto:jim@owasp.org Jim Manico]. Listen as interviews are conducted with OWASP volunteers, industry experts and leaders within the field of software security. Visit the [https://www.owasp.org/index.php/OWASP_Podcast Podcast Page] for more information. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OWASP Appsec Tutorial Series with Jerry Hoff==&lt;br /&gt;
{| style=&amp;quot;background-color: transparent&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;1000&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[Image:Jerry_Projects.jpg|100px]]&lt;br /&gt;
| align=&amp;quot;justify&amp;quot; |The OWASP AppSec Tutorial Series project provides a video based means of conveying complex application security concepts in an easily accessible and understandable way. Each video is approximately 5-10 minutes long and highlights one or more specific application security concepts, tools, or methodologies. The goal of the project is quite simple and yet quite audacious - provide top notch application security video based training... for free! Visit the [https://www.owasp.org/index.php/OWASP_Appsec_Tutorial_Series#Project_Lead Tutorial Series Page] for more information. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OWASP Press==&lt;br /&gt;
&lt;br /&gt;
The OWASP press is a pattern for massive community collaboration on OWASP documentation projects with just-in-time publication. Visit the [https://www.owasp.org/index.php/OWASP_Press OWASP Press Page] for more information. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Terminology =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
== OWASP Project Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''OWASP Project Lifecycle:''' The OWASP Projects Lifecycle represents a balance between keeping a very loose structure around OWASP projects, and ensuring that OWASP consumers are not confused about a project’s maturity and quality. The lifecycle stage allows consumers to easily identify mature projects, and projects that are proofs of concept, experimental, and classified as prototypes in their current state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Incubator Project:''' OWASP Incubator projects represent the experimental playground where projects are still being fleshed out, ideas are still being proven, and development is still underway. The “OWASP Incubator” label allows OWASP consumers to readily identify a project’s maturity. The label also allows project leaders to leverage the OWASP name while their project is still maturing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Labs Project:''' OWASP Labs projects represent projects that have produced a deliverable of value. While these projects are typically not production ready, the OWASP community expects that an OWASP Labs project leader is producing releases that are at least ready for mainstream usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Flagship Project:''' The OWASP Flagship designation is given to projects that have demonstrated superior maturity, established quality, and strategic value to OWASP and application security as a whole. OWASP Flagship projects represent projects that are not only mature, but are also projects that OWASP as an organization provides direct support to maintaining.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Benefits:''' The standard list of resources and incentives made available to project leaders based on their project's current maturity level. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OWASP Project Reviews ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Reviews:''' Project reviews are the method OWASP uses to establish a minimal baseline of project characteristics and release quality. Reviews are not mandatory, but they are necessary if a project leader wishes to graduate to the next level of maturity within the OWASP Global Projects infrastructure. Projects can be reviewed when an Incubator project wishes to graduate into the OWASP Labs designation, and project releases can be reviewed if they want the quality of their deliverable to be vouched for by OWASP. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Reviewer Pool:''' The project reviewer pool is made up of veteran reviewers who have proven themselves dedicated to executing quality reviews of projects. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Graduation:''' The Project Graduation Process is an optional process undertaken at the request of a project leader using the Incubator Graduation Form. The purpose of this process is to move a project from the OWASP Incubator into the OWASP Labs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Health Assessment:''' The Project Health Assessment is an optional process undertaken at the request of a project leader when he/she applies for Project Graduation The purpose of this assessment is to determine whether a project meets the minimum criteria of an OWASP Project outlined in the [https://docs.google.com/a/owasp.org/spreadsheet/ccc?key=0AllOCxlYdf1AdG5NZGhzTjZpT1RDcnRibjd0aXhfOUE#gid=1 Project Health Assessment Criteria Document].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Release:''' A project release refers to the final deliverable a project produces. It is the final product of the project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Deliverable/Release Review:''' The Project Deliverable/Release Review is an optional process undertaken at the request of a project leader using the Project Deliverable Review Form. The purpose of this process is to review a project’s progress, and to make sure the project is heading in the right direction based on the roadmap they provided at project inception.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OWASP Projects Processes == &lt;br /&gt;
&lt;br /&gt;
*'''Project Processes:''' The set of streamlined processes that exist to help projects move smoothly through the OWASP Project Lifecycle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Inception Process:''' The Project Inception Process is how a brand new idea becomes an OWASP Project. Such projects are labeled as OWASP Incubator projects. The process involves submitting the proposed project name, project leader information, project description, project roadmap, and selecting an appropriate open-source license for the project using the New Project Form on the Projects Portal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Donation Process:''' The Project Donation Process is used for a project that has an existing functional release, but is not currently associated with OWASP. This process is the primary mechanism by which individuals or organizations can transfer the ownership of their project’s copyright to OWASP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Transition Process:''' The Project Transition Process is used to transition leadership of a project to a new project leader. This is a simple automated process to transfer the relevant accounts, mailing lists, and other project resources to the new project leader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Project Abandonment Process:''' The Project Abandonment Process was put in place for those occasions in which a project leader is no longer able to manage their project, and has not been able to find a suitable replacement for the leader role. Project Abandonment can also occur when the project leader feels his/her project has become obsolete. Under these circumstances, the acting project leader is encourage do submit the Project Abandonment Form found in the Projects Portal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Incubator Graduation Process:''' The Incubator Graduation Process is an optional process undertaken at the request of a project leader using the Incubator Graduation Form. The purpose of this process is to move a project from the OWASP Incubator into the OWASP Labs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects at Conferences == &lt;br /&gt;
&lt;br /&gt;
*'''AppSec Conferences:''' OWASP AppSec conferences bring together industry, government, security researchers, and practitioners to discuss the state of the art in application security. This series was launched in the United States in 2004 and Europe in 2005. Global AppSec conferences are held annually in North America, Latin America, Europe, and Asia Pacific.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Open Source Showcase:''' The Open Source Showcase is an OWASP AppSec Conference event module designed to give Open Source project leaders the opportunity to demo their projects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''OWASP Project Track:''' The OWASP Project Track is an OWASP AppSec Conference event module designed to give OWASP Project leaders the opportunity to showcase their projects as an official conference presenter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OWASP Projects General ==  &lt;br /&gt;
&lt;br /&gt;
*'''OWASP Code of Ethics:''' The OWASP Code of Ethics are the set of guidelines and principles that the OWASP Foundation expects all of its members and conference attendees to abide by. A copy of the Code of Ethics can be found here in the [https://www.owasp.org/index.php/About_The_Open_Web_Application_Security_Project#Code_of_Ethics OWASP About page]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sponsorships and Donations  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Donate to OWASP Projects Division==&lt;br /&gt;
OWASP Projects, a global division of the OWASP Foundation, is run under the same world wide not-for-profit charitable status as all the foundation strategic groups. OWASP provides a platform for contributors to share their work while providing them with the project and community support they need throughout their project development. All OWASP Projects are run by volunteers and they rely on personal donations and sponsorship to continue their development. Donate to OWASP Projects, and we promise to spend your money wisely on open source initiatives.&lt;br /&gt;
&lt;br /&gt;
'''This is how your money can help:'''&lt;br /&gt;
&lt;br /&gt;
* $20 could help us spread the word on the importance of open source initiatives in the Application Security industry.&lt;br /&gt;
* $100 could help fund OWASP project demos at major conferences.&lt;br /&gt;
* $250 could help get our volunteer Project Leaders to speaking engagements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Donate_Button.jpg | link=http://www.regonline.com/Register/Checkin.aspx?EventID=1044369]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OWASP Project Sponsors==&lt;br /&gt;
&lt;br /&gt;
'''Americas'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Africa'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Asia'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Europe'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
'''Middle East'''&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= PM Information  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Samantha Groves: OWASP Projects Manager==&lt;br /&gt;
{| style=&amp;quot;background-color: transparent&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;1000&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[Image:Sam2.jpg|100px]]&lt;br /&gt;
| align=&amp;quot;justify&amp;quot; |Samantha Groves is the Project Manager at OWASP. Samantha has led many projects in her career, some of which include website development, brand development, sustainability and socio-behavioral research projects, competitor analysis, event organization and management, volunteer engagement projects, staff recruitment and training, and marketing department organization and strategy implementation projects for a variety of commercial and not-for-profit organizations. She is eager to begin her work at OWASP and help the organization reach its project completion goals.&lt;br /&gt;
&lt;br /&gt;
Samantha earned her MBA in International Management with a concentration in sustainability from Royal Holloway, University of London. She earned her Bachelor's degree majoring in Multimedia from The University of Advancing Technology in Mesa, Arizona, and she earned her Associate's degree from Scottsdale Community College in Scottsdale, Arizona. Additionally, Samantha recently attained her Prince2 (Foundation) project management certification.&lt;br /&gt;
&lt;br /&gt;
Please see the [https://docs.google.com/a/owasp.org/document/d/1syHIiVA56KSR_T-enIMolMO6xSAZlWP86uvi_Ui8rPs/edit  Project Manager Role Description] for more information. Please visit the [http://samanthagrovesblog.blogspot.com/ OWASP Project Manager Blog] for more information.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Projects Reports==&lt;br /&gt;
&lt;br /&gt;
'''2013'''&lt;br /&gt;
&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-04-01 GPC Meeting: January 04 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-11-01 GPC Meeting: January 11 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-18-01 GPC Meeting: January 18 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-25-01 GPC Meeting: January 25 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-01-02 GPC Meeting: February 01 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-08-02 GPC Meeting: February 08 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-15-02 GPC Meeting: February 15 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-22-02 GPC Meeting: February 22 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-01-03  Project Manager Report: March 01 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-08-03  Project Manager Report: March 08 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-15-03  Project Manager Report: March 15 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-22-03  Project Manager Report: March 22 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-29-03  Project Manager Report: March 29 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-05-04  Project Manager Report: April 05 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-12-04  Project Manager Report: April 12 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2013-19-04  Project Manager Report: April 19 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-26-04  Project Manager Report: April 26 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-03-05  Project Manager Report: May 03 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-10-05  Project Manager Report: May 10 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-17-05  Project Manager Report: May 17 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-24-05  Project Manager Report: May 24 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-31-05  Project Manager Report: May 31 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-07-06  Project Manager Report: June 07 2013]&lt;br /&gt;
*[https://www.owasp.org/index.php/Projects/Reports/2013-14-06  Project Manager Report: June 14 2013]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2012'''&lt;br /&gt;
&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-24-08 GPC Meeting: August 24 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-07-09 GPC Meeting: September 07 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-14-09 GPC Meeting: September 14 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-21-09 GPC Meeting: September 21 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-28-09 GPC Meeting: September 28 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-05-10 GPC Meeting: October 05 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-12-10 GPC Meeting: October 12 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-19-10 GPC Meeting: October 19 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-09-11 GPC Meeting: November 09 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-16-11 GPC Meeting: November 16 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-30-11 GPC Meeting: November 30 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-07-12 GPC Meeting: December 07 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-14-12 GPC Meeting: December 14 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-21-12 GPC Meeting: December 21 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/GPC/Meetings/2012-27-12 GPC Meeting: December 27 2012 Project Manager Report]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Board Meeting Reports==&lt;br /&gt;
&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/August_13_2012 Board Meeting: August 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/September_10_2012 Board Meeting: September 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/October_08_2012 Board Meeting: October 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/November_12_2012 Board Meeting: November 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/December_10_2012 Board Meeting: December 2012 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/January_14_2013 Board Meeting: January 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/February_11_2013 Board Meeting: February 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/March_11_2013 Board Meeting: March 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/April_05_2013 Board Meeting: April 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/May_13_2013 Board Meeting: May 2013 Project Manager Report]&lt;br /&gt;
*[https://www.owasp.org/index.php/OWASP_Project_Manager_Activity_Reports/June_10_2013 Board Meeting: June 2013 Project Manager Report]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Project Funds==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/a/owasp.org/spreadsheet/pub?hl=en_US&amp;amp;hl=en_US&amp;amp;key=0Atu4kyR3ljftdEdQWTczbUxoMUFnWmlTODZ2ZFZvaXc&amp;amp;output=html Chapter and Individual Project Funds]&lt;br /&gt;
* [https://www.owasp.org/index.php/Projects_Reboot_2012 Project Reboot 2012 Information]&lt;br /&gt;
* [https://www.owasp.org/images/a/ae/Project_Funds-Q1_2013.pdf Q1 2013: Funds Allocated to Projects]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Project Grants==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/document/d/1MA3TI5ssclxvheV8At_ffu2Fuic55SDpOokS3AOvBUc/edit?usp=sharing OWASP Guidebooks Proposal]: This proposal as been completed and awarded. &lt;br /&gt;
** [https://www.owasp.org/images/1/18/Development_Guide_Project_Gantt.pdf OWASP Development Guide Plan]&lt;br /&gt;
** [https://www.owasp.org/images/e/e9/Testing_Guide_Project_Gantt.pdf OWASP Testing Guide Plan]&lt;br /&gt;
** [https://www.owasp.org/images/d/da/Code_Review_Project_Gantt.pdf OWASP Code Review Guide Plan]&lt;br /&gt;
* [https://docs.google.com/document/d/16ZFXaML8C7aDAZdyTMDDg4BzLr1vUTOz9eqmYE8ZW8U/edit?usp=sharing OWASP ESAPI Grant Proposal]: This proposal has been completed and submitted.&lt;br /&gt;
* [https://docs.google.com/document/d/1dBTaRr-yl8wGhGKxacWACznZhCZnJ_sZeAdN-b2xPlw/edit?usp=sharing OWASP ModSecurity CRS Proposal]: This proposal has been completed and submitted.&lt;br /&gt;
* Google Grants Proposal]: This proposal has been completed and awarded. &lt;br /&gt;
* European Commission Grant Proposal: This proposal has been completed and submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Project Presentations==&lt;br /&gt;
&lt;br /&gt;
* [https://www.owasp.org/images/f/fb/OWASP_GLOBAL_PROJECTS.pdf OWASP Projects Presentation: Phoenix Chapter Talk]&lt;br /&gt;
* [https://www.owasp.org/images/b/bb/OWASP_Projects_Webinar.pdf OWASP Projects Webinar]&lt;br /&gt;
* [https://www.owasp.org/images/1/19/OWASP_PROJECTS_SOLUTIONS.pdf OWASP Project Infrastructure: Solutions]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Projects Manger's Quarterly Strategic Objectives==&lt;br /&gt;
&lt;br /&gt;
'''Goals and Objectives: 2013 Q2''' &lt;br /&gt;
#Identify and target 5-7 specific grants to pursue for 2013.&lt;br /&gt;
#Develop Brand Usage Guidelines for Projects.&lt;br /&gt;
#Need for consistent documentation of guidelines (similar to How To Host a Conference) that can apply to various events and venues.&lt;br /&gt;
#Volunteer Management - identification of skills and supervision required to engage volunteers productively.&lt;br /&gt;
&lt;br /&gt;
*'''Ongoing Objectives for 2013'''&lt;br /&gt;
**Work with Project leaders to reach grant required milestones - ONGOING&lt;br /&gt;
**Develop a project charter outlining appropriate grant revenue spending and grant required milestones. - DUE IN SEPTEMBER - ONGOING&lt;br /&gt;
**Oversight of Marketing and Graphic Design deliverables (Phase 2/Phase 3) provided by 3rd party contractor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contact the Projects Manager==&lt;br /&gt;
&lt;br /&gt;
If you need any help with anything projects related, or if you simply need some more information, please do not hesitate to contact the [http://owasp4.owasp.org/contactus.html OWASP Projects Manager, Samantha Groves].&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
= Contact US  =&lt;br /&gt;
&amp;lt;font size=2pt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OWASP Representation==&lt;br /&gt;
* [[User:Samantha Groves|Samantha Groves]]: OWASP Projects Manager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need any help with anything projects related, or if you simply need some more information, please do not hesitate to contact the [http://owasp4.owasp.org/contactus.html OWASP Projects Manager, Samantha Groves].&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Norway&amp;diff=142366</id>
		<title>Norway</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Norway&amp;diff=142366"/>
				<updated>2013-01-16T13:34:57Z</updated>
		
		<summary type="html">&lt;p&gt;Eoftedal: /* Medlemsmøter 2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the OWASP Norway Local Chapter ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the local Norway chapter homepage. The chapter leader is [mailto:erlend.oftedal@owasp.org Erlend Oftedal].&lt;br /&gt;
&amp;lt;paypal&amp;gt;Norway&amp;lt;/paypal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se hvem som sitter i [[Norway Chapter styret]] og les [[Norway Chapter vedtekter]]. OWASP Norway Chapter er [http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=994253085 registrert i Bønnøysund] med organisasjonsnummer 994 253 085.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
OWASP chapter meetings are free and open to anyone interested in application security. We encourage members to give presentations on specific topics and to contribute to the local chapter by sharing their knowledge with others. Prior to participating with OWASP please review the [[Chapter Rules]].&lt;br /&gt;
&lt;br /&gt;
To join the chapter mailing list, please visit our [https://lists.owasp.org/mailman/listinfo/owasp-norway mailing list] homepage. The list is used to discuss the meetings and to arrange meeting locations. You can also review the [https://lists.owasp.org/pipermail/owasp-norway/ email archives] to see what folks have been talking about. Please check the mailing list before coming to a meeting to confirm the location and time and to catch any last minute notes.&lt;br /&gt;
&lt;br /&gt;
== Medlemsmøter 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== [[OWASP Norway - Hall of fame ]] ===&lt;br /&gt;
&lt;br /&gt;
[[Forslagskasse]] for tema&lt;br /&gt;
&lt;br /&gt;
Hvis du ikke er på [https://lists.owasp.org/mailman/listinfo/owasp-norway e-postlista] så meld deg på!&lt;br /&gt;
&lt;br /&gt;
=== Neste møte ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 7. Februar, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/98525562/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Crossing Domains by Crossing Origins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tidligere møter ===&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 18. Oktober, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Påmelding/lokasjon/agenda:''' [[http://www.meetup.com/OWASP-Norway/events/84322982/ Påmelding på meetup.com]]&lt;br /&gt;
'''Tema:''' Sikkerhet i det norske eValg-systemet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 24. april, kl 19:30 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' -,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=Tordenskiolds+gate+3%2C+Oslo Mesh Norway, Tordenskiolds gate 3], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/t7kaxy7a5u7v6u6s klikk her]&lt;br /&gt;
&lt;br /&gt;
Tema denne gang er sikkerhet i mobile applikasjoner. Det blir først en introduksjon, deretter kommer&lt;br /&gt;
Martin Knobloch fra OWASP Nederland for å snakke om iGoat og GoatDroid, for så å dele erfaringer fra&lt;br /&gt;
en code review.&lt;br /&gt;
&lt;br /&gt;
Slides:&lt;br /&gt;
&lt;br /&gt;
[[Media:Mobil - Introduksjon til applikasjonssikkerhet.pdf|OWASP Mobile Top 10]] - Ståle Pettersen&lt;br /&gt;
&lt;br /&gt;
[[Media:OWASP-mobile aps.pdf|OWASP Mobile]] - Martin Knobloch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Medlemsmøte: 19. mars, kl 17:00 ====&lt;br /&gt;
'''Ansvarlig:''' Erlend Oftedal ,&lt;br /&gt;
'''Sponsor:''' F5,&lt;br /&gt;
'''Adresse:''' [http://maps.google.com/maps?q=the+dubliner+oslo&amp;amp;hl=en&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;fb=1&amp;amp;hq=the+dubliner&amp;amp;hnear=0x46416e61f267f039:0x7e92605fd3231e9a,Oslo,+Norway&amp;amp;cid=0,0,12890284609415510924&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=A The Dubliner], &lt;br /&gt;
'''Påmelding:''' [http://www.doodle.com/d4rfandvnakqydc6 klikk her]&lt;br /&gt;
{|&lt;br /&gt;
|'''&amp;quot;Web Application Access Control Design Excellence&amp;quot;''', Jim Manico&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Access Control is a necessary security control at almost every layer within a web application. This talk will discuss&lt;br /&gt;
several of the key access control anti-patterns commonly found during website security audits. These access control anti-patterns&lt;br /&gt;
include hard-coded security policies, lack of horizontal access control, and &amp;quot;fail open&amp;quot; access control mechanisms. In reviewing&lt;br /&gt;
these and other access control problems, we will discuss and design a positive access control mechanism that is data contextual,&lt;br /&gt;
activity based, configurable, flexible, and deny-by-default - among other positive design attributes that make up a robust&lt;br /&gt;
web-based access-control mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lokale Nyheter ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tidligere år ==&lt;br /&gt;
&lt;br /&gt;
=== [[Medlemsmøter 2011]] ===&lt;br /&gt;
=== [[Medlemsmøter 2010]] ===&lt;br /&gt;
=== [[Medlemsmøter 2009]] ===&lt;br /&gt;
=== [[Medlemsmøter 2008]] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Norway]]&lt;br /&gt;
[[Category:Europe]]&lt;/div&gt;</summary>
		<author><name>Eoftedal</name></author>	</entry>

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

	</feed>