BG Development


Страници: (6) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Прикачване на файлове
johnfound
Публикувано на: 28-09-2017, 09:00
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5023
Регистриран на: 27.05.04



Правя сега прикачване на файлове към постовете за AsmBB.

Имам ограничение по размер (не толкова за безопасност, а заради трафика).

Прикачваните файлове се свалят винаги с "Content-type: application/octet-stream" и "Content-Disposition: attachment;"

Файловете се пазят в БД и никога не могат да се появят във файловата система на сървъра.

Какво друго за да не може да се атакува по този вектор?


--------------------
asm32 - Приложно програмиране на асемблер.
PMEmail PosterUsers Website
Top
Bender
Публикувано на: 28-09-2017, 09:03
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4724
Регистриран на: 19.06.14



Сложи някакъв лимит за брой атачмънти на едно качване ако нямаш.

А защо не ги пазиш на файловата система ?


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
johnfound
Публикувано на: 28-09-2017, 09:07
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5023
Регистриран на: 27.05.04



QUOTE (Bender @ 28-09-2017, 10:03)
А защо не ги пазиш на файловата система ?

Ами защото всички данни за постовете ги пазя в БД. Иначе как ще пазя консистентността на данните?

И освен това, външни файлове във ФС на сървъра моментално изисква специални мерки за безопасност.

Това мнение е било редактирано от johnfound на 28-09-2017, 09:08


--------------------
asm32 - Приложно програмиране на асемблер.
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 28-09-2017, 09:20
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Въпроса за сигурността касае по скоро това как проверяваш това което се качва дали отговаря на твоите условия.
Да речем, как проверяваш размера? Как проверяваш типът на файловете (ако ще сложиш подобно ограничение).

И един съвет. Хубаво е да помислиш за механизъм при който клиентът да може да получава информация за прогресът на качване. Така може да се реализира асинхронно качване с прогрес индикатор.
PMEmail Poster
Top
johnfound
Публикувано на: 28-09-2017, 09:29
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5023
Регистриран на: 27.05.04



Ограничението на размера е глобално – реално е ограничение на размера на POST заявката и се обработва на много ранен етап на обработка на FastCGI протокола.

Типовете на файловете се ограничават в другите форуми именно от гледна точка на безопасност. При мене би трябвало да няма нужда от такива ограничения. Или поне не искам да въвеждам преди да разбера как това има връзка с безопасността.



--------------------
asm32 - Приложно програмиране на асемблер.
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 28-09-2017, 10:07
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Проблемът е точно в тия детайли. Ако разчиташ на http хедърите за подобна валидация с пробит моментално.
Другия проблем е ако правиш директно сервиране на подобен файл. Затова обикновено се прави сървиз който го сервира а не се предоставя директен достъп. При теб това е реализирано заради съхранението на файла в базата данни.
Само трябва да си прецениш, дали не е по-удачно да ползваш файловата система или nosql база данни за съхранение на файловете. Така няма да натоварваш релационната база данни която реално е сърцето на системата ти.
PMEmail Poster
Top
johnfound
Публикувано на: 28-09-2017, 10:20
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5023
Регистриран на: 27.05.04



QUOTE (thrawn @ 28-09-2017, 11:07)
Проблемът е точно в тия детайли. Ако разчиташ на http хедърите за подобна валидация с пробит моментално.

А по-подробно? Аз лично не си представям как ще стане, даже ако хедърите са фалшиви. В най-лошия случай, файла ще е повреден.


--------------------
asm32 - Приложно програмиране на асемблер.
PMEmail PosterUsers Website
Top
ici
Публикувано на: 28-09-2017, 10:35
Quote Post


Group Icon
Име: Ивайло Илчев ики
Група: VIP
Ранг: Почетен член

Мнения: 14831
Регистриран на: 06.06.04



Типа на файловете се проверява по магически начин. Разширение и хедери нямат значение. icon_idea.gif


--------------------
Everything you can imagine is real. Pablo Picasso
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 28-09-2017, 10:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Да речем, името се набива като етикет в базата данни (така можеш да имаш файлове с едно и също име да речем). Така не ти трябва проверка за разширението. Услугата която сервира намира файлът по id да речем (или по id + име) и го сервира директно (най-вероятно си разписал нещо подобно).

За размер - файлът се копира в темп директория и вече се проверява дали размерът е в рамките на ограничението. Тук може би има резон да ползваш Content-Length но си зависи как работи сървърната част.

Най-сложно е с проверката за тип. Обикновено се ползват външни тулсове като линукския file или се проверяват хедърите в самия файл (ако формата има такива). Но така или иначе, тук могат да те пробият винаги (на теория). Затова не бива да даваш директен достъп до качения файл (пак се връщаме на сървиз който да го сервира).

Проверките се усложняват и от фактът, че някой формати поддържат включване на коментари - а тия коментари могат да са произволен текст (включително и скрипт). Така може да се качи файл който да отговаря на всичките ти проверки и пак да съдържа изпълним код. Та пак се връщаме на сървиз.

PMEmail Poster
Top
johnfound
Публикувано на: 28-09-2017, 11:11
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5023
Регистриран на: 27.05.04



Според моето разбиране, в момента в който файла бъде записан във файловата система на сървъра, се отваря кутията с възможни експлойти. И списъка с необходими проверки и валидации става една тетрадка от 100л голям формат. Тоест всякакви решения, в които прикачваният файл, дори за момент съществува като обикновен файл на сървъра се отхвърлят като ненадеждни.

Греша ли?

В момента, при мене файла, както идва от POST заявката, директно заминава в blob поле в базата данни. Обратно, когато потребителя го тегли – от блоб полето, директно заминава по жицата.

Въпросът е, при това положение, възможна ли е атака чрез прикачваните файлове, и ако да, то как точно?


--------------------
asm32 - Приложно програмиране на асемблер.
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (6) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0