Заштитите своју веб локацију од веома уобичајене безбедносне рупе помоћу Дјанго-овог уграђеног ЦСРФ-а.

Дјанго је Питхон веб оквир који можете користити за прављење безбедних веб апликација. Нуди многе функције које помажу програмерима у погледу безбедности. Једна од ових карактеристика су ЦСРФ токени, неопходни за заштиту образаца од напада фалсификовања захтева са више локација.

Шта је ЦСРФ токен?

ЦСРФ токен је безбедносна функција која штити веб апликације од Напади фалсификовања захтева на више локација (ЦСРФ).. Омогућава серверу апликација да провери да ли је образац послат из аутентичног претраживача или га је хакер кривотворио.

ЦСРФ токени су улази у форму који прате корисничку сесију. Веб локација оквир веб апликација на страни сервера обично генерише ЦСРФ токене за сваку јединствену корисничку сесију. Сервер проверава да ли је токен исправан сваки пут када корисник поднесе образац. ЦСРФ токени се углавном састоје од насумичних низова и бројева, што њихове вредности чини непредвидивим.

Генерисање ЦСРФ токена у Дјангу

Дјанго'с гет_токен() функција насумично генерише ЦСРФ токене. Да бисте пронашли ову функцију, идите на цсрф.пи фајл унутар вашег Питхон виртуелно окружење. Структура фолдера би требало да изгледа овако:

енв/

└── Либ/

└── сите-пацкагес/

└── дјанго/

└── средњи софтвер/

└── цсрф.пи

Унутар ове датотеке, наћи ћете гет_токен() функција, која враћа токен. Дјанго користи маскирање података да заштити вредност токена од хакера.

Дјанго подразумевано омогућава ЦСРФ заштиту за вашу веб локацију додавањем дјанго.миддлеваре.цсрф. ЦсрфВиевМиддлеваре у МИДДЛЕВАРЕ списак ваших сеттингс.пи фајл. Све што треба да урадите је да додате {% цсрф_токен %} своме ПОШТА форме. Без додавања {% цсрф_токен %}, добићете а 403 Забрањено) грешка када пошаљете образац.

Када додате {% цсрф_токен %} у ваш образац, аутоматски креира скривено поље за унос са именом цсрфмиддлеваретокен, који садржи вредност маскираног ЦСРФ токена. Сервер користи ову вредност да утврди да ли је подношење обрасца аутентично. Можете да проверите вредност овог скривеног поља тако што ћете погледати извор странице или користити алатке за програмере вашег претраживача.

Како ЦСРФ токени раде у Дјангу

Када покренете своју веб локацију са формуларом, Дјанго аутоматски креира а колачић претраживача зове цсрфтокен. Овај колачић прати активности корисника на сајту и јединствено идентификује сваког корисника.

Када корисник пошаље образац, сервер упоређује вредност колачића са вредношћу цсрфмиддлеваретокен у скривеном пољу за унос. Ако се ове вредности поклапају, сервер ће успешно обрадити образац, у супротном ће произвести грешку.

На први поглед, вредности колачића и цсрфмиддлеваретокен изгледа другачије. Ово је намерно и додаје додатни слој заштите ЦСРФ токену. ЦСРФ токен се пореди са колачићем овако:

  • Тхе гет_токен() функција маскира ЦСРФ токен пре него што га пренесе у поље за унос.
  • Када се образац пошаље, ЦСРФ токен се демаскира уз помоћ тајног кључа у датотеци за подешавања.
  • Демаскирани токен се упоређује са колачићем сесије.
  • Ако су вредности исте, образац се обрађује. Ако није, сервер враћа грешку.

Да би спречио хакере да украду ваш ЦСРФ токен, Дјанго га обнавља сваки пут када започне корисничку сесију.

Креирање прилагођених ЦСРФ токена

Иако Дјанго олакшава заштиту ваших образаца једноставним додавањем {% цсрф_токен %}, такође је могуће генерисање ЦСРФ токена и њихово ручно додавање у ваше обрасце. Да бисте то урадили, увезите гет_токен() функција:

из дјанго.миддлеваре.цсрф увоз гет_токен

По вашем мишљењу, ЦСРФ токен можете генерисати овако:

дефвиев_наме(захтев):
цсрф_токен = гет_токен (захтев)

# изводи логику приказа
контекст = {
"цсрф_токен": цсрф_токен
}

повратак изнети (захтев, 'апп_наме/темплате.хтмл', контекст=контекст)

У свој ХТМЛ шаблон можете ручно да укључите своју улазну ознаку и додате цсрф_токен на то овако:

