Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:14 01.07.24 
Компютри и Интернет
   >> PHP
Всички теми Следваща тема *Кратък преглед

Тема големина на файл през URLнови  
Автор Viper X (just a snake...)
Публикувано05.08.05 12:04



съжелявам за неточното заглавие, не знам как да го формулирам :)

Искам по зададен URL от вида например
http://somehost.com/blabla/asd.jpg
да копирам файла asd.jpg на сървъра, но искам да има проверка за големината на въпросния файл преди даунлоуда, за да не източи някой мизерник много трафик като зададе някой голям файл..

в хедъра на отговора на HTTP заявката пристига поле
Content-Length
което е точно това което ми трябва, обаче как да го взема е въпроса?
става дума за php 4, така че get_headers() не върши работа..

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



Тема Re: големина на файл през URL [re: Viper X]  
Автор Mopдpeд (seeker)
Публикувано05.08.05 15:14



В общия случай нема как да стане.
В частния, може и да имаш късмет ;)

Има пет, не, седем признака дали хттп сервера е свършил да ти праща тяло на отговора си, само два от тях касаят колко байта (различно от нула) се очаква да минат по мрежата, и само един от тези два механизма знае това предварително, споменатия от тебе Content-Length.

---------------
Отметка:
Сигурен ли си, че не можеш да минеш с файл ъплоад?
1) Ограничаваш размера в ХТМЛ-а, имаше там нещо дето се пише в тага, не го знам наизуст
2) Ограничаваш размера от страна на сървъра с настройка на пхп-то
3) Проверяваш размера след като се е свалил файла ($_FILES['userfile']['size']). Това го правим, щото обикновено искаме по-тесни ограничения от глобалното ограничение за размер на качен файл. Ограничението в 2) те пази от мега-големи ъплоади, разлика от няколко Мб ги поема 3)

Виж в ръководството Chapter 3. Handling file uploads
------------

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

Колкото до това КАК да вземеш хедър от отговора - не знам, аз го правя ръчно (пиша, т.е. писах, библиотека за ХТТП - палиш сокет, пускаш рекуест, чекаш респонс). Не съм сигурен дали съществуващите алтернативи - разните там цурл и т.н. дават такъв тип контрол.

Имаш два варианта - HEAD рекуест, но после в зависимост от сървъра може да се наложи да палиш втори сокет, или направо GET рекуест и ако не те кефи нещо, гасиш сокета и си легаш ;)

За какво ти е тва нещо и колко е сериозно? Да го подкараш да работи съвместимо с ХТТП 1.0 и 1.1 е немалка играчка, ако е некой дребен проект, по-добре мисли за алтернативи :)

Портал за почитателите на Толкин - връзки и новини



Тема Re: големина на файл през URLнови [re: Mopдpeд]  
Автор Viper X (just a snake...)
Публикувано05.08.05 15:58



мерси за обемния отговор

пиша доста голям проект - част от него е, че потребителите, които се регистрират могат да имат аватари.. та има два начина да качиш аватар - ъплоуд от компютъра на човека и чрез пействане на юрл на снимка - искам да ги има и двата варианта, но като някой пейстне юрл на снимка все пак прибирам снимката на моя сървър

направих го точно както каза - ако сървъра не върне content-length хедър то отказвам трансфера.. ако продължи да бълва информация след като съм прочел толкова байта, колкото е казал че е снимката - също прекъсвам трансфера.

иначе хедърите ги вземам с функцията get_headers() дето е постната в бележките от 15 юни 2005 година тука:
http://bg.php.net/manual/en/function.get-headers.php

сигурно можех и сам да напиша нещо подобно, ама след като вече са го написали хората, защо да откривам пак топлата вода



Тема Re: големина на файл през URLнови [re: Viper X]  
Автор Mopдpeд (seeker)
Публикувано05.08.05 16:30



А, добре че ме подсети, такова нещо съм виждал точно във връзка с аватари, виж как е направено в пхпбб (да сравниш идеите де, не ги рекламирам като пример за писане на код. ;) Все пак те биха се сблъскали с доста повече проблеми от един сам човек, аз доста полезни неща научих от кода на мозила примерно (но и аз сам се натресох на някои, примерно ИИС5 на любимите ни микромеки, дето казва, че са хттп/1.1, но не праща connection: close когато трябва, или сървърите на Yahoo, които не знам какво са ги направили, ама връщат тяло на респонс когато не трябва, при това без да му окажат дължината)

