URL parameter 암호화
문제 상황
예를들어...
서버에 여러 문서들이 있고, 이 문서들의 id값은 0001~9999처럼 숫자로 이루어져 있다.
접근할 수 있는 url은 abc.com/doc/{id} 형태이다.
유저A에게 url을 직접 알려주는 방식으로, 오직 0001번 문서에만 접근하도록 하고 싶다.
그래서 abc.com/doc/0001이라는 url을 알려주었는데, 이 똑똑한 유저A가 url을 변경하여 abc.com/doc/0002에 접근해버렸다!
이렇게 다른 문서의 경로를 추측하여 훔쳐보는 경우를 방지 하려면 어떻게 해야 하는가?
즉, 파라미터를 감추려면 어떻게 해야 하는가?
해결 방법
파라미터에 대해 인코딩-디코딩, 혹은 암호화 기술을 이용한다.
다시 말하자면,
url을 생성할 때, 파라미터 원래의 값을 인코딩 혹은 암호화 해서 유저에게 제공하고,
서버는 해당 url로 접속시도가 있을 경우, 인코딩 혹은 암호화 된 파라미터를 디코딩 혹은 복호화 해서 식별한다.
예시)
기존 url: abc.com/doc/1234
인코딩/암호화 방식 |
결과 | 변환 사이트 |
Base64 |
abc.com/doc/MTIzNA== | http://ostermiller.org/calc/encode.html |
Hex |
abc.com/doc/31323334 | http://ostermiller.org/calc/encode.html |
MD5 |
abc.com/doc/81dc9bdb52d04dc20036dbd8313ed055 | 암호화: http://www.md5encryption.com 복호화: http://md5decryption.com |
SHA-1 | abc.com/doc/7110eda4d09e062aa5e4a390b0a572ac0d2c0220 | 암호화: http://www.sha1-online.com 복호화: https://hashkiller.co.uk/sha1-decrypter.aspx |
이렇게 인코딩/암호화를 하면 일반인들은 url을 보고 파라미터 추측이 불가능하다.
그러나 이 포스팅을 읽는 독자를 포함하여, 우리 엔지니어(혹은 개발자)들은
복호화를 통해 원래 값을 유추하고, 또 다른 파라미터 값을 만들어 내 다른 문서에 접근이 가능할 것이다.
그래서 이 방법은 저수준의 보안이 필요할 때만 사용하도록 하자.
LINK
Python에서 Base64 Encoding/Decoding 하기 http://cbengineer.tistory.com/4