<формуметодом="ПОШТА" >
<улазнитип="сакривен"име="цсрфмиддлеваретокен"вредност=„{{ цсрф_токен }}“>
{{форм.ас_п}}
<дугметип="прихвати"класа="бтн бтн-оутлине-сецондари">Додај књигудугме>
форму>

Алтернативно, можете да генеришете скривено поље за унос из својих погледа на следећи начин:

дефиоур_виев(захтев):
цсрф_токен = гет_токен (захтев)
цсрф_токен_хтмл = ''.формат (цсрф_токен)

# изводи логику приказа
контекст = {
"цсрф_токен": цсрф_токен_хтмл
}

повратак изнети (захтев, 'апп_наме/темплате.хтмл', контекст=контекст)

Затим га можете додати у свој ХТМЛ шаблон овако:

<формуметодом="ПОШТА" >
{{ цсрф_токен_хтмл|сигурно }}
{{форм.ас_п}}
<дугметип="прихвати"класа="бтн бтн-оутлине-сецондари">Додај књигудугме>
форму>

Ако желите да у потпуности контролишете ЦСРФ заштиту свог обрасца, то можете да урадите тако што ћете упоредити свој ЦСРФ токен са колачићем ускладиштеним у прегледачу. На основу резултата поређења, можете управљати подношењем обрасца како год желите. Ево примера:

из дјанго.схортцутс увоз дати, пружити
из дјанго.миддлеваре.цсрф увоз гет_токен, _унмаск_ципхер_токен
из дјанго.утилс.црипто увоз константно_време_упоређивање

дефиоур_виев(захтев):
# Генеришите прилагођени ЦСРФ токен
цсрф_токен = гет_токен (захтев)
цсрф_цоокие = захтев. ЦООКИЕС.гет('цсрфтокен')

# демаскирај цсрф токен
унмаскед_цсрф_токен = _унмаск_ципхер_токен (цсрф_токен)

# Упоредите жетоне
аконе цонстант_тиме_цомпаре (унмаскед_цсрф_токен, цсрф_цоокие):
# Поступите у случају када се токени не поклапају
проћи
друго:
# Бави се случајем где се токени поклапају
проћи

# Рендерујте шаблон
контекст = {
'цсрф_токен': цсрф_токен,
}

повратак изнети (захтев, 'апп_наме/темплате.хтмл', контекст=контекст)

Овај исечак кода преузима цсрф_цоокие из ХТТП објекта захтева. Затим користи _унмаск_ципхер_токен() функција за демаскирање цсрф_токен.

Условни исказ упоређује вредности преузетих цсрф_цоокие и демаскираним цсрф_токен. Ово поређење користи константно_време_упоређивање функција за заштиту од временских експлоатација. Можете написати своју логику на основу резултата поређења.

Онемогућавање ЦСРФ заштите у Дјангу

Иако Дјанго даје подразумевану одредбу за ЦСРФ заштиту, можете је онемогућити у свом пројекту ако желите. Постоје два начина да то урадите:

  • Онемогућавање ЦСРФ заштите на целој веб локацији.
  • Онемогућавање ЦСРФ заштите на одређеном приказу.

Онемогућавање ЦСРФ заштите на целој веб локацији

Да бисте онемогућили Дјангову ЦСРФ заштиту на вашој веб локацији, једноставно морате да уклоните ЦСРФ међуверски софтвер из датотеке поставки. У датотеци са подешавањима пронађите листу под називом МИДДЛЕВАРЕ. Унутар листе потражите ово:

'дјанго.миддлеваре.цсрф. ЦсрфВиевМиддлеваре',

Када га пронађете, требало би да га уклоните из свог кода за Дјангову подразумевану ЦСРФ заштиту да бисте је онемогућили.

Онемогућавање ЦСРФ заштите на одређеном приказу

Ако желите само да онемогућите ЦСРФ заштиту на одређеном Дјанго приказу, користите @цсрф_екемпт декоратер. Ево исечка кода за демонстрацију:

из дјанго.виевс.децораторс.цсрф увоз цсрф_екемпт

@цсрф_екемпт
дефвиев_наме(захтев):
# изводи логику приказа
проћи

Тхе @цсрф_екемпт декоратер је само један од неколико који се односе на ЦСРФ заштиту у Дјангу. О осталом можете прочитати на Дјанго ЦСРФ референца.

Немојте онемогућавати ЦСРФ заштиту на својој веб локацији

Иако Дјанго то омогућава, онемогућавање Дјанговог уграђеног ЦСРФ механизма заштите се не препоручује. То ће учинити вашу веб локацију рањивом на ЦСРФ нападе и на крају негативно утицати на кориснике ваше апликације.

Осим ако нисте искусан програмер који зна како да имплементира прилагођени ЦСРФ заштитни механизам, требало би да радите са алтернативом коју нуди Дјанго.