Не бях видял функцията в коментарите, за която говориш, но сега я погледнах и има няколко проблема, дето е по-добре да се оправят:

1) Да се добави Connection:close в рекуест хедъра (не е задължително за хттп/1.0, но е учтиво ;)
2) Сокета да се затвори като приключи работа, иначе потенциално могат да те ДОС-нат ако имаш бавна операция след викането на функцията
3) Сложи един sanity check да кажем да не допускаш повече от 100 хедъра в респонс, щото така пак могат да ти успят сървъра

Портал за почитателите на Толкин - връзки и новини



Тема Re: големина на файл през URLнови [re: Mopдpeд]  
Автор Viper X (just a snake...)
Публикувано05.08.05 17:13



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

fclose обаче наистина можем да добавим :)



Тема Re: големина на файл през URLнови [re: Viper X]  
Автор Blake (извънземен)
Публикувано05.08.05 17:14



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

Just a genius



Тема Re: големина на файл през URLнови [re: Blake]  
Автор Viper X (just a snake...)
Публикувано05.08.05 17:39



ако промениш картинката на другия сървър, без да укажеш отново през контрол панела - разбира се нищо няма да стане :)
това ще е указано в хелпа под поленцето, ще пише нещо от рода на "въведете юрл на снимка, която ще бъде копирана на нашия сървър, максимум файл сайз ала бала, максимум ширина , максимум височина, ако размерите на снимката са по-големи ше бъде рескалната ..... " и т.н. като някой ше трябва да го направи юзърфрендли след това тоя надпис ама нема да съм аз :)



Тема Re: големина на файл през URLнови [re: Viper X]  
Автор Mopдpeд (seeker)
Публикувано05.08.05 22:01



но за да ти точи така трафик някой трябва да има контрол над даден сървър и сам да е готов да го жертва тоя трафик, но ако някой има такова желание - не е нужно да използва такива методи - просто ще ти даунлоудва хоум пейджа много пъти и готово :)

Не, има и друг вид ДОС атаки освен чрез маса трафик. Това е чисто теоретично разбира се, ясно е че никой няма да седне да се занимава точно с твоя къстъм форум, вместо да си хаква стари версии на пхпбб на корем; пък ако не е скрипт киди, не се съмнявам, че ще има доста по-добри възможности за атака пред тази. Така че, без особена връзка с реална опасност, ето сценария на атаката, без нужда от дебел трафик и кой знае какви машини, просто трябва да са няколко и да не са зад НАТ или файъруол:

Пишем приложение което отваря сървърски сокет (не задължително на 80 порт, в случай че е вече зает на атакуващата машина, онзи примерен код поддържа работа с друг) и може да приема няколко клиентски връзки едновременно. Освен това през няколко клиентски връзки се логваме на сайта и започваме да генерираме рекуести за смяна на аватар. УРЛ-то на аватара е естествено нашия си сървърен сокет, който бааавно и спокооойно започва да подава валиден отговор, ама на всеки 10 байта спира да почине.

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

Предполагам обаче, че това важи за всички по-напреднали скрипт кидита а за про-тата със сигурност -- ако атакуващия разполага с малък ботнет, предполагам че и 10-20 машини са достатъчни, те могат да генерират достатъчно заявки, че на ОСа на атакуваната машина да му свършат сокетите за свободна употреба. Забележи, че дори да има някаква проверка за уникални ИП-та, 20-те машини могат да използват едно тесте проксита, и тъй като атаката цели да заема сокети, а не да генерира трафик, няма да има проблем с бавни проксита или бавни зомбита.

Това беше днешния вечерен филм, очаквайте ни пак другия петък, с филма "Епизод 2: Зомбираните атакуват"

Портал за почитателите на Толкин - връзки и новини



Тема Re: големина на файл през URLнови [re: Mopдpeд]  
Автор Viper X (just a snake...)
Публикувано05.08.05 23:02



хех, ок :)
да се надяваме че никой няма да се занимава да прави чак такива щуротии срещу тоя сайт :))

пък и то е ясно, че ако някой реши да прави мизерии винаги може да намери начин

ше погледна утре как е направено в phpbb2 да сравня :)




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.