stripchar - дезинфекция на входа - параметризирани заявки

Защо Stripchar не блокира тази инжекционна атака

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

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

Какво стрипчар Всъщност го прави (и не го прави)

Много разработчици използват stripchar или подобни функции за премахване на опасни символи от потребителския вход. Обикновено премахва препинателни знаци, специални символи или всичко, което не е буквено-цифрово. В началото това звучи така дезинфекция на входа, но това не е истинска защита.

Нека го разгледаме по-подробно. Функция като тази:

премахва символи като ', " или ;Така че, ако въведете:

Става:

Дори ако потребителският вход изглежда чист, атакуващите все още могат да инжектират SQL полезни товари, използвайки само логика, особено когато приложението изгражда заявки чрез конкатенация на низове. За да се предотврати наистина SQL инжектиране, трябва да използвате параметризирани заявки и контекстно-зависима обработка на входни данни. Филтри за символи като stripchar() просто не са достатъчни.

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

Освен това, стрипчар Липсва критичен контекст. Не знае дали входът е насочен към база данни, обвивка или браузър. Това означава, че не може да приложи правилното екраниране или кодиране. Дезинфекцирането на входа без да се знае дестинацията е като екраниране на HTML, докато истинската заплаха е SQLi.

В крайна сметка, стрипчар  не интерпретира и не защитава нищо, а само редактира низове. А редактирането не е защита. Ако искате истинска защита, използвайте структурирани, валидирани и параметризирани заявки. Точка.

За да стане разликата по-ясна, ето как stripchar се сравнява рамо до рамо с параметризирани заявки:

Stripchar срещу параметризирани заявки: Коя от тях всъщност защитава вашия код?

Особеност stripchar() Параметризирани заявки
Степен на защита Основно почистване на низове. Лесно се заобикаля с кодиране или логически трикове. Силна защита срещу всички форми на SQL инжекции.
Осъзнаване на контекста Сляп за контекста (SQL, HTML, shell и др.). Прилага едно и също правило навсякъде. Напълно контекстно-зависимо. Използва правилно екраниране за всяка среда.
Усилие на разработчика Бързо се прилага, но е ненадежден за дългосрочна употреба. Изисква правилна интеграция, но стабилна и устойчива на промени в бъдещето.
Съпротивление на байпаса Ниско — нападателите се адаптират лесно, използвайки празни пространства, кодиране или логика. Високо — отделя кода от данните и блокира надеждно инжектирането.
Увереност в сигурността Фалшиво чувство за безопасност — може да скрие проблема, без да го реши. Доверена индустрия standard за сигурно изпълнение на заявки.

Как атакуващите заобикалят дезинфекцията на входни данни

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

stripchar - дезинфекция на входа - параметризирани заявки

Нападателите не е нужно да разбиват филтрите ви, просто трябва заобиколи гиКогато разработчиците разчитат на стрипчар За дезинфекция на входните данни, те често приемат, че премахването на символи като кавички или точка и запетая ще блокира опитите за инжектиране. Нападателите обаче се адаптират бързо. Те изработват обфускирани полезни товари които се промъкват през филтри, базирани на регулярни изрази, особено когато тези филтри нямат контекст.

Например, да кажем, че се опитвате да дезинфекцирате входните данни по следния начин:

Дори ако потребителят не може да изпрати класическа ' OR 1=1 --, те могат да използват Unicode трикове, конкатенация на низове или счупен синтаксис, който все пак работи. Полезни товари като този често работят:

или:

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

Освен SQL инжектирането, стрипчар не успява и в други контексти, като например команди на shell, файлови пътища или дори изпълнение на JavaScript. Тъй като не знае къде ще се използва входът, не може да приложи правилно екраниране или валидиране.

Като резултат, дезинфекция на входа с стрипчар е лесно да се заобиколи. Истинската сигурност идва от контекстно-зависими контроли, По-специално параметризирани заявки които предотвратяват изцяло логическото инжектиране.

Защо трябва да използвате параметризирани заявки вместо това

Ако искате наистина да спрете атаките с инжектиране, трябва спрете да изграждате заявки с низове, Ето къде параметризирани заявки Влез. За разлика от стрипчар, те не филтрират, те отделен код от данните на ниво двигател.

Нека преразгледаме счупената заявка:

Това е опасно, защото входните данни се инжектират директно в SQL. Дори с премахване на символи, все още се създава низ, който може да бъде използван неправилно. Вместо това използвайте параметризирана заявка като тази:

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

В Пайтън:

В PHP с PDO:

Във всички тези примери, параметризирани заявки предотвратяване на инжектиране, без да е необходимо да гадаете кои символи може да са опасни. Не е нужно стрипчар, Нуждаете се от структурирана, контекстно-осъзната конструкция на заявки.

Освен това, тази техника блокира обфускирани полезни товари, Unicode трикове и заобикаляне на кодирането, същите модели на избягване, открити в XSS уязвимостиИнструменти като Xygeni откриват тези заплахи рано с... SAST анализ.

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

Не разчитайте на стрипчарИзползвайте Xygeni за прилагане на реална защита

Дори и да използвате параметризирани заявки, няма гаранция, че цялата ви кодова база следва едно и също standardОстарялата логика, скриптовете на трети страни или пренебрегнатите редове в PR все още могат да доведат до рискове от инжектиране. Точно тук Xygeni помага.

Xygeni сканира вашия изходен код, pull requestsи CI pipelineза улов:

  • Низове на заявки, които изграждат SQL с конкатенация
  • Слаби или домашно приготвени филтри като стрипчар
  • Подозрителна логика, която съвпада с известни обфускирани полезни товари

Не е нужно да преглеждате всеки ред. Xygeni сигнализира за опасни модели рано, прилага се AutoFix където е възможно, и може да блокира рискови сливания с персонализируеми Guardrails.

Накратко, Xygeni гарантира, че параметризираните заявки не са просто най-добра практика, а се прилагат в голям мащаб. Край на догадките. Без пропуснати филтри. Само истинска защита.

Искате да видите как Xygeni намира несигурни заявки във вашия код?

Започнете безплатен пробен период! Без кредитна карта, пълна видимост още от първото сканиране.

Ключови изводи: Какво да запомните стрипчар и рискове от инжектиране

  • стрипчар не е функция за сигурност — премахва герои, а не риск.
  • Санитизацията на входните данни не е достатъчна когато изграждате заявки с конкатенация на низове.
  • Параметризираните заявки са правилната защитаи всеки съвременен език или рамка ги поддържа.
  • Замъглените полезни товари могат да се промъкнат през филтрите, особено ако са включени трикове с кодиране.
  • Статичен анализ (SAST) инструментите улавят това, което хората пропускат, включително несигурни модели, скрити в наследения код.
  • Xygeni автоматизира откриването, приоритизирането и дори отстраняването на проблеми така че вашият екип да може да се съсредоточи върху писането на функции, а не върху преследването на уязвимости.

Заключение: Не се доверявайте на филтрите. Сигурни по дизайн.

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

Инструменти като Xygeni ви помагат да правите това автоматично. От pull request да се pipeline, те улавят това, което вашите филтри не улавят, и го поправят, преди да стигне до производство.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni