Агар шумо истифода стрипчар барои тоза кардани вуруди корбар, шумо танҳо нестед. Бисёре аз таҳиягарон ба ин гуна такя мекунанд безараргардонии вуруд барои боздоштани кӯшишҳои ворид кардани тазриқ. Дар назари аввал, ин мантиқӣ ба назар мерасад, ки аломатҳои хатарнокро нест кунед ва боркунии муфид нопадид мешавад. Аммо, ин равиш ҳисси бардурӯғи амниятро медиҳад. Дар асл, ҳамлагарон метавонанд филтрҳои оддиро ба монанди стрипчар истифода борҳои печида, рамзгузорӣ ё ивазкунии оқилонаи контекст. Аз ин рӯ, таҳиягарони оқил дар ин ҷо қатъ намешаванд. Ба ҷои ин, онҳо истифода мебаранд дархостҳои параметрӣ, ки аз ҳамлаҳои тазриқӣ дар реша пешгирӣ мекунанд.
Дар ин паём, шумо мефаҳмед, ки чаро стрипчар нокомиҳо дар сенарияҳои воқеӣ, чӣ гуна ҳамлагарон аз ин филтрҳо сӯиистифода мекунанд ва кадом алтернативаҳои бехатар воқеан кор мекунанд. Мо мисолҳои кодро дида мебароем, усулҳои маъмули гузаришро нишон медиҳем ва шарҳ медиҳем, ки чӣ тавр безараргардонии вуруд бояд ҳамеша бо муҳофизатҳои сохторӣ ба монанди дархостҳои параметрӣ, вагарна шумо осебпазир хоҳед монд.
Чӣ стрипчар Дар асл мекунад (ва намекунад)
Бисёре аз таҳиягарон истифода мебаранд stripchar ё функсияҳои монанд барои тоза кардани аломатҳои ноамн аз вуруди корбар. Одатан, он аломатҳои пунктуатсия, аломатҳои махсус ё ҳама чизҳои ғайриҳарфӣ-рақамиро тоза мекунад. Дар аввал, ин чунин ба назар мерасад безараргардонии вуруд, аммо ин ҳимояи воқеӣ нест.
Биёед онро таҳлил кунем. Функсияе ба монанди ин:
function stripchar(input) {
return input.replace(/[^\w\s]/gi, '');
}
аломатҳоро ба монанди ', ", ё ;Пас, агар шумо ворид шавед:
'; DROP TABLE users; --
Он чунин мешавад:
DROP TABLE users
Ҳатто агар вуруди корбар тоза ба назар расад ҳам, ҳамлагарон метавонанд танҳо бо истифода аз мантиқ борҳои SQL-ро ворид кунанд, хусусан вақте ки барнома дархостҳоро тавассути пайвасткунии сатрҳо месозад. Барои пешгирӣ кардани воқеан воридкунии SQL, шумо бояд аз дархостҳои параметрӣ ва коркарди вуруди контекстӣ истифода баред. Филтрҳои аломатӣ ба монанди stripchar() танҳо кофӣ нестанд.
Албатта, вуруди кандашуда дар як нигоҳ метавонад бехатартар ба назар расад. Аммо, ин равиш мантиқи зарароварро безарар намекунад, он танҳо тарзи навиштани онро тағйир медиҳад. Дар асл, ҳамлагарон аксар вақт аз ин бо рамзгузории борҳои муфид, ворид кардани фазои холӣ ё истифодаи аломатҳои тозашуда стратегӣ барои убур аз филтри шумо истифода мебаранд.
Инчунин, стрипчар контексти муҳим надорад. Он намедонад, ки оё вуруд ба пойгоҳи додаҳо, shell ё браузер равона шудааст. Ин маънои онро дорад, ки он наметавонад фирор ё рамзгузории дурустро татбиқ кунад. Бекор кардани вуруд бидуни донистани макони таъинот ба фирор аз HTML монанд аст, дар ҳоле ки таҳдиди воқеӣ ин аст SQLi.
Дар охир, стрипчар чизеро тафсир ё муҳофизат намекунад, он танҳо сатрҳоро таҳрир мекунад. Ва таҳрир амният нест. Агар шумо ҳифзи воқеӣ хоҳед, аз дархостҳои сохторӣ, тасдиқшуда ва параметрӣ истифода баред. Нуқта.
Барои равшантар кардани фарқият, дар ин ҷо чӣ гуна stripchar бо дархостҳои параметрӣ паҳлӯ ба паҳлӯ муқоиса мешавад:
Дархостҳои Stripchar ва параметрӣ: Кадоме аз онҳо рамзи шуморо воқеан муҳофизат мекунад?
| Фарқияти | stripchar() | Дархостҳои параметрӣ |
|---|---|---|
| Сатҳи ҳифз | Тозакунии оддии сатрҳо. Бо ҳилаҳои рамзгузорӣ ё мантиқӣ ба осонӣ сарфи назар карда мешавад. | Ҳифзи қавӣ аз ҳама шаклҳои тазриқи SQL. |
| Огоҳӣ дар контекст | Ба контекст нодида гирифта мешавад (SQL, HTML, shell ва ғайра). Як қоидаро дар ҳама ҷо татбиқ мекунад. | Аз контекст пурра огоҳ аст. Барои ҳар як муҳит аз фирори дуруст истифода мебарад. |
| Кӯшиши таҳиягар | Истифодаи зуд, аммо барои истифодаи дарозмуддат номуайян аст. | Ҳамгироии дурустро талаб мекунад, аммо устувор ва барои оянда мувофиқ аст. |
| Муқовимати гузариш | Кам — ҳамлагарон бо истифода аз фазои холӣ, рамзгузорӣ ё мантиқ ба осонӣ мутобиқ мешаванд. | Баланд — рамзро аз маълумот ҷудо мекунад ва воридкуниро боэътимод масдуд мекунад. |
| Эътимод ба амният | Ҳисси бардурӯғи амният — метавонад мушкилотро бе ҳалли он пинҳон кунад. | Соҳаи боэътимод standard барои иҷрои бехатари дархост. |
Чӣ тавр ҳамлагарон безараргардонии вурудро аз байн мебаранд
Вақте ки таҳиягарон ба он такя мекунанд, ҷараёни маъмулии осебпазир чунин ба назар мерасад стрипчар барои безараргардонии вуруд:
Ҳамлагарон набояд филтрҳои шуморо вайрон кунанд, онҳо танҳо бояд атрофи онҳоро гардонВақте ки таҳиягарон ба он такя мекунанд стрипчар барои безараргардонии вуруд, онҳо аксар вақт фикр мекунанд, ки нест кардани аломатҳо ба монанди нохунак ё нуқта-вергул кӯшишҳои воридкуниро бозмедорад. Аммо, ҳамлагарон зуд мутобиқ мешаванд. Онҳо ҳунармандӣ мекунанд. борҳои печида ки аз филтрҳои дар асоси регекс мавҷудбуда мегузаранд, хусусан вақте ки ин филтрҳо контекст надоранд.
Масалан, биёед бигӯем, ки шумо кӯшиш мекунед, ки вурудро чунин тоза кунед:
const input = stripchar(userInput);
// safe to use? maybe not.
db.query("SELECT * FROM users WHERE name = '" + input + "'");
Ҳатто агар корбар наметавонад классикиро пешниҳод кунад ' OR 1=1 --, онҳо метавонанд аз ҳилаҳои Юникод, пайвасткунии сатрҳо ё синтаксиси вайроншуда, ки то ҳол кор мекунанд, истифода баранд. Боркуниҳои ба ин монанд аксар вақт кор мекунанд:
0x27206F7220313D31--
ё:
'+UNION+SELECT+null,null,null--
Агар функсияи шумо аломатҳои ғайрикалимавиро тоза кунад, шумо метавонед тасодуфан фармони дурусти SQL-ро аз нав созедБадтараш, ҳамлагарон метавонанд арзишҳоро ба тарзе рамзгузорӣ кунанд, ки аз филтри шумо мегузаранд, аммо аз ҷониби системаи мавриди ҳадаф рамзкушоӣ карда мешаванд.
Илова бар ин, тазриқи SQL, стрипчар дар дигар контекстҳо, ба монанди фармонҳои shell, роҳҳои файл ё ҳатто иҷрои JavaScript низ ноком мешавад. Азбаски он дар бораи он ки маълумоти вуруд дар куҷо истифода мешавад, огоҳ нест, он наметавонад фирор ё валидатсияи дурустро татбиқ кунад.
Дар натиҷа, безараргардонии вуруд бо стрипчар аз он гузаштан осон аст. Амнияти воқеӣ аз он сарчашма мегирад контролҳои огоҳ аз контекст, махсусан дархостҳои параметрӣ ки аз воридкунии мантиқӣ комилан пешгирӣ мекунанд.
Чаро шумо бояд ба ҷои ин аз дархостҳои параметрӣ истифода баред
Агар шумо хоҳед, ки ҳамлаҳои тазриқро воқеан қатъ кунед, ба шумо лозим аст сохтани дархостҳоро бо сатрҳо қатъ кунед. Дар он ҷо дархостҳои параметрӣ даромадан. Баръакс стрипчар, онҳо филтр намекунанд, онҳо рамзро аз маълумот ҷудо кунед дар сатҳи муҳаррик.
Биёед дархости вайроншударо аз нав дида бароем:
const input = stripchar(userInput);
const query = "SELECT * FROM users WHERE name = '" + input + "'";
Ин хатарнок аст, зеро вуруд мустақиман ба SQL ворид карда мешавад. Ҳатто бо тоза кардани аломатҳо, шумо ҳоло ҳам сатреро месозед, ки метавонад нодуруст истифода шавад. Ба ҷои ин, аз як дархости параметрӣ ба монанди ин истифода баред:
const query = "SELECT * FROM users WHERE name = ?";
db.execute(query, [userInput]);
Дар ин ҷо, драйвери пойгоҳи додаҳо медонад, ки userInput маълумот аст, рамзи иҷрошаванда нестОн ба таври худкор аз он халос мешавад ва воридкуниро масдуд мекунад, ҳатто агар вуруд дорои нохунакҳо, нуқтавергулҳо ё борҳои шонздаҳӣ бошад.
Дар Python:
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
Дар PHP бо PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $input]);
Дар байни ҳамаи ин мисолҳо, дархостҳои параметрӣ пешгирӣ аз ворид кардани тазриқ бидуни зарурати тахмин кардани он, ки кадом аломатҳо метавонанд хатарнок бошанд. Ба шумо лозим нест стрипчар, ба шумо сохтори дархостҳои сохторӣ ва аз ҷиҳати контекст огоҳ лозим аст.
Илова бар ин, ин усул борҳои норавшан, ҳилаҳои Юникод ва гузаришҳои рамзгузориро, ки ҳамон намунаҳои канорагирӣ дар ... мавҷуданд, масдуд мекунад. осебпазириҳои XSSАсбобҳо ба монанди Xygeni ин таҳдидҳоро барвақт муайян мекунанд. SAST таҳлил.
Хулоса, мудофиаҳои воқеӣ ба филтрҳо такя намекунанд. Онҳо ба протоколҳо, API-ҳои боэътимод ва контексти пурра такя мекунанд. Агар шумо аз чаҳорчӯбаҳо ё тазриқи хидматрасонии динамикӣ истифода баред, аз паҳншавии вурудҳо тавассути пойгоҳи рамзи шумо огоҳ бошед. Тазриқи вобастагии бехатар кафолат медиҳад, ки ҳатто ҷараёнҳои мураккаб сатҳҳои нави ҳамларо боз намекунанд.
Ба он такя накунед стрипчарБарои татбиқи дифоъҳои воқеӣ аз Xygeni истифода баред
Ҳатто агар шумо истифода баред дархостҳои параметрӣ, кафолате нест, ки тамоми рамзи шумо ҳамон як чизро риоя мекунад. standardМантиқи кӯҳна, скриптҳои тарафи сеюм ё сатрҳои нодида гирифташуда дар PR метавонанд хатари воридкуниро ба вуҷуд оранд. Дар ин ҷо Xygeni кӯмак мекунад.
Xygeni рамзи сарчашмаи шуморо скан мекунад, pull requests, ва CI pipelines барои сайд кардан:
- Сатрҳои дархостӣ, ки SQL-ро бо конкатенатсия эҷод мекунанд
- Филтрҳои заиф ё ватанӣ ба монанди стрипчар
- Мантиқи шубҳанок, ки бо борҳои номаълуми маълум мувофиқат мекунад
Ба шумо лозим нест, ки ҳар як сатрро аз назар гузаронед. Xygeni намунаҳои ноамниро барвақт қайд мекунад, татбиқ мешавад. Автофикр дар ҷое ки имконпазир аст ва метавонад якҷояшавии хатарнокро бо танзимшаванда манъ кунад Guardrails.
Кӯтоҳаш, Xygeni кафолат медиҳад, ки дархостҳои параметрӣ на танҳо як амалияи беҳтарин мебошанд, балки онҳо дар миқёси васеъ татбиқ карда мешаванд. Дигар тахминҳо нест. Филтрҳои аз даст рафта нестанд. Танҳо ҳифзи воқеӣ.
Мехоҳед бубинед, ки чӣ тавр Xygeni дархостҳои ноамниро дар рамзи шумо пайдо мекунад?
Хулосаҳои асосӣ: Чиро бояд дар хотир дошт стрипчар ва хатарҳои тазриқ
- стрипчар функсияи амниятӣ нест — он қаҳрамонҳоро нест мекунад, на хатарро.
- Дезинфексияи вурудӣ кофӣ нест вақте ки шумо дархостҳоро бо истифода аз пайванди сатрҳо эҷод мекунед.
- Дархостҳои параметрӣ ҳимояи дуруст мебошанд, ва ҳар як забон ё чаҳорчӯбаи муосир онҳоро дастгирӣ мекунад.
- Борҳои норавшан метавонанд аз филтрҳо гузаранд, хусусан агар ҳилаҳои рамзгузорӣ дар бар гиранд.
- Таҳлили статикӣ (SAST) асбобҳо он чизеро, ки одамон аз даст медиҳанд, пайдо мекунанд, аз ҷумла намунаҳои ноамн, ки дар рамзи кӯҳна пинҳон шудаанд.
- Xygeni ошкоркунӣ, афзалиятгузорӣ ва ҳатто ислоҳро автоматӣ мекунад то дастаи шумо тавонад ба хусусиятҳои навиштан диққат диҳад, на ба таъқиби осебпазириҳо.
Хулоса: Ба филтрҳо эътимод накунед. Аз рӯи тарҳрезӣ ҳифз кунед.
Такя ба функсияҳо ба монанди стрипчар Шояд ин як роҳи ҳалли зуд ба назар расад, аммо онҳо эҳсоси бардурӯғи амниятро ба вуҷуд меоранд. Ҳамлагарон нисбат ба филтрҳои сатрӣ тезтар таҳаввул меёбанд. Ягона роҳи боэътимоди боздоштани ҳамлаҳои тазриқӣ навиштани рамзи бехатар тавассути тарҳрезӣ ва татбиқи ин тарҳ дар ҳама ҷо мебошад.
Асбобҳо ба монанди Xygeni ба шумо кӯмак мекунанд, ки ин корро ба таври худкор анҷом диҳед. Аз pull request ба pipeline, онҳо он чизеро, ки филтрҳои шумо намегиранд, мегиранд ва онро пеш аз расидан ба истеҳсолот ислоҳ мекунанд.







