독서하는 개발자's Blog

반응형


JAVA 파라미터 세션값을 이용한 강제 데이터입력 해킹 보안 방법


우리는 보통 post나 get 방식으로 파라미터값을 넘기게 된다. 

 하지만, 이는 프록시 검사를 돌리면 post방식이라 할지라도 어떤 파라미터가 어떠한 값으로 넘어가는지 눈으로 확인할 수 있으며, 

 이를 가지고 악의적인 해커나 개발자들은 데이터값을 변경해서 미리 데이터를 넣는다던가, 무한 루트를 돌려서 사이트의 부하가 많이 걸리게 할 수 있다.

 그렇기 때문에 강제적으로 데이터가 넘어오는것을 막기위해서 세션을 사용해서 화면이 넘어 갈 때 세션값을 부여하고, 입력이 끝난 후에는 지우는 방법을 사용하여, 강제 데이터 입력해킹을 방어해보겠습니다.


먼저, 제가 사용했던 코드를 보겠습니다.




코드를 보시면 popup메소드와 reqPopup메소드가 있는게 보이실 겁니다.

popup메소드는 팝업 화면으로 넘어가게 해주는 메소드입니다.

Random 함수를 이용해서 임의의 랜던값을 만들고 randomCheck라는 이름으로 리턴 시켜주었습니다.


리턴된 jsp 경로 안에 randomCheck라는게 어떻게 사용되었나 보시면,


 

위에 value안에 el태그와 같이 사용되었습니다. ( 태그 안에는 popup메소드에서 만든 임의의 값이 들어가 있겠죠? )

그리고 몰래 jsp 안에 hidden으로 값을 넣어주었고, form태그를 regPopup메소드로 값을 넘겨준 후에,

regPopup 메소드에서는 popup메소드에서 생성해주었던 임의의 값과 jsp안에서 hidden으로 넘겨준 값을 비교합니다. (세션값 비교)

그래서 세션 값이 같으면!! 등록, 등록 후에는 removeAttribute를 사용해서 세션값을 지웠습니다.


이렇게 하게되면, 완벽한 로직을 탈 경우에 입력을 할 수 있습니다.

즉, 입력화면을 들어가면서 입력을 완료할 때까지의 화면을 모두 거치면 정확한 데이터가 들어간다는 겁니다.


해커들은 우리의 사이트에 프록시 검사를 하게 될테고

randomCheck라는 파라미터에 값을 넣어서 넘길겁니다.


근데 어?????


fail.... 실패가 뜨죠. randomCheck는 세션값이기 때문에 우리가 위에서 입력 후 지워줬으니, 이 악의적인 사람은 뚫지를 못합니다.

이미 세션값이 날아갔으니까요!!


위에서 설명한게 이해가 안되실 수 있습니다.


간단히 요약하자면, 

우리는 보통 url뒤에 GET방식이나 POST방식으로 파라미터를 넘기게 되죠.

ex) localhost:8080/fnt/mainpopup.do?score=5&text=좋아요   -> GET방식


하지만 프록시 검사를 하게되면

이런 식으로 보이게 됩니다.

score = 5

test = 좋아요


프록시검사를 하면 post방식으로 넘겼는데도 파라미터가 보이게 되죠.


악의적인 사람들은 이 파라미터를 보고

url뒤에 localhost:8080/fnt/mainpopup.do?score=1&text=망해버려

이렇게 값을 강제로 넣을 수가 있습니다.

실제로 운영서버를 돌리다 이렇게 값이 들어오게 되면 매우 난처할거에요ㅠ-ㅠ

그렇기 때문에 넘겨주는 파라미터에 세션값을 주고 등록하기 전에 검사를 하면 된다는 겁니다!! 


프로젝트하다가 알게된 보안정리 끝


도움이 되셧거나 유익하셧으면 광고나 공감한번 클릭 부탁드립니다!!




반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band