-
Cross Site Scripting (XSS)Development/보안취약점 2019. 7. 7. 14:08
Cross Site Scripting(XSS) 란?
게시글과 같은 페이지에, 공격자가 악성 스크립트를 삽입하여, 사용자의 정보를 탈취, 악성코드등을 유입시키는 공격을 말합니다. 이 공격의 특징으로는 사용자(클라이언트) 대상으로 이루어 진다는 점입니다.
1. XSS 공격 패턴
2. XSS 공격을 사전 예방하는 방법
2-1. 위험한 문자열을 인코딩하여 저장하거나, 인코딩하여 표시하는 방법
문자 인코딩 된 문자 &
&
<
<
>
>
'
'
"
"
(
(
)
)
/
/
- 클라이언트에서 위험한 특수문자를 인코딩하는 함수
123456//받은 입력값 특수문자 변환 처리function XFN_ChangeInputValue(pValue) {var strReturenValue = "";strReturenValue = pValue.replace(/&/gi, '&').replace(/</gi, '<').replace(/>/gi, '>').replace(/"/gi, '"').replace(/'/gi, ''');return strReturenValue;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs - 클라이언트에서 인코딩된 특수문자를 원래의 문자로 변환해주는 함수
1234567891011//받은 입력값 특수문자 변환 처리function ChangeOutputValue(pValue) {var strReturenValue = "";strReturenValue = pValue.replace(/&/gi, '&').replace(/</gi, '<').replace(/>/gi, '>').replace(/"/gi, '"').replace(/'/gi, '\'').replace(/ /gi, ' ');return strReturenValue;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs - 서버에서 전달 받은 위험한 특수문자를 인코딩하는 메서드 (C#)
12345678910111213141516171819/// <summary>/// Input 데이터를 DB에 넣을 때 특수문자 처리/// </summary>/// <param name="pValue"></param>/// <returns></returns>public static string ConvertInputValue(string pValue){pValue = pValue.Replace("&", "&");pValue = pValue.Replace("<", "<");pValue = pValue.Replace(">", ">");pValue = pValue.Replace("\"", """);pValue = pValue.Replace("'", "'");pValue = pValue.Replace("\\", "/");pValue = pValue.Replace(" ", " ");pValue = pValue.Replace("\n", "<br />");return pValue;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs - 서버에서 인코딩된 특수문자를 원래의 문자로 변환해주는 메서드 (C#)
12345678910111213141516171819/// <summary>/// 데이터를 불러올때 특수문자 처리/// </summary>/// <param name="pValue"></param>/// <returns></returns>public static string ConvertOutputValue(string pValue){pValue = pValue.Replace("&", "&");pValue = pValue.Replace("<", "<");pValue = pValue.Replace(">", ">");pValue = pValue.Replace(""", "\"");pValue = pValue.Replace("'", "'");pValue = pValue.Replace("/", "\\");pValue = pValue.Replace(" ", " ");pValue = pValue.Replace("<br />", "\n");return pValue;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs 2-2. 본문 내용 저장 시 form, object, embed, applet등의 태그는 정규식을 통하여 제거하여 준다.
- img태그의 src, iframe의 src 등을 통하여 악성 파일을 강제로 다운로드시키거나, 악성 페이지로
이동될 수 있으므로, 불필요한 태그는 제거하여야 합니다.- img 태그의 경우 사용을 아예 안할수는 없는 태그이기 때문에, 화이트리스트를 관리하는 등의
차선책이 필요합니다.- 요즘에는 웹 에디터 제품을 많이 사용하게 되는데, 해당 제품을 만든 업체에서 기본적인 XSS
방지 기능을 제공하나, 서버측에서 체크는 반드시 추가적으로 해주셔야 합니다.- 서버에서 본문 내용 저장 시 불필요한 태그를 제거하는 메서드 (C#)
12345678910111213141516171819202122232425262728/// <summary>/// 불필요한 태그 삭제/// </summary>/// <param name="str"></param>/// <returns></returns>public static string HtmlRemove(string pHtml){Regex rgScript = new Regex("<(no)?script.*?script>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgStyle = new Regex("<(no)?style.*?style>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgApplet = new Regex("<(no)?applet.*?applet>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgObject = new Regex("<(no)?object.*?object>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgForm = new Regex("<(no)?form.*?form>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgEmbed = new Regex("<(no)?embed.*?embed>", RegexOptions.IgnoreCase | RegexOptions.Singleline);Regex rgTag = new Regex("<.*?>", RegexOptions.Singleline);Regex rgBlank = new Regex(@"\s+", RegexOptions.Singleline);pHtml = rgScript.Replace(pHtml, "");pHtml = rgStyle.Replace(pHtml, "");pHtml = rgApplet.Replace(pHtml, "");pHtml = rgObject.Replace(pHtml, "");pHtml = rgForm.Replace(pHtml, "");pHtml = rgEmbed.Replace(pHtml, "");pHtml = rgTag.Replace(pHtml, "");pHtml = rgBlank.Replace(pHtml, " ");return pHtml;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs 2-3. 전달받은 URL 파라메터를 서버측 변수에 저장 후 클라이언트로 노출 시킬 경우. (ASP.NET)
- .NET Framework 4.5 부터 지원
- 전달받은 Request를 AntiXssEncoder 로 인코딩 후 클라이언트 측에 노출시켜야 함.
1string strMenuID = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(Request["MenuID"].ToString(), false);http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs 'Development > 보안취약점' 카테고리의 다른 글
IIS 첨부파일 다운로드/업로드 취약점 조치방안 (0) 2020.03.14 댓글