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

사이트를 지키자!!!

by 백룡화검 2010. 4. 23.

 하하 제목만 거창하지요 -_-;;

음 오늘 쓸 내용은 아주 간단한 겁니다.

그러나 많은 분들이 간과하고 있는 내용이기도 합니다.

무엇이냐 하면 많은 사이트들의 게시판을 잘 보면 데이터를 쉽게 날리거나 조작할 수 있습니다.

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