선 밖에 선 자유인

Anti XSS Code pattern 본문

IT/Security

Anti XSS Code pattern

Hotman 2013. 10. 17. 13:47

// anti XSS // ASP 코드 function checkBadString(s) s=trim(s) s=replace(s, "<", "&lt") s=replace(s, ">", "&gt") s=replace(s, "cookie", "cook1e") s=replace(s, "document", "d0cument") s=replace(s, "script", "scr1pt") s=replace(s, CHR(32), "&nbsp;") s=replace(s, CHR(34), &quot;") s=replace(s, CHR(39), &#39;") s=replace(s, CHR(23), "") s=replace(s, CHR(10) & CHR(10), "</p><p> ") s=replace(s, CHR(10), "<BR> ") checkBadString=s end function // 숫자만 들어오는 입력 허용시 function checkInputString(s) if not isnumeric(s) then Response.Redirect "/error/error.asp" End If End function // JSP환경 public static String strBlockSpecialTags(String source) { STring [] oldString={"<html", "</html", "<meta", "<link", "<head", "</haed, "<body", "</body", "<form", "</form", "<script", "</script", "<style", "</style", "script:", "cookie", "document."}; String [] newSTring={"<hHTML", "</hHTML", "<hMETA", "<hLINK", "<hHEAD", "</hHEAD, "<hBODY", "</hBODY", "<hFORM", "</hFORM", "<hSCRIPT", "</hSCRIPT", "<hSTYLE", "</hSTYLE", "script:", "cook!e", "d0cument."}; return strReplaceignoreCase(source, oldString, newString); } // 사용자가 입력값을 URL을 이용해 직접 읿력 받고, 입력 받은 값이 상수값으로만 한정될 경우 String Value=request.getParameter("argment"); Int newValue; if(Value != null){ try{ newValue=Integer.valueOf(value).intValue(); } catch(NumberFormatException e){ response.sendRedirect("/error/error.jsp"); } } // 문자열을 입력해서 form문을 형성하여 html에 나타낼 때는 javascript를 이용해 URLEncoding, 자바의 URLEncode class 이용 <form method=post action="actionpage.jsp"> <script> document.writein("<input type=hidden name=input1 value="+escape(<%=arg1%>+">"); document.writein("<input type=hidden name=input2 value="+escape(<%=arg2%>)+">"); document.writein("<input type=hidden name=input3 value="+escape(<%=arg3%>)+">"); </script> </form> // 사용할 문자들만 허용 String value=request.getParameter("argument"); if(Value == null || Value.matches("[^0-9]"){ response.sendRedirect("/error/error.jsp"); } // PHP 환경 대응 방안 <? function replaceMetastring($MetaString){ $MetaString=str_replace("<", "&lt", $MetaSTring); $MetaString=str_replace(">", "&gt", $MetaSTring); $MetaString=str_replace("cookie", "cook!e", $MetaSTring); $MetaString=str_replace("document", "d0cument", $MetaSTring); return $MetaString; } $MetaString=replacemetaString("<script>alert('XSS')</script>"); echo $MetaString; ?>


Comments