1)
크로스사이트스크립트
웹 페이지에
악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도할 수 있다. 부적절한 스크립트가 수행될 경우
정보 유출 등의 공격을 유발할 수 있다.
n 안전한 코딩
기법
①
문자열에서 <, >, &, “,” 등을
replace, replaceAll 등의 문자 변환 함수나 메소드를 사용하여 <,
>, &, "로 치환한다.
② 위험을
유발할 수 있는 태그들을 제거한 후 화면에 출력한다. <script>, <object>,
<applet>, <element>, <embed>, <form>, <meta>,
<iframe>, <frameset>, <frame>, <link>, <body>,
<base>, Event Attributes (onload) 등을 replace,
replaceAll을 이용하여 제거 또는 치환한다.
1. // 외부의 입력값에 포함된 태그 제거
2. private String htmlTagRemove(String content) {
3. String result = new String(content);
4. result = result.replaceAll("<(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)[^>]*>[^<]*</(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)>", ""); // <script>
5. result = result.replaceAll("<(o|O)(b|B)(j|J)(e|E)(c|C)(t|T)[^>]*>[^<]*</(o|O)(b|B)(j|J)(e|E)(c|C)(t|T)>", ""); // <object>
6. result = result.replaceAll("<(e|E)(m|M)(b|B)(e|E)(d|D)[^>]*>[^<]*</(e|E)(m|M)(b|B)(e|E)(d|D)>", ""); // <embed>
7. result = result.replaceAll("<(f|F)(o|O)(r|R)(m|M)[^>]*>[^<]*</<(f|F)(o|O)(r|R)(m|M)>", ""); // <form>
8. result = result.replaceAll("<(m|M)(e|E)(t|T)(a|A)[^>]*>[^<]*</(m|M)(e|E)(t|T)(a|A)>", ""); // <meta>
9. result = result.replaceAll("<(i|I)(f|F)(r|R)(a|A)(m|M)(e|E)[^>]*>[^<]*</(i|I)(f|F)(r|R)(a|A)(m|M)(e|E)>", ""); // <iframe>
10. result = result.replaceAll("<(f|F)(r|R)(a|A)(m|M)(e|E)(s|S)(e|E)(t|T)[^>]*>[^<]*</(f|F)(r|R)(a|A)(m|M)(e|E)(s|S)(e|E)(t|T)>", ""); // <frameset>
11. result = result.replaceAll("<(f|F)(r|R)(a|A)(m|M)(e|E)[^>]*>[^<]*</(f|F)(r|R)(a|A)(m|M)(e|E)>", ""); // <frame>
12. result = result.replaceAll("<(l|L)(i|I)(n|N)(k|K)[^>]*>[^<]*</(l|L)(i|I)(n|N)(k|K)>", ""); // <link>
13. result = result.replaceAll("<(b|B)(o|O)(d|D)(y|Y)[^>]*>[^<]*</(b|B)(o|O)(d|D)(y|Y)>", ""); // <body>
14. result = result.replaceAll("<(b|B)(a|A)(s|S)(e|E)[^>]*>[^<]*</(b|B)(a|A)(s|S)(e|E)>", ""); // <base>
15. result = result.replaceAll("<(e|E)(l|L)(e|E)(m|M)(e|E)(n|N)(t|T)[^>]*>[^<]*</(e|E)(l|L)(e|E)(m|M)(e|E)(n|N)(t|T)>", ""); // <element>
16.
17. return result;
18. }
19.
20. // 외부의 입력값에 대한 검증
21. private String verifyString(String content) {
22. String result = new String(content);
23.
24. result = result.replaceAll("&", "");
25. result = result.replaceAll("#", "");
26. result = result.replaceAll("<", "<");
27. result = result.replaceAll("\\)", ")");
28. result = result.replaceAll(">", ">");
29. result = result.replaceAll("\\(", "(");
30. result = result.replaceAll("\"", "");
31. result = result.replaceAll("/", "");
32. result = result.replaceAll("\\\\", "");
33. result = result.replaceAll("'", "");
34. result = result.replaceAll("\\+", "");
35. result = result.replaceAll("-", "");
36. result = result.replaceAll(":", "");
37. result = result.replaceAll(";", "");
38. result = result.replaceAll("=", "");
39.
40. return result;
41. }
댓글 없음:
댓글 쓰기