Step 6 (S-44888)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14832/step/6

Step 6 (S-44888) 1.png

[00:00 - 00:18] тема форм нам необходимо поговорить про некоторые аспекты безопасности а мы не будем сейчас обсуждать авторизацию авторизацию нас на 1 урок отложено а мы поговорим о том как учитывать текущего пользователя при обработке for


[00:18 - 00:33] и а также поговорим про аватарку а с понятием вам придется столкнуться с вы работаете в общем то более серьезном проекте а так


Step 6 (S-44888) 2.png

[00:33 - 00:51] как сделать проверку пользователя внутри форт а предыдущий формы в которой мы с вами рассматривали в них ничего не было 2 пользователя то есть в коде вью создавался для формы


[00:51 - 01:10] если форма валидно все поля заполнены правильно она просто сохранял а потом кто сохранял форму форму было неважно на практике тот кто сохраняет критически важных к сожалению в джанге а


[01:10 - 01:26] этот момент обойден стороной тостера форма не никак не связано с текущим пользователем а поэтому приходится использовать следующий трюк итак мы создаем


[01:26 - 01:42] класс for какие то поля конкретной пока здесь важны и а я определяю конструктор ну и совсем конструктора тотализатор объекта а


[01:42 - 02:00] мы добавляем обязательный 1 аргумент это юзер то есть при создании формы мы всегда будем указывать а текущего пользователя это текущий пользователь сохраняется


[02:00 - 02:16] в отдельном атрибуте нашего объекта в отдельном свойстве после чего вызывается конструктор суперкласса но это необходимо сделать для того чтобы отработало вся логика for


[02:16 - 02:34] конструктор суперкласса с оставшимися аргументами это как правило данной формы а теперь при вызовах всех методов как то клином а у нас будет доступна переменная текущего пользователя


[02:34 - 02:50] методы clean мы можем проверить вот такую конструкцию из банок то есть если пользователь забанен у него стоит флажок из банков мы бросаем выдоишь


[02:50 - 03:06] доступ ограничен таким образом формы не будет сохранена а например в методе save мы добавляем нас есть а слова клина дата


[03:06 - 03:22] в котором хранятся очищенные данные фактически это то из чего будет создаваться модели мы добавляем а в эти данные автор то есть автор поста и приравниваем к текущему текущему юзеру


[03:22 - 03:37] то есть тот кто создал тот становится ее автора а после чего создаем точно также модель с очищенной да ну вот и все немножко другой способ использовал через мост manager чтобы меньше строчек снимал но суть таже


[03:37 - 03:55] а еще раз повторяю подход в конструкторе переопределяю конструктор формы и передаем а обязательный дополнительный параметр текущего пользователя текущего пользователя мы запоминаем в отдельно в атрибуте формы


[03:55 - 04:14] потом можем его учитывать а во всех методах то есть методы флин в методе save и так далее давайте посмотрим как это делается как то использовать такая форма а во вью а


Step 6 (S-44888) 1.png

[04:14 - 04:32] используется очень просто то есть мы описываем вью здесь а только фрагмент пробежал то есть здесь есть некоторый код здесь есть некоторый код это фрагмент а во 1 нам необходимо добавить декоратор логин required


[04:32 - 04:48] вот этот раз декоратор гарантирую что пользователь сможет прийти на эту игрушку только авторизованным если он будет не авторизован а его отправят на странице логина до тех пор пока он не авторизуется


[04:48 - 05:08] а когда он приходит сюда авторизованном в объекте request будет свойства request точка юзер это общепринятый подход в джанге что текущий пользователь также хранится в объекте request а может туда будет проставлена либо


[05:08 - 05:25] самой системы авторизации джанге либо если вы делаете свою систему авторизации а вы можете туда поставить так или иначе request юзер это по соглашению текущий пользователь соответственно создается форма


[05:25 - 05:42] 1 параметром передается пользователю 2 передаются данные если это не связанная форма то есть это предлагается метод post а то есть когда уже отправляются данные если метод get ну соответственно


[05:42 - 05:59] данные не передаются так просто пользоваться все просто домен в дальнейшем никаких изменений нет ты станешь делать проверка на валидность также делается сохранение а вот таким образом


[05:59 - 06:17] джанго формах учитываются учитываются текущие пользователи а теперь давайте поговорим про такую вещь как сарай а вообще а ц psref расшифровывается как cross site for ж


Step 6 (S-44888) 4.png

[06:17 - 06:32] это относится к теме информационной безопасности но мы это обсудим по сути это даже не уязвимость это 1 из особенностей протокола http


[06:32 - 06:49] а дело в том что при запросе на какой то конкретный домен браузер всегда добавляет все куки которые необходимы к данному домену смотрите что происходит в допустим


[06:49 - 07:07] у нас есть ну так давайте так сделаем разделение на сервер где с нас клиент


[07:07 - 07:26] ну то есть браузер а у нас есть наш сайт наша этом внизу и у нас есть некоторое а то есть нет обработчик на нашем сайте допустим это


[07:26 - 07:45] обработчик добавления поста как предполагалось что этот обработчик работы на нашем сайте есть какой то странице есть форма пользователь сабмитит эту форму отправляет с методом post


