sitelink1 https://gs.saro.me/dev?tn=157 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

자바에서 http/s에 연결할땐 HttpURLConnection, HttpsURLConnection 와 같은 클래스를 쓰게됩니다.

상속관계의 클래스이기 때문에 HttpURLConnection 만 가지고 설명하겠습니다.

1. 세션은 어디에 저장되는가?

세션은 다들 아시다시피 서버에 저장되며, 세션아이디를 통해 인증합니다.

세션아이디는 사물함의 열쇠라고 보시면됩니다.

즉, 처음에 사물함을 배정 받고 사물함의 132번 열쇠를 받았다고합니다.

이후 132번 열쇠를 통해 자신의 사물함에 접근하는 것과 같습니다.

http의 공격기법 중 스크립트 인젝션은 대부분 클라이언트 브라우저에서 이 열쇠를 복사하는 행위라고 보시면됩니다.

(이 세션아이디는 수십자의 임의 문자열이기 때문에 찍어맞추는건 거의 불가능합니다. : 어떤 소프트웨어의 정품 시디키를 찍어서 맞출 확률이라고 보시면됩니다.)

가리사니는 사로 통합 세션서버에서 세션을 가져오게 되며, 세션아이디의 이름 또한 조금 다릅니다.

그럼 WAS마다 또 대부분의 대형서비스처럼 고유의 세션아이디 이름을 가지고 있는 경우 이를 클라이언트에 어떻게 저장하느냐는 문제가 생길 수 있습니다.

이걸 통합하는것이 서버-사이드-쿠키 입니다.

서버의 응답해더에서 Set-Cookie 를 보내게 되며, 클라이언트를 이를 저장해 뒀다가 서버에 요청을 보낼때 Cookie 에 실어서 보내게 됩니다.

예를들어 브라우저에서 서버사이트쿠키를 막는다고하면, 해당 브라우저로 세션을 통한 로그인이 되지 않을 것 입니다.

2. 쿠키를 가져와 보자!

사실 서버에서 언제 세션아이디를 주느냐는 서버를 프로그래밍한사람 마음이기 때문에, 모든 연결에 있어서 응답해더의 Set-Cookie 를 감시하고있어야 합니다.

HttpURLConnection web = ...;
// 모든 연결시마다 항상 새롭게 세팅된 쿠키가 있는지 가져옵니다.
// 주의 Set-Cookie 는 항상 주는것이 아니니 서버에서 보내줄대만 보관해야합니다.
String cookieTemp = web.getHeaderField("Set-Cookie");
if (cookieTemp != null)
{
	cookie = cookieTemp;
}

3. 쿠키를 실어 보내자!

HttpURLConnection web = ...;
// 아까 가져왔던 쿠키를 새로운 연결시에 실어보냅니다.
String cookie = web.setRequestProperty("Cookie", cookie);

여기까지 했다면, 세션이 적용된 결과를 받을 수 있게 됩니다.!!

추신

필자는 예전에 스크립트 인젝션으로 세션아이디가 복사되는것을 보고 세션아이디 + 아이피로 제한하여 접속을 막아야하는 것이 정상이 아닌가 생각한적이 있었습니다. 하지만 모바일 인터넷이 대중화된 이후 아... 이래서 아이피를 같이 확인 하지 않는 구나 라고 생각했습니다.

번호 제목 글쓴이 날짜 조회 수
271 [HttpURLConnection, HttpsURLConnection] 코드참조용 샘플프로젝트 secret 황제낙엽 2019.01.18 0
270 Iterator.next() - NoSuchElementException 황제낙엽 2018.10.28 344
269 OracleJDK 유료화 FAQ (Oracle Java 의 유료화에 대한 어느분의 정리) 황제낙엽 2018.10.11 128
268 메일서버(daum.net)에 POP3를 이용하여 메일 가져오기 예제 file 황제낙엽 2018.10.09 940
267 Sending mail through Java using SMTP of gmail file 황제낙엽 2018.09.13 163
266 Read or get mails using pop in java (using gmail) file 황제낙엽 2018.09.13 861
265 Collections.sort() , Comparator 황제낙엽 2018.08.23 48
264 JavaMail - Connecting Gmail pop3 server. 황제낙엽 2018.08.20 206
263 JavaMail - 네이버 메일 수신하기(POP3) 황제낙엽 2018.08.20 1413
262 JavaMail - POP3로 메일 읽어오기 - 단순샘플 황제낙엽 2018.08.20 107
261 [HttpURLConnection, HttpsURLConnection] Response 로 받은 데이터가 압축되어 있는 경우(gzip, deflate) 황제낙엽 2018.08.16 254
» [HttpURLConnection, HttpsURLConnection] 자바 Http / https 의 결과를 주고받을때 세션을 유지 황제낙엽 2018.08.12 77
259 [HttpURLConnection] 자바(Java) URL 접속 및 세션 관리 file 황제낙엽 2018.08.12 109
258 json-rpc 에서 한글 문제 황제낙엽 2018.08.08 175
257 org.apache.commons.io.FilenameUtils (getExtension) 황제낙엽 2018.04.01 1209
256 이미지 파일의 화면사이즈와 포맷(확장자) 구하기 황제낙엽 2018.04.01 472
255 File 을 다루기 위한 유틸 클래스 file 황제낙엽 2018.02.28 99
254 상수의 데이터 타입 황제낙엽 2018.01.26 33
253 Java에서 User-Agent 파써 사용하기 황제낙엽 2017.11.20 418
252 현재 월,일,시간,분,초 등등 가져오기 황제낙엽 2017.11.02 858