Модулите за качване на файлове са едно от най-слабите звена в уеб приложенията. Всички направени грешки, дори и такива, които смятате за малки, могат да доведат до попадане на контрол върху сървъра директно в ръцете на кибератакуващ. Поради тази причина разработчиците на софтуер трябва да знаят най-често срещаните грешки и някои методи за атака, които могат да възникнат.
И така, какво е подправяне от страна на клиента? Как можете да се борите с това, за да запазите вашите сайтове и вашите потребители в безопасност?
Какво е подправяне от страна на клиента?
Подправянето от страна на клиента е основната концепция за атаките на уеб приложения като цяло. Просто казано, това означава, че вече не можете да се доверите на нито една от данните, които изпращате на потребителя. В допълнение, подправянето от страна на клиента е една от основите на сигурното разработване на приложения. Ако разгледате модула за качване на файлове, с който се занимавате, и помислите за подправяне от страна на клиента, данните, на които не можете да се доверите, включват:
- Името на качения файл.
- Content-Type на качения файл.
Тези два елемента са къде имате възможност да поставите в белия списък като разработчик на софтуер. Данните за името на качения файл могат да съдържат всичко, което е подправено от страна на клиента. С данните за Content-Type на качения файл, дори ако атакуващият качва .exe файл, този файл може да се появи като изображение/jpeg в системата.
Разширение на файла и бял списък
Докато разработвате модули за качване на файлове, първото нещо, което трябва да направите, е процесът на белия списък за файловото разширение. Например, потребител иска да качи файл с име "muo.jpeg". Трябва да се уверите, че разширението на файла, което потребителят иска да качи, е .jpeg. За целта системата трябва да провери качения файл и да види дали е едно от разрешените файлови разширения. За да разберете как можете да направите това, разгледайте следния прост PHP код:
$file_parts = pathinfo($filename);
превключвател($file_parts['разширение'])
{
случай "jpg":
прекъсвам;случай "прилеп": // Или exe, dll, така и т.н.
прекъсвам;
случай "":
случайНУЛА: // Няма файлово разширение
прекъсвам;
}
Можете да направите това с кодов блок, подобен на този по-горе, или можете да използвате класовете и функциите, предоставени от рамката, която използвате.
Внимавайте да не създавате данни за файлово разширение, като анализирате името на файла според знака точка (.), защото атакуващият може да заобиколи тази стъпка за проверка с име на файл като "muo.jpeg.php".
Какво е информация за тип съдържание?
Информацията за тип съдържание е част от информацията, изпратена в HTTP заявката за всяко качване на файл. Интернет браузърът открива тази информация и я добавя към изпратената заявка. Нападателят може да се опита да промени информацията с подправяне от страна на клиента и да заобиколи валидациите от страна на сървъра. На този етап разработчиците се нуждаят от контролен механизъм, за да извършват валидации върху информацията за тип съдържание. Само това няма да е достатъчно; все пак това е важен проблем, на който разработчиците трябва да обърнат внимание.
Да приемем, че кодирате механизъм за проверка на правилното файлово разширение и приемате само файлове с разширение .jpeg. В допълнение към този предпазен механизъм, можете да проверите информацията за Content-Type веднага случай и приема само файлове с информация за изображение/jpeg, допълнително ниво на защита срещу кибератаки
SWF Flash файлове и стъпки за атака
Файловото разширение и данните за Content-Type не означават нищо за интернет браузъри, които поддържат плъгини като Adobe Flash Player. Въпреки че поддръжката за този плейър вече не е налична, все още е възможно да инсталирате тези свързани файлове на много системи, въпреки че Flash остава риск за сигурността. В система, която не е взела съответните предпазни мерки, е възможно да извикате Flash файл с
За да предприемат действия, разработчиците трябва да знаят пътищата, по които киберпрестъпниците могат да поемат. Ето как може да се случи:
- Злонамереният нападател качва SWF (файлов формат на Adobe Flash) с име „image.jpeg“ на целевия уебсайт. По време на процеса на качване се потвърждава при проверката на белия списък, че файлът, качен от атакуващия, има разширение .jpeg. Проверката на Content-Type се заобикаля с подправяне от страна на клиента. Представете си, че този файл, качен от заплахата, отива на „www (точка) целеви сайт (точка) com/images/images.jpeg“.
- Да приемем, че нападателят има уебсайт, наречен атакуващ (точка) com. Нападателят извиква файла image.jpeg, качен на целевия сайт на този уебсайт, като използва
- Невинен потребител влиза в хакер (точка) com. Този сайт извиква SWF файла на www (точка) target-site (точка) com/images/image.jpeg и изпълнява командите, дадени на SWF.
- Чрез това кибератакът може да създаде действия с HTTP заявка за целевия сайт (точка) com, без нормалните потребители да забележат. С тези заявки нападателят ще използва сесията на невинния потребител и ще заобиколи проверката на CSRF.
За да разберете по-ясно този сценарий на атака, считайте, че следният код е в HTML
стил="височина: 1px; ширина: 1px;" данни="www.target-site.com/images/image.jpeg" тип="приложение/x-shockwave-flash" allowscriptaccess="винаги" flashvars="c=четене&u=нещо"
Едно от най-добрите решения е да получите достъп до файловете, качени с качване на файлове чрез различен поддомейн. В гореспоменатия сценарий можете да получите достъп до статични файлове не от същия домейн, а от различен поддомейн, както следва: "http (двоеточие)//file.target-site (точка) com/images/image.jpeg".
Друго решение е да добавите Съдържание-разпореждане: запор информация към HTTP отговора, когато получите заявка за достъп до файловете, които искате да качите.
Вземете предпазни мерки за уязвимости при качване на файлове
Всяко качване на файл, което потребителите могат да направят на уебсайт, е опасно, така че това е един от проблемите, на които разработчиците трябва да обърнат най-голямо внимание. Ако нападателите открият такава уязвимост, те могат да отворят обвивка в сайта и лесно да използват информацията на сървъра. От жизненоважно значение е да контролирате всички файлове, качени от потребителите, да прилагате методи на белия списък и да скривате местоположението на качената директория, ако е възможно.
И разбира се, има много други допълнителни стъпки, които трябва да предприемете, за да защитите сайта си, дори ако вземете всички препоръчани предпазни мерки за качване на файлови модули. Използването на заглавки за защита на HTTP е една такава стъпка, която можете да предприемете.