BG Development


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

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


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

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



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

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

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

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

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


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



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

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



1. Жителите на Кириатиарим дойдоха, взеха ковчега Господен и го донесоха в къщата на Аминадава, на хълма, а сина му Елеазара посветиха да пази ковчега Господен.
2. От оня ден, когато ковчегът остана в Кириатиарим, се измина много време - двайсет години. И целият Израилев дом се обърна към Господа.
3. И рече Самуил на целия Израилев дом думайки: ако от все сърце се обръщате към Господа, махнете из средата си чуждоземните богове и Астартите, разположете сърцето си към Господа и Нему Единому служете, и Той ще ви избави от филистимски ръце.
4. И Израилевите синове отмахнаха разните Вааловци и Астарти и почнаха да служат само Господу.
5. И рече Самуил: съберете всички израилтяни в Масифа, и аз ще се помоля Господу за вас.
6. И събраха се в Масифа и черпеха вода, изливаха я пред Господа, и постиха оня ден, думайки: съгрешихме пред Господа. И Самуил съдеше синовете Израилеви в Масифа.
7. Когато филистимци чуха, че синовете Израилеви се събрали в Масифа, филистимските владелци излязоха против Израиля. Израилтяните, като чуха това, уплашиха се от филистимци.
8. Тогава Израилевите синове рекоха на Самуила: не преставай да викаш към Господа, нашия Бог, за нас, та да ни спаси от филистимски ръце. (И Самуил рече: не може да бъде, аз да отстъпя от Господа, моя Бог, и да не викам за вас в молитвите си!)
9. И Самуил взе едно агне сукалче и го принесе (с целия народ) всесъжение Господу; викна Самуил към Господа за Израиля, и Господ го чу.
10. И когато Самуил принасяше всесъжение, филистимци дойдоха да се бият с Израиля. Но тоя ден Господ загърмя със силен гърмеж над филистимци и напрати върху тях ужас, и те бидоха поразени пред Израиля.
11. Израилтяните излязоха от Масифа, гониха филистимци и ги разбиваха до под Ветхор.
12. И Самуил взе един камък и го тури между Масифа и Сен, и го нарече Авен-Езер *, като каза: до това място ни помогна Господ.
13. Тъй бидоха усмирени филистимци и не идваха вече в пределите Израилеви; и ръката Господня беше върху филистимци през всички дни на Самуила.
14. И бидоха върнати на Израиля градовете, които филистимци бяха превзели от Израиля, от Акарон чак до Гет, и Израил освободи пределите им от филистимски ръце, и настана мир между Израиля и аморейците.
15. И Самуил беше съдия над Израиля през всички дни на живота си;
16. и всяка година ходеше и обикаляше Ветил, Галгал и Масифа и съдеше Израиля по всички тия места;
17. после се връщаше в Рама, понеже там беше къщата му, и там съдеше той Израиля и там построи жертвеник Господу.
* Камък на помощта.



Това мнение е било редактирано от Bender на 07-01-2018, 19:50
PM
Top
johnfound
Публикувано на: 28-09-2017, 09:07
Quote Post


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

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



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

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

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

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


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



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

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



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

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


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

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



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

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



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



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

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



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


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

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



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

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


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


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

Мнения: 15053
Регистриран на: 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



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

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



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

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

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

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

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


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

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



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

Греша ли?

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

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


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
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