page 1:
...
<input type="text" name="searchTxt">
...

page 2:
...
SQL = "SELECT * FROM bbs WHERE contents = " & Request("searchTxt")
Db.execute SQL
...

위의 코드가 무엇인지 대강 짐작이 갈 것이다.
Db.execute 함수는 세미콜론으로 구분된 다중 쿼리도 처리하기 때문에,
만약 악의적인 사용자가 테이블 이름을 유추하고서 다음과 같이 입력한다면 구멍이 뚫릴 수 있다.

<input type="text" name="searchTxt" value="tmp;delete from member">

input의 maxlength에 길이 제한을 둔다거나 하는 방법은 간단한 만큼 위험하다.
대개 검색문은 쿼리 스트링(GET 메서드)를 통해 전송되기 때문이다.
POST를 써야 할까? 대부분의 사용자는 GET 메서드가 포함된 URL을 사용하는 데 익숙해 져 있으며,
POST를 쓴다 해도 클라이언트를 만들어낼 수 있으므로 효과적인 방법은 아니다.

http://localnet/search.asp?type=title&id=board2&str=a%25%27delete+from+member--

powered by Moniwiki | themed by clockoon
last modified 2008-12-30 10:44:13
Processing time 0.0113 sec