[07:45 - 08:02] вместе с этим запросом а передаются его куки то есть его авторизация и собственно говоря на сайте создается post от имени данного пользователя а в чем дело


[08:02 - 08:18] что куки будут передаваться даже если запрос пришел не с нашего сайта представьте что есть какой то другой сайт уязвимой вот он здесь обозначен красным его сервер здесь неважен важна только что моя страничка


[08:18 - 08:33] допустим злоумышленник а как то умудрился разместить на этом сайте картинку у которой в ссср прописан адрес адрес нашего


[08:33 - 08:49] наши вот этой функции то есть вместо картинки там написано примерно следующее ну допустим нас наш сайт называется сайт дот ком сойдет com здесь прописано


[08:49 - 09:07] картинки sided com blog этот вопрос title равняется что то там текст равняется


[09:07 - 09:26] что там а когда вы зайдете на сайт а злоумышленник что вероятно попытается вас туда привести к каким то образом браузер пытается загрузить вот эту картинку


[09:26 - 09:44] ну что браузеры знает что на самом деле здесь указан на картинке обработчика добавление паста произойдет get запрос на другой домен но в принципе это вполне нормальный запрос он разрешен


[09:44 - 10:01] а с точки зрения браузера передаст все необходимые кодеки поскольку запрос идет на ваш домен а браузер передает куки для вашего домена для сайта дот ком то есть авторизацию на вашем сайте в результате чего будет


[10:01 - 10:19] вызван обработчик добавления поста с вашей авторизации с заголовком и текстом который указал злоумышленник а по факту вы даже ничего не увидишь эта картинка не загрузится но на вашем сервере с работает функция добавления поста


[10:19 - 10:34] а последствия могут довольно неприятными то есть от вашего лица без вашего ведома на сайте произошло какое то действие например был некоторый post желательно содержание


[10:34 - 10:53] поставь лайк каком то другом посту которое вы не хотели лайкать и тому подобное в этом суть представили местом здесь является во 1 уязвимость произвольного сайта от которой невозможно защититься


[10:53 - 11:13] то есть уязвимости на других сайтах они вне вашей зоны а влияния и а различимость функция добавления поста потому что она смогла принять такой запрос как можно бороться с красавец


[11:13 - 11:30] ресурсов он сжирает как можно бороться так ссср вариант номер 1 самый простой только по запросу а поскольку в данном примере вот этот запрос вредоносные он идет с методом get


Step 6 (S-44888) 5.png

Step 6 (S-44888) 6.png

[11:30 - 11:49] казалось бы если мы запретим get запросы а в обработчике добавления поста ну то есть когда мы а не после с выполняя какие то действия мы проверяем что метод запросы на пост если мы запретим герб то казалось бы проблема решена


[11:49 - 12:04] ну не совсем так это зависит от степени уязвимости сайта а в принципе если у злоумышленника есть более полный доступ к тому сайту может сделать и по запросу


[12:04 - 12:22] это несколько более сложно потребуют внедрения не картинок скажи пожалуйста но в тоже возможно то есть это метод проверка post какой очень не совсем надежный вариант номер 2


Step 6 (S-44888) 7.png

[12:22 - 12:41] проверка заголовка референс заголовки рефератов указывается уровню предыдущего запроса то есть откуда был произведен запрос в случае с нашим а сайтом заголовок реферера будет содержать домен сайта дот ком


Step 6 (S-44888) 8.png

[12:41 - 12:56] в случае с ц сразу запросам заголовок реферера будет содержать а заголовок другого сайта а это способ чуть получше но тоже не совсем надежный потому что некоторые


Step 6 (S-44888) 9.png

[12:56 - 13:11] а кто собирает заголовок реферера заголовок реферера а не будет ходить если сайта работает 1 спец по степи то есть в некоторых случаях а


[13:11 - 13:30] нормальный пользователь которых вы хотели бы обслужить пройдет без заголовка веществ а это довольно маловероятна ситуация тем не менее она есть вариант номер 3 вариант надежной это проверка что за кольца


[13:30 - 13:47] но это довольно длинная строка состоящая из случайных символов которая для каждого пользователя отличается то для каждого пользователя она различна а во 1 это строка ставится вам скуки


[13:47 - 14:05] так же как а так же как авторизация а во 2 эта строчка выводится в виде скрытого импорта в форме для этого есть специальный того чтобы заяц talking а


[14:05 - 14:23] таким образом когда вы получаете нормальный запрос от вашей формы он приходит и в post параметрах и скуки а когда вы получаете запрос от злоумышленника то есть вот вот этот запрос


Step 6 (S-44888) 10.png

[14:23 - 14:39] соротокина придет только в фоке потому что злоумышленник не может угадать током а у него не может подобрать куки браузера сгенерит автоматически а


[14:39 - 14:56] get параметр злоумышленник подобрать не сможет таким образом по не совпадение сроков токена а вы можете определить что происходит за сарая фото умолчанию есть специальное меню


Step 6 (S-44888) 11.png

[14:56 - 15:11] то есть специальный код который проверяется с ростокино для всех после я тут в принципе этот код работает по умолчанию поэтому


[15:11 - 15:27] все формы за защищены от 40 так единственное что нужно делать это в своих формах если вы сами добавлять вот такой вот так


[15:27 - 15:31] в остальном все должно работать без вашего участия