Цросс-Сите Сцриптинг, широко познат као КССС, један је од најопаснијих метода напада које користи сајбер криминалци, тако да је од виталног значаја да сваки програмер и истраживач безбедности зна шта је то и како да спречити нападе. Дакле, како можете предузети мере против КССС рањивости? Користите ХТМЛ, ЈаваСцрипт или ДОМ да бисте приказали податке које веб локација добија од корисника. Једна или више од ове три различите области могу да раде заједно.
Како спречити КССС користећи ХТМЛ
КССС омогућава нападачима да убаце злонамерне кодове или скрипте у веб странице, циљајући несуђене кориснике који посећују сајт. Ово би могло да украде личне податке, преусмери посетиоце на другу веб локацију коју је поставио сајбер криминалац или на други начин утиче на изглед веб странице. Али можете спречити да се то догоди; на пример, заустављањем уметања ХТМЛ-а.
Замислите да имате веб локацију са књигом гостију. Рецимо да ваши посетиоци који користе ову књигу гостију могу овде да упишу своја имена и поруке, а њихове поруке могу бити јавно прегледане. Нападач који жели да изврши КССС тест у вашој књизи гостију користиће област коју сте доделили за писање поруке. Тај сајбер криминалац ће овде покренути ЈаваСцрипт код. На пример, нападач би могао да користи ЈаваСцрипт код као што је:
<скрипта>упозорење ("Тхе КССС!")</script>
Нападач мора да користи ознаку скрипте да би ово било успешно. Ако не раде, ЈаваСцрипт код неће радити. Морате кодирати < наредбу тако да корисници никада не могу да користе ХТМЛ ознаке. Ово ће отежати нападачу рад са ХТМЛ ознакама.
Како спречити КССС користећи ЈаваСцрипт
Логика у ХТМЛ-у је такође важи у ЈаваСцрипт-у. У неким апликацијама могуће је штампати податке које је веб локација примила од корисника помоћу ЈаваСцрипт кода.
Размотрите ово кодирање:
<п ид="принт"></п>
<скрипта>
доцумент.гетЕлементБиИд("тест").иннерХТМЛ = "";
</script>
Замислите да веб локација користи блок кода попут оног изнад. Програмер је овде користио ознаку "п" под називом "принт". Као што видите из кода, вредност ће доћи из параметра „претрага“, а програмер жели да прикаже ову долазну вредност у ознаци „п“. Програмер који је направио ову операцију желео је да користи иннерХТМЛ функцију ЈаваСцрипт-а.
Сада погледајмо ситуацију из угла сајбер нападача. У том случају, нападач ће извршити КССС тест у оквиру ознаке "сцрипт". За ово, нападач не мора поново да покрене ознаку, јер се већ користи ознака "сцрипт". Нападач би тада могао да напише тест овако:
име датотеке.пхп? сеарцх=а" упозорење ("Тхе КССС!"); ф= "
Овај код ће се појавити на веб локацији као:
доцумент.гетЕлементБиИд("тест").иннерХТМЛ = " а" упозорење ("Тхе КССС!"); ф="";
Тај напад би био успешан. Да бисмо боље разумели проблем, хајде да испитамо још један пример технике коју би нападач могао да користи. Хакер је можда применио КССС тест као што је:
име датотеке.пхп? сеарцх=";</script><ем>Фатих</em>
Овако би то изгледало када се погледа са веб странице:
доцумент.гетЕлементБиИд("тест").иннерХТМЛ = "";</script><ем>Фатих</em>";
Ово може изгледати мало чудно јер је нападач затворио прву ознаку „сцрипт“ користећи структуру као што је „/сцрипт“ овде. И тако, нападач може поново покренути било који ЈаваСцрипт и ХТМЛ код који жели.
Ако размислите о ова два различита примера, заштита од КССС-а изгледа прилично једноставно. Неопходна мера предострожности била би кодирање " и ' знакове које видите у првом примеру. У другом примеру, кодирајте знакове < и >.
Како спречити КССС користећи ДОМ
У овој варијанти КССС-а, подаци које веб локација прима од корисника могу да ометају својство ДОМ елемента. На пример, информације о боји које сајт добија од корисника могу утицати на боју позадине табеле или на целу позадину странице. Дакле, корисник се несвесно меша у стилски распоред тела и стола. Следећи код је добар пример за ово:
<боди бгцолор="<?пхп ецхо $_ГЕТ['боја']; ?>"/>
Са овим, веб локација користи параметар "цолор" добијен од корисника директно у својству "бгцолор" елемента "боди". Дакле, шта би нападач могао да уради у овом тренутку? Они би могли да изврше овај злонамерни код:
име датотеке.пхп? боја=црвена" онлоад="упозорење ('Тхе КССС!')
Ово изгледа овако када се погледа са веб локације:
<боди бгцолор=" црвена" онлоад="упозорење ('Тхе КССС!') "/>
Да би се то спречило, програмер би морао да кодира " карактера.
Међутим, постоји још један важан елемент у ЈаваСцрипт-у који треба напоменути. Следећи исечак кода је пример за ово:
<а хреф="јавасцрипт: алерт('Тхе КССС!')">
То значи да је могуће директно покренути неки ЈаваСцрипт код. Једна од најбољих превентивних мера је да обезбедите да веб локација проверава да ли су подаци које добија од корисника прави УРЛ. Најједноставнији метод је да се уверите да постоје изрази као што су „ХТТП“ и „ХТТПС“ (безбедна верзија ХТТП-а) у вези.
Пример функције за спречавање КССС-а са ПХП-ом
Видели сте неке примере како да заштитите апликацију или веб локацију од КССС напада. Можете да користите исечке кода у овој табели са ПХП-ом:
Кодирање у ХТМЛ-у |
хтмлспециалцхарс($стр, ЕНТ_ЦОМПАТ) |
Кодирајте у ЈаваСцрипт и ДОМ атрибуту |
хтмлспециалцхарс($стр, ЕНТ_НОКУОТЕС) |
УРЛ провера |
'/^(((хттпс?)|(\/\/))).*/'; |
Имајте на уму да су ово само примери и да ће се разликовати у зависности од језика софтвера који користите.
Можете направите веб апликацију са ПХП-ом и испробајте кодове које видите изнад да бисте их послали. Ако се питате како да користите све ове методе, можете добити неке идеје из блока ПХП кода у наставку, што би требало да буде корисно чак и ако користите други језик:
<?пхп
$дата = $_ГЕТ['подаци'];функцијаин_аттрибуте($стр){
повратак хтмлспециалцхарс($стр, ЕНТ_ЦОМПАТ);
// ЕНТ_ЦОМПАТ ће кодирати знак двоструког наводника (").
}
функцијаин_хтмл($стр){
$линк = '/^(((https?)|(\/\/))).*/';
ако(!прег_матцх($линк, $стр))
{
повратак "/";
}
повратак $стр;
}
$дата = ин_аттрибуте($дата);
$дата = ин_хтмл($подаци);
$дата = реал_урл (подаци);
?>
Заштитите своју веб локацију од КССС-а и више
КССС је популаран вектор напада који користе хакери. Обично се вредност путање у УРЛ-у, било које поље на вашој веб локацији у које се могу унети подаци (као што су обрасци и поља за коментаре), може користити за тестирање КССС рањивости. Али, наравно, постоји много различитих метода које сајбер криминалци могу да користе за напад на веб локацију, посебно ако имате веб локацију која има много корисника и скрива њихове информације.