<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Rob,<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.5in'>&gt;&gt;my regex would need to
allow a range of Unicode values<o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in'>&gt;&gt; a character class
(\p{Alpha} and such) would seamlessly match 'letters' of any langauge.<o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I am a newbie to unicode, but looked into this a while back. My research
pointed to that Java does not support character classes in regular expressions
( see <a href="http://www.regexbuddy.com">www.regexbuddy.com</a> - imho their
regex product has a great help file and tool for creating and debugging regex).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'> <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I only had simple needs and wrote a simple isValidString()
function that uses the Java Character class to validate that all characters in
the input are from particular character classes ( i.e. letters, punctuation,
accents…).  If you need to constrain each Unicode character --Java calls them code
points - against either a range of Unicode values or a character class, it may
be easiest to loop through each code point in the input  and check that it
meets the regex or the type of the code point is an acceptable character class.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>David<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal style='margin-left:.5in'><b><span style='font-size:10.0pt;
font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;
font-family:"Tahoma","sans-serif"'> esapi-user-bounces@lists.owasp.org
[mailto:esapi-user-bounces@lists.owasp.org] <b>On Behalf Of </b>Rob Spremulli<br>
<b>Sent:</b> Tuesday, January 26, 2010 3:19 PM<br>
<b>To:</b> esapi-user@lists.owasp.org<br>
<b>Subject:</b> [Esapi-user] Localization and InputValidation<o:p></o:p></span></p>

</div>

<p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p>

<div>

<p class=MsoNormal style='margin-left:.5in'>Hi guys, a question has arisen re:
input validation<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>I should prefix this by stating we
are on 1.4, not 2.0.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>Let's say I want to pass &quot;<span
style='font-family:"MS Mincho"'>グ</span>&quot; in my input.&nbsp; For those of
you who can't read that, it's a Japanese Katakana with Unicode value 30B0<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<a
href="http://www.fileformat.info/info/unicode/char/30b0/index.htm">http://www.fileformat.info/info/unicode/char/30b0/index.htm</a><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>I want to allow this in my input,
so I need to create a regex that will permit it.&nbsp; What I'm not sure about
is:<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>1) what canonicalize is going to do
to that string, and <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>2) if there's a locale-aware way of
identifying characters in a regex.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>I can see this potentially showing
up as <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>\u30b0, where I would need to
permit \ characters, <o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>\u30b0, where the slash is encoded,
though I doubt this.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'><span style='font-family:"MS Mincho"'>グ</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>the latter can lead to two
possibilities<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>1) my regex would need to allow a
range of Unicode values<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>2) a character class (\p{Alpha} and
such) would seamlessly match 'letters' of any langauge.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>The confusion on my end is due to
lack of knowledge on characters outside the typical US character set.&nbsp; Can
anyone shed some light on this issue, as to the expected canonicalization and
recommended whitelist regex?<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal style='margin-left:.5in'>&nbsp;<o:p></o:p></p>

</div>

</div>

</body>

</html>