문제 상황


예를들어...


서버에 여러 문서들이 있고, 이 문서들의 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



+ Recent posts