Протокол безопасности запросов python

#python #security #python-requests

#python #Безопасность #python-запросы

Вопрос:

Я хотел бы знать протокол безопасности, используемый библиотекой «requests» в Python. В частности, я хотел бы понять, реализует ли библиотека определенные меры безопасности, такие как экранирование строк, для обеспечения безопасного извлечения содержимого веб-сайта.

Например, допустим, я делаю запрос к некоторому сайту, который выполняет сомнительный js-скрипт на серверной части. Что произойдет, если я выполню следующий код?

 r = requests.get('https://somesite.com')
  

Ответ №1:

Запросы будут просто возвращать строку (и код ответа и тому подобное) с тем, что отвечает сервер. Как следует из названия, библиотека запросов отправляет HTTP-запрос на сервер, который затем отправляет ответ.

Единственная обработка, которую он выполняет для текста ответа, заключается в обработке кодировки, то есть, для обработки Юникода. И если вы хотите, вы даже можете отключить это. Это объясняется в руководстве здесь.

Например, этот код просто напечатает исходный код HTML на сайте example.org:

 r = requests.get('https://example.org/')
print(r.text);
  

Если сервер выполняет сомнительный javascript, никто ничего не может с этим поделать, потому что сервер делает все, что хочет, когда получает запрос. В идеале сервер должен быть запрограммирован так, чтобы не делать этого, но на самом деле это не проблема клиента.

Если сервер возвращает сомнительный javascript, то этот javascript не будет экранирован. Python не будет выполнять javascript только потому, что он находится в строке, но если вы генерируете HTML на основе ответа от запросов, то вам следует убедиться, что генерируемый вами HTML не содержит сомнительного javascript.

Таким образом, рассматривайте ответы, полученные от запросов, как ненадежные входные данные, если вы не доверяете серверу, генерирующему их. Вам не нужно беспокоиться о запросах, выполняющих код с самого сервера, но если сервер предоставляет вам вредоносные данные, и вы передаете эти входные данные чему-то, что будет их выполнять, например веб-браузеру, если это javascript, тогда у вас могут возникнуть проблемы.