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