데이터과학 삼학년

request.values 로 body를 분석( base64 encode --> decode) 본문

Web

request.values 로 body를 분석( base64 encode --> decode)

Dan-k 2020. 3. 9. 17:52
반응형

WEB 개발에서 로그인 혹은 사용자가 어떤 action을 취하였을 때 누가 뭘 했는지 알고 싶다.

그럴때 사용하는 것이

flask.request.values 이다!

 

falsk.request.values를 얻게 되면 각 형태에 따라 dictionary 형태의 파일을 불러올 수 있다.

현재 내가 작업하고 싶은 것이 

'SAMLResponse' 의 key값을 받아오고 싶다면

from flask import request

body = str(request.values['SAMLResponse'])

로 불러온다.

이결과는 아마 아래 사진처럼 알아볼수가 없다.

--> 이것은 base64 로 encoding 된 형태이기 때문이다.

그렇다면 이것을 사람이 알아볼수 있게 표현하려면

base64로 decode 하면 된다

from flask import request
import base64

body = str(request.values['SAMLResponse'])
body = base64.b64decode(body)
print(body)

이렇게 decode를 해주면 아래사진 처럼 사람이 볼수 있는 형태의 xml 파일이 된다. 

이 xml 파일을 가지고

접속한 user의 email이 궁금하다.

xml parser 를 활용해서 찾아내면 된다.

import xml.etree.ElementTree as ET

tree = ET.fromstring(body)
tag_tuple = [(i.tag, i.text) for i in tree.iter()]
print(tag_tuple)

이렇게 tag_tuple을 통해서 내가 찾기 원하는 tag를 입력해서 값을 뽑아내면된다.

email 주소를 알아내기 위해 아래처럼 코드를 입력하여 접속한 유저의 email 정보를 얻을 수 있다.

import xml.etree.ElementTree as ET

tree = ET.fromstring(body)
email = [i.text for i in tree.iter() if i.tag =='{urn:oasis:names:tc:SAML:2.0:assertion}NameID'][0].strip() 
print(email)
# xx@aaa.com

 

접속한 user의 행동을 파악하기 위한 좋은 방법이고, 이를 체계적으로 시간별 db에 저장해 놓으면 새로운 인사이트를 얻을 수 있을 것이다.

728x90
반응형
LIST

'Web' 카테고리의 다른 글

AJAX란?  (0) 2020.04.19
NGINX 504 Gateway Time-out 에러와 해결방법  (0) 2020.03.11
로그인 기능 추가 --> 다 만든 web에 로그인만 입히기  (0) 2020.03.06
flask request  (0) 2020.03.05
flask http 요청 핸들러  (0) 2020.03.05
Comments