XSS и htmlspecialchars

dakata__92

Super Moderator
Защо, повечето работни рамки използват собствени алгоритми за кодиране на таговете? Не е ли неефикасно като скорост на действие да напишеш функция или метод да обработва някакъв текст въведен в дадена форма? Искам да защитя примерно текстово поле и защо да не ползвам тази функция която си е вградена в езика ами да си напиша моя собствена? Има си и декодираща функция htmlspecialchars_decode но нещо не схващам логиката да се прави нещо което ще свали малко от перформънса и ще върши същата работа. Дупка ли има? Някакъв JSON стринг или екстри може да пропусне, че така не е препоръчителна? :shock:
 
Fakeheal каза:
Тогава не ти разбирам въпроса? :oops:
Въпроса ми е защо програмистите си пишат собствени функции за превент на XSS? Да прочетох го това но искам и тук да попитам. Да ми обяснят хора на моят език, защото понякога немога да хвана сърказам в чуждият такъв. Желая да разбера повече и още в първият ми пост зададох въпросите които ме вълнуват. :)
 
Аз си използвам функция, която писах преди години още, която съчетава 3 други функции в себе си:

PHP:
public function secure($var){
    if(!isset($var)) die("<br>The chosen variable is not set");
    if(empty($var)) die("<br>The chosen variable is empty");
    $var = trim(addslashes(htmlspecialchars($var)));
    return $var;
}

trim(); ще премахне интеревалите преди и след съдържанието
addslashes - ясно е
htmlspecialchars - ти сам си го каза

И така всичко го праскам през обобщеното secure(); и нямам ядове.
Просто е супер-досадно при всяка една нужна променлива, заявка, ала-бала, да пиша:
PHP:
<?php
if(isset($_POST['op']) and !empty($_POST['op'])){
$op = trim(addslashes(htmlspecialchars($_POST['op'])));
}
?>

За всичко това съм си написал една малка моя библиотека от функции, които най-често използвам и съм ги описал във вид, който е най-удобен за лично ползване (от типа да пускам captcha и да я проверявам с по 1 ред код, цензуриране на низове чрез задаване на единични, няколко или масиви от цинизми, web-agent в 1 ред, дето ми вади всичко нужно за посетителя & etc &etc :D)
Дава ти гъвкавостта да добавиш нещо от себе си, като същевременно новото го пригодиш за лично ползване
 
lamerko каза:
Може би защото искат все пак да се защитят? :roll:
Ммм то това е ясно. Защо htmlspecialchars не е правилното решение? При кои случаи се въвежда XSS през тази функция? Кодировката ли прави проблем или тагването по новият начин $input = <<<INPUT
' onmouseover='alert(/Meow!/);
INPUT;
Прочетох статията но все пак искам ако някой изяви желание да ми обясни да го направи. :)
 
Да го наречем най-просто - игра на символи. Няма как да създадеш универсална функция за ескейпване/подмяна, без да нарушиш работоспособността на системата. От тук идват няколкото базови параметъра и още 2-3 паралелни функции, които могат да се ползват в комбина.

С други думи - точната имплементация трябва да е целева.
 
lamerko каза:
Да го наречем най-просто - игра на символи. Няма как да създадеш универсална функция за ескейпване/подмяна, без да нарушиш работоспособността на системата. От тук идват няколкото базови параметъра и още 2-3 паралелни функции, които могат да се ползват в комбина.

С други думи - точната имплементация трябва да е целева.
Тоест енкодинга играе огромна роля в решаването на проблема.
 

Back
Горе