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

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Mike_Samuel&amp;diff=251936</id>
		<title>User:Mike Samuel</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Mike_Samuel&amp;diff=251936"/>
				<updated>2019-05-28T06:49:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mike Samuel: Updated interests.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mike Samuel is an engineer in Google's Security Engineering group working on programming language based approaches to web application security.&lt;br /&gt;
&lt;br /&gt;
He is involved in the EcmaScript standards process, was one of the implementors of Caja, a system that allows for secure composition of web applications using existing standards, and has worked on static type reasoning to make template languages robust against XSS.&lt;/div&gt;</summary>
		<author><name>Mike Samuel</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JSON_Sanitizer&amp;diff=142430</id>
		<title>OWASP JSON Sanitizer</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JSON_Sanitizer&amp;diff=142430"/>
				<updated>2013-01-17T14:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mike Samuel: Reworked project description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
Given JSON-like content, converts it to valid JSON.&lt;br /&gt;
&lt;br /&gt;
This can be attached at either end of a data-pipeline to help satisfy Postel's principle:&lt;br /&gt;
&lt;br /&gt;
be conservative in what you do, be liberal in what you accept from others&lt;br /&gt;
Applied to JSON-like content from others, it will produce well-formed JSON that should satisfy any parser you use.&lt;br /&gt;
&lt;br /&gt;
Applied to your output before you send, it will coerce minor mistakes in encoding and make it easier to embed your JSON in HTML and XML.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Motivation ===&lt;br /&gt;
&lt;br /&gt;
[[Image:http://json-sanitizer.googlecode.com/git/docs/JSON-Sanitizer-Arch.png|frameless|architecture]]&lt;br /&gt;
&lt;br /&gt;
Many applications have large amounts of code that uses ad-hoc methods to generate JSON outputs. Frequently these outputs all pass through a small amount of framework code before being sent over the network. This small amount of framework code can use this library to make sure that the ad-hoc outputs are standards compliant and safe to pass to (overly) powerful deserializers like Javascript's eval operator.&lt;br /&gt;
&lt;br /&gt;
Applications also often have web service APIs that receive JSON from a variety of sources. When this JSON is created using ad-hoc methods, this library can massage it into a form that is easy to parse.&lt;br /&gt;
&lt;br /&gt;
By hooking this library into the code that sends and receives requests and responses, this library can help software architects ensure system-wide security and well-formedness guarantees.&lt;br /&gt;
&lt;br /&gt;
=== Input ===&lt;br /&gt;
&lt;br /&gt;
The sanitizer takes JSON like content, and interprets it as JS eval would. Specifically, it deals with these non-standard constructs.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;'...'&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Single quoted strings are converted to JSON strings.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;\xAB&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Hex escapes are converted to JSON unicode escapes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;\012&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Octal escapes are converted to JSON unicode escapes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xAB&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Hex integer literals are converted to JSON decimal numbers.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;012&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Octal integer literals are converted to JSON decimal numbers.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;+.5&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Decimal numbers are coerced to JSON's stricter format.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;[0,,2]&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Elisions in arrays are filled with &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;[1,2,3,]&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Trailing commas are removed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;{foo:&amp;quot;bar&amp;quot;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Unquoted property names are quoted.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;//comments&amp;lt;/tt&amp;gt;&lt;br /&gt;
| JS style line and block comments are removed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;(...)&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Grouping parentheses are removed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The sanitizer fixes missing punctuation, end quotes, and mismatched or missing close brackets.  If an input contains only white-space then the valid JSON string &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; is substituted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The output is well-formed JSON as defined by&lt;br /&gt;
[http://www.ietf.org/rfc/rfc4627.txt RFC 4627].&lt;br /&gt;
The output satisfies three additional properties:&lt;br /&gt;
&lt;br /&gt;
# The output will not contain the substring (case-insensitively) &amp;lt;tt&amp;gt;&amp;quot;&amp;amp;lt;/script&amp;quot;&amp;lt;/tt&amp;gt; so can be embedded inside an HTML script element without further encoding.&lt;br /&gt;
# The output will not contain the substring &amp;lt;tt&amp;gt;&amp;quot;]]&amp;amp;gt;&amp;quot;&amp;lt;/tt&amp;gt; so can be embedded inside an XML CDATA section without further encoding.&lt;br /&gt;
# The output is a valid Javascript expression, so can be parsed by Javascript's &amp;lt;tt&amp;gt;eval&amp;lt;/tt&amp;gt; builtin (after being wrapped in parentheses) or by &amp;lt;tt&amp;gt;JSON.parse&amp;lt;/tt&amp;gt;.  Specifically, the output will not contain any string literals with embedded JS newlines (U+2028 Paragraph separator or U+2029 Line separator).&lt;br /&gt;
# The output contains only valid Unicode [http://www.unicode.org/glossary/#unicode_scalar_value scalar values] (no isolated [http://www.unicode.org/glossary/#surrogate_pair UTF-16 surrogates]) that are [http://www.w3.org/TR/xml/#charsets allowed in XML] unescaped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
Since the output is well-formed JSON, passing it to &amp;lt;tt&amp;gt;eval&amp;lt;/tt&amp;gt; will&lt;br /&gt;
have no side-effects and no free variables, so is neither a code-injection&lt;br /&gt;
vector, nor a vector for exfiltration of secrets.&lt;br /&gt;
&lt;br /&gt;
This library only ensures that the JSON string → Javascript object phase has no side effects and resolves no free variables, and cannot control how other client side code later interprets the resulting Javascript object.  So if client-side code takes a part of the parsed data that is controlled by an attacker and passes it back through a powerful interpreter like &amp;lt;tt&amp;gt;eval&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;innerHTML&amp;lt;/tt&amp;gt; then that client-side code might suffer unintended side-effects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The sanitize method will return the input string without allocating a new&lt;br /&gt;
buffer when the input is already valid JSON that satisfies the properties&lt;br /&gt;
above.  Thus, if used on input that is usually well formed, it has minimal&lt;br /&gt;
memory overhead.&lt;br /&gt;
&lt;br /&gt;
The sanitize method takes O(n) time where n is the length in UTF-16&lt;br /&gt;
code-units.&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_JSON_Sanitizer}} &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]&lt;/div&gt;</summary>
		<author><name>Mike Samuel</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Java_HTML_Sanitizer_Project&amp;diff=114592</id>
		<title>OWASP Java HTML Sanitizer Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Java_HTML_Sanitizer_Project&amp;diff=114592"/>
				<updated>2011-07-26T13:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mike Samuel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Project About ====&lt;br /&gt;
{{:Projects/OWASP Java HTML Sanitizer Project | Project About}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fast and easy to configure HTML Sanitizer written in Java which lets you include HTML authored by third-parties in your web application while protecting against XSS.&lt;br /&gt;
&lt;br /&gt;
The code is hosted on [http://code.google.com/p/owasp-java-html-sanitizer/ Google Code].  The [http://canyouxssthis.com/reflect attack review] is ongoing so please consider it alpha software. &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_Tool]] &lt;br /&gt;
[[Category:OWASP_Alpha_Quality_Tool]] &lt;br /&gt;
[[Category:OWASP_Project|Java HTML Sanitizer]]&lt;/div&gt;</summary>
		<author><name>Mike Samuel</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Summit_2011_Attendee/Attendee174&amp;diff=104160</id>
		<title>Summit 2011 Attendee/Attendee174</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Summit_2011_Attendee/Attendee174&amp;diff=104160"/>
				<updated>2011-02-07T16:52:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mike Samuel: Added self to attendees page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;OWASP 2011 Global Summit Attendee Tab&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_name1 = Mike Samuel&lt;br /&gt;
| summit_attendee_email1 = mikesamuel@gmail.com&lt;br /&gt;
| summit_attendee_wiki_username1 = Mike Samuel&lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_company = Google, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Project Leadership (less than 6 months old) = &lt;br /&gt;
| Project Leadership (more than 6 months old) = &lt;br /&gt;
| Release Leadership (less than 6 months old) = &lt;br /&gt;
| Release Leadership (more than 6 months old) = &lt;br /&gt;
| Project Contribution  (less than 6 months old) = &lt;br /&gt;
| Project Contribution  (more than 6 months old) = &lt;br /&gt;
| Release Contribution (less than 6 months old) =  &lt;br /&gt;
| Release Contribution (more than 6 months old) = &lt;br /&gt;
| Committee Membership = &lt;br /&gt;
| Chapter Co-Leadership = &lt;br /&gt;
| Conference Co-Leadership =  &lt;br /&gt;
| Projected Funding Cost = &lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_current_owasp_involvement_name1 =  &lt;br /&gt;
| summit_attendee_current_owasp_involvement_url_1 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_name2 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_url_2 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_name3 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_url_3 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_name4 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_url_4 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_name5 = &lt;br /&gt;
| summit_attendee_current_owasp_involvement_url_5 = &lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_reason_for_summit_participation_name1 = Browser Security&lt;br /&gt;
| summit_attendee_reason_for_summit_participation_url_1 = &lt;br /&gt;
| notes_reason_for_participating_issues_to_be_discussed_1 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_name2 = XSS eradication&lt;br /&gt;
| summit_attendee_reason_for_summit_participation_url_2 = &lt;br /&gt;
| notes_reason_for_participating_issues_to_be_discussed_2 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_name3 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_url_3 = &lt;br /&gt;
| notes_reason_for_participating_issues_to_be_discussed_3 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_name4 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_url_4 = &lt;br /&gt;
| notes_reason_for_participating_issues_to_be_discussed_4 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_name5 = &lt;br /&gt;
| summit_attendee_reason_for_summit_participation_url_5 = &lt;br /&gt;
| notes_reason_for_participating_issues_to_be_discussed_5 = &lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_owasp_sponsor = &lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_summit_time_paid_by_name1 =&lt;br /&gt;
| summit_attendee_summit_time_paid_by_url_1 =&lt;br /&gt;
| summit_attendee_summit_time_paid_by_name2 =&lt;br /&gt;
| summit_attendee_summit_time_paid_by_url_2 =&lt;br /&gt;
|-&lt;br /&gt;
| summit_attendee_summit_expenses_paid_by_name1 = &lt;br /&gt;
| summit_attendee_summit_expenses_paid_by_url_1 = &lt;br /&gt;
| summit_attendee_summit_expenses_paid_by_name2 = &lt;br /&gt;
| summit_attendee_summit_expenses_paid_by_url_2 =  &lt;br /&gt;
|-&lt;br /&gt;
| reason_for_sponsorship = &lt;br /&gt;
|-&lt;br /&gt;
| status = &lt;br /&gt;
|-&lt;br /&gt;
| letter sent to sponsor = &lt;br /&gt;
|-&lt;br /&gt;
| notes for Kate =   &lt;br /&gt;
|-&lt;br /&gt;
| attendee_name_mask = &amp;lt;!--Please replace DO NOT EDIT this string --&amp;gt; Attendee174&lt;br /&gt;
| attendee_home_page = &amp;lt;!--Please replace DO NOT EDIT this string --&amp;gt; Summit_2011_Attendee/Attendee174&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mike Samuel</name></author>	</entry>

	</feed>