본문 바로가기
프로그래밍/ASP

사이트를 지키자!!!

by 백룡화검 2008. 6. 29.

하하 제목만 거창하지요 -_-;;
음 오늘 쓸 내용은 아주 간단한 겁니다.
그러나 많은 분들이 간과하고 있는 내용이기도 합니다.
무엇이냐 하면 많은 사이트들의 게시판을 잘 보면 데이터를 쉽게 날리거나 조작할 수 있습니다.
바로 Reject 루틴을 무시해서 그런데...
모냐면 제 컴퓨터에 Html을 하나 비슷하게 만든 후 Form의 Action만 그 사이트 디비 조작부분으로 쏴버리면,
무슨 자바스크립트 체크라던가를 무시하고 디비에 들어가게 할 수 있죠.
밝힐 수는 없지만 한창 지금 주가를 올리고 있는 모 게임의 홈페이지도 이렇게 조작이 가능합니다.
제가 심심해서 공지사항까지 써본적도 -_-;;;
자 그럼 이제 막아야죠.
예를 들어 www.devpia.com 내에 어떤 게시판이 있다고 칩시다.
그러면 www.devpia.com 내의 html이 아닌 다른 URL이나 주소창에 직접 URL을 치고 들어오려하는 것을 막아야겠지요.
<%
Dim strReferPath
Dim strReferCheck
Dim strDomain
strReferPath = Trim(Request.Servervariables('HTTP_REFERER'))
if strReferPath <> '' then
strReferCheck = Split(strReferPath, '/')
strDomain = Trim(strReferCheck(2))
if strDomain <> Trim(Request.Servervariables('SERVER_NAME')) then
Response.Clear
Server.Transfer 'Reject.asp'
end if
else
Response.Clear
Server.Transfer 'Reject.asp'
end if
%>
이것만 Include 시키면 다 해결되겠지요^^
strReferPath = Trim(Request.Servervariables('HTTP_REFERER'))
머 다 아시겠지만. 현재 페이지가 Main_Result.asp 이고 이 전에 보여진 파일이 Main.asp라면
위의 값에는 도메인 이름까지 포함한 값이 들어갑니다. 예를들어 www.devpia.com 이라는 도메인이라면
www.devpia.com/Main.asp 라는 값이 구해지지요.
if strReferPath <> '' then
URL을 직접 주소창에 쳐서 접근한다면 어떨까요? 그러면 strReferPath라는 변수에는 값이 없게 됩니다.
Null은 아니구요. 걍 공백입니다. 왜냐면 직접 주소를 쳤으니 이전 페이지값을 알 수가 없거든요^^
if strDomain <> Trim(Request.Servervariables('SERVER_NAME')) then
strReferPath를 통해 분석한 도메인명 devpia가 맞는지 비교하는 부분입니다. 즉 다른 도메인에서 강제로 온 것을 막는 것이죠^^
로컬에서 html 만들고 form action을 URL로 걸어주는 것을 막기 위함입니다.
그 밑은 어떤 내용인지 잘 아시겠죠^^
사소한것 같아도 이런거 그냥 지나치시면 나중에 큰 일이 벌어질 수 있습니다.
저도 한번 그걸 경험했었죠.
많은 도움이 되길 바라며 이만^^

출처 : http://blog.naver.com/romu/60012903586