Wednesday, June 17, 2009

javascript : encode string to prevent xss attack


function html_encoder(str) {
if(str == null || str.length == 0)
return "";

var retstr = "";
for(var a=0; a<str.length; a++) {
var ch = str.charAt(a);
var code = str.charCodeAt(a);

switch(code) {
case 8220:
case 8221:
case 8222:
case 34: ch = '&quot;'; break;
case 38: ch = '&amp;'; break;
case 8216:
case 8217:
case 8218:
case 39: ch = '&rsquo;'; break;
case 47: ch = '&frasl;'; break;
case 60: ch = '&lt;'; break;
case 62: ch = '&gt;'; break;
case 161: ch = '&iexcl;'; break;
case 162: ch = '&cent;'; break;
case 163: ch = '&pound;'; break;
case 165: ch = '&yen;'; break;
case 166: ch = '&brvbar;'; break;
case 167: ch = '&sect;'; break;
case 168: ch = '&uml;'; break;
case 169: ch = '&copy;'; break;
case 170: ch = '&ordf;'; break;
case 171: ch = '&laquo;'; break;
case 172: ch = '&not;'; break;
case 173: ch = '&shy;'; break;
case 174: ch = '&reg;'; break;
case 175: ch = '&macr;'; break;
case 176: ch = '&deg;'; break;
case 177: ch = '&plusmn;'; break;
case 178: ch = '&sup2;'; break;
case 179: ch = '&sup3;'; break;
case 180: ch = '&acute;'; break;
case 181: ch = '&micro;'; break;
case 182: ch = '&para;'; break;
case 183: ch = '&middot;'; break;
case 184: ch = '&cedil;'; break;
case 185: ch = '&sup1;'; break;
case 186: ch = '&ordm;'; break;
case 187: ch = '&raquo;'; break;
case 188: ch = '&frac14;'; break;
case 189: ch = '&frac12;'; break;
case 190: ch = '&frac34;'; break;
case 191: ch = '&iquest;'; break;
case 192: ch = '&Agrave;'; break;
case 193: ch = '&Aacute;'; break;
case 194: ch = '&Acirc;'; break;
case 195: ch = '&Atilde;'; break;
case 196: ch = '&Auml;'; break;
case 197: ch = '&Aring;'; break;
case 198: ch = '&AElig;'; break;
case 199: ch = '&Ccedil;'; break;
case 200: ch = '&Egrave;'; break;
case 201: ch = '&Eacute;'; break;
case 202: ch = '&Ecirc;'; break;
case 203: ch = '&Euml;'; break;
case 204: ch = '&Igrave;'; break;
case 205: ch = '&Iacute;'; break;
case 206: ch = '&Icirc;'; break;
case 207: ch = '&Iuml;'; break;
case 208: ch = '&ETH;'; break;
case 209: ch = '&Ntilde;'; break;
case 210: ch = '&Ograve;'; break;
case 211: ch = '&Oacute;'; break;
case 212: ch = '&Ocirc;'; break;
case 213: ch = '&Otilde;'; break;
case 214: ch = '&Ouml;'; break;
case 215: ch = '&times;'; break;
case 216: ch = '&Oslash;'; break;
case 217: ch = '&Ugrave;'; break;
case 218: ch = '&Uacute;'; break;
case 219: ch = '&Ucirc;'; break;
case 220: ch = '&Uuml;'; break;
case 221: ch = '&Yacute;'; break;
case 222: ch = '&THORN;'; break;
case 223: ch = '&szlig;'; break;
case 224: ch = '&agrave;'; break;
case 225: ch = '&aacute;'; break;
case 226: ch = '&acirc;'; break;
case 227: ch = '&atilde;'; break;
case 228: ch = '&auml;'; break;
case 229: ch = '&aring;'; break;
case 230: ch = '&aelig;'; break;
case 231: ch = '&ccedil;'; break;
case 232: ch = '&egrave;'; break;
case 233: ch = '&eacute;'; break;
case 234: ch = '&ecirc;'; break;
case 235: ch = '&euml;'; break;
case 236: ch = '&igrave;'; break;
case 237: ch = '&iacute;'; break;
case 238: ch = '&icirc;'; break;
case 239: ch = '&iuml;'; break;
case 240: ch = '&eth;'; break;
case 241: ch = '&ntilde;'; break;
case 242: ch = '&ograve;'; break;
case 243: ch = '&oacute;'; break;
case 244: ch = '&ocirc;'; break;
case 245: ch = '&otilde;'; break;
case 246: ch = '&ouml;'; break;
case 247: ch = '&divide;'; break;
case 248: ch = '&oslash;'; break;
case 249: ch = '&ugrave;'; break;
case 250: ch = '&uacute;'; break;
case 251: ch = '&ucirc;'; break;
case 252: ch = '&uuml;'; break;
case 253: ch = '&yacute;'; break;
case 254: ch = '&thorn;'; break;
case 255: ch = '&yuml;'; break;
default: break;
}
retstr += ch;
}
return retstr;
}


more on xss attack : http://www.ibm.com/developerworks/web/library/wa-secxss/

0 comments:

Post a Comment