Форум сайта python.su
0
Добрый день.
Странный json ответ (или что то не знаю):
>>>r = requests.get(url, params=data) >>>r.text '{} && {"tokenResponse":{"status":{"code":"200","message":""},"data":{"token":"fb34ec6f-37a8-4eb3-bb11-e26587f5fa2d","expiredIn":"25.09.2018 14:32"}}}' >>> r.json() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3/dist-packages/requests/models.py", line 850, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python3.5/json/__init__.py", line 319, in loads return _default_decoder.decode(s) File "/usr/lib/python3.5/json/decoder.py", line 342, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 1 column 4 (char 3)
>>> r.headers {'Cache-Control': 'no-cache, no-store, max-age=0', 'Date': 'Tue, 25 Sep 2018 08:07:13 GMT', 'Content-Type': 'application/json;charset=UTF-8', 'Server': 'Apache-Coyote/1.1', 'Pragma': 'no-cache', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Language': 'en-US', 'Transfer-Encoding': 'chunked'}
Офлайн
221
ivnИ вы думаете что это валидный JSON ? Нет, не валидный.
'{} && {“tokenResponse”:{“status”:{“code”:“200”,“message”:“”},“data”:{“token”:“fb34ec6f-37a8-4eb3-bb11-e26587f5fa2d”,“expiredIn”:“25.09.2018 14:32”}}}'
Офлайн
0
Я это понимаю, но не пойму зачем в таком виде возвращать? и что делать с этим делом?
Убирать лишнее и пробовать строку перевести в dict? если да, то как например?
Спасибо.
Офлайн
1
ivnЭто делают, чтобы JSON был невалидным в качестве JavaScript кода.
но не пойму зачем в таком виде возвращать?
ivn
если да, то как например?
>>>import json >>>json.loads(r.text[6:])
Офлайн
0
Papa_SvinМожно как то простыми словами пояснить, что это за атака JSON Hijacking?
Офлайн
1
ivnПопробую, допустим, есть какой-то сервис, который отдает некую приватную информацию в виде JSON, например http://myverysecret.com?action=get_all_my_info&format=json
Можно как то простыми словами пояснить, что это за атака JSON Hijacking?
<html> <head> <script src="http://myverysecret.com?action=get_all_my_info&format=json" type="text/javascript"></script>
Офлайн
0
Papa_SvinСпасибо, стало яснее.
Офлайн
1
ivnДа сколько угодно, только он не узнает о том, что браузер получил от сервиса, потому что невалидный json вызовет исключение и ничего дальше не случится, код который должен был “перехватить” объект не сработает, да и самого объекта не будет создано в пространстве документа.
А если хакер в курсах этих артефактов? -)
Офлайн
1
ivnЭто зависит от того, что за токен. Токен - это просто некий случайный ключ, который подтверждает, что я общаюсь именно с тем ресурсом, которому этот токен передал. Как именно авторизация устроена на стороне сервиса, в каком виде требуется передавать токен в запросе - это проблемы АПИ сервиса. Это наверняка должен быть какой-то хидер, хотя могут его ждать и в теле запроса.
Получаю (с помощь логина, пароля, которые указываются в params) токен и время его актуальность в формате JSON.
Офлайн
0
Papa_Svinвозвращается в теле:
>>>r = requests.get(url, params=data) >>>r.text '{} && {"tokenResponse":{"status":{"code":"200","message":""},"data":{"token":"fb34ec6f-37a8-4eb3-bb11-e26587f5fa2d","expiredIn":"25.09.2018 14:32"}}}'
Офлайн