strip_tags и XSS уязвимость

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

strip_tags и XSS уязвимость

Сообщение Arnowt »

Есть необходимость разрешить пользователям использовать некоторые HTML
самый лучший способ фильтрации strip_tags с двумя параметрами...
Но в таком случае у нас появляется одна неприятная уязвимость:

Код: Выделить всё

<a onclick='alert(1);' href='/'>Анкор</a>
Может у кого-то есть красивое решение? кроме поиска регуляркой всевозможных запрещенных атрибутов и если нет, то насколько стабилен список этих атрибутов?

Поясню, когда-то давно ломал сайт(законно) задача была прописать iframe, хозяин сделал всевозможные фильтрации и был сильно удивлен когда я вместо <iframe> использовал <object data='УРЛ'>
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: strip_tags и XSS уязвимость

Сообщение ElisDN »

HTMLPurifier. В Yii уже встроен.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

*я не в Yii
*HTMLPurifier - не есть красивое решение, регулярка будет красивее в моем случае.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: strip_tags и XSS уязвимость

Сообщение ElisDN »

Arnowt писал(а):*я не в Yii
*HTMLPurifier - не есть красивое решение, регулярка будет красивее в моем случае.
1) Без разницы где. Это отдельная библиотека. Скачивается вручную или загружается через Composer.

2) ОК. Только не забудьте автозакрытие случайно незакрытых тегов и автопреобразование адресов в ссылки в эту регулярку добавить.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

1 в курсе :)
2 планирую удалять сами атрибуты событий, а там если тег развалится не страшно, благо людей с такими правами не планируется много.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

глубоко не тестировал, но если кому нужно

Код: Выделить всё

function stripTagsArray($arr,$allowTags=null,$allowArgs=[]){
    foreach($arr as $k=>$v){
        if(is_array($v)) $arr[$k]=stripTagsArray($v,$allowTags,$allowArgs);
        else{
            $v=strip_tags($v,$allowTags);
            if($allowTags AND preg_match_all("/<[^>]+>/s",$v,$match)){
                foreach($match[0] as $v1){
                    if(preg_match_all("/[a-z]+=(?:(?:[\"']+[^\"']+)|(?:[^>\s]+))(?:\"|'| )*/si",$v1,$v2)){
                        $v2=$v2[0];
                        foreach($v2 as $k3=>$v3){
                            $del=true;
                            foreach($allowArgs as $v4)
                                if(strpos($v3,$v4)===0){$del=false;break;}
                            if($del) unset($v2[$k3]);
                            else $v2[$k3]=trim($v2[$k3]);
                        }
                    }
                    else $v2=$v2[0];
                    $v2=implode(' ',$v2);
                    if(strlen($v2)>0) $v2=' '.$v2;
                    $v      =preg_replace('/(<[a-z]+)([^>]*)/si',"$1$v2",$v1);
                    $arr[$k]=str_replace(chr(0),'',$arr[$k]);
                    $arr[$k]=str_replace($v1,$v,$arr[$k]);
                }
            }
            else $arr[$k]=$v;
        }
    }
    return $arr;
}
 
Вызывается примерно так $_POST=stripTagsArray($_POST,'<a><img>',['href','title','src','alt'])
Последний раз редактировалось Arnowt 2016.02.09, 12:37, всего редактировалось 6 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: strip_tags и XSS уязвимость

Сообщение zelenin »

откуда только такие берутся.

- HTMLPurifier. В Yii уже встроен.
- *я не в Yii *HTMLPurifier - не есть красивое решение, регулярка будет красивее в моем случае.
- 1) Без разницы где. Это отдельная библиотека. Скачивается вручную или загружается через Composer. 2) ОК. Только не забудьте автозакрытие случайно незакрытых тегов и автопреобразование адресов в ссылки в эту регулярку добавить.
- глубоко не тестировал, но если кому нужно

Ему советуют оттестированную, проверенную временем, библиотеку, неломающую html. Он велосипедит кусок кала, который вероятно ломает html, не оттестирован, и похож на что-то из 2000 года, где еще никогда не слышали о код стайлах и правилах хорошего тона. И презентует ее, если типа кому-то нужно то вот - это мой кал! Вуаля!

Да, согласен, иногда программисту не хочется потратить 5 минут на изучение библиотеки, а проще написать под свою задачу за 10 минут 15 строк, а потом еще суммарно два часа разбираться почему оно не работает. Но надо четко отдавать себе отчет, когда ты в итоге сделал нечто, что в приличном обществе не показывают, и просто слиться, не демонстрируя свое творение.

Есть конечно нюанс. Здравомыслящий разработчик никогда не напишет такой дурнопахнущий код, поэтому это лишь попытка донести, что у автора поста что-то не так.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

А вот откуда берутся такие? не нравится проходите мимо, конечно лучше потратить 10 минут на бессмысленный высер про чужой "кал".
Не каждый программист вместо 10 строчного кода каждый раз цепляет чужую библиотеку на 918файлов 2,5МБ объема

PS: мой код теги не ломает.
теги иногда "ломает" встроенный strip_tags если например не закрыты кавычки у атрибутов, то есть те которые итак поломаны.
Да и в общем то мне на это все равно, штатная форма не допускает подобного, а если кто захочет отправить запрос в обход формы, то не грех и поломать ему все что можно поломать.

PSS: и кстати следите за своим стаилом общения, а то возникло ощущение что вы форумом ошиблись, сапожники в другом месте.
Последний раз редактировалось Arnowt 2016.02.07, 15:36, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: strip_tags и XSS уязвимость

Сообщение zelenin »

Arnowt писал(а):А вот откуда берутся такие? не нравится проходите мимо, конечно лучше потратить 10 минут на бессмысленный высер про чужой "кал".
да, конечно, когда тебя будут убивать на улице, я не вмешаюсь, помня твои слова.
Теория разбитых окон.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: strip_tags и XSS уязвимость

Сообщение samdark »

zelenin, помягче выражать мысли нельзя?

Arnowt, проблема в том, что автор HTMLPurifier точно знает, что делает, код покрыт множеством тестов и его проверяют тысячи людей. В вашем же случае такого уровня уверенности нет.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

Sam Dark, я ничего плохого про HTMLPurifie не сказал... просто он большой, наверно там много всякого функционала, что в моем случае избыточно.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: strip_tags и XSS уязвимость

Сообщение samdark »

Желание понятно. Но в вопросах безопасности надо либо знать на 100% как производится атака во всех её возможных модицикациях, либо полагаться на проверенное решение. Брать решение, которое не проверено или писать своё под какой-то один случай — прямая дорога к дыре.
Arnowt
Сообщения: 182
Зарегистрирован: 2013.09.13, 11:11

Re: strip_tags и XSS уязвимость

Сообщение Arnowt »

Да, была уязвимость в функции, выложил обновленный вариант.
Если кто найдет баги (ну вдруг) буду благодарен...
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: strip_tags и XSS уязвимость

Сообщение samdark »

Вероятность, что это была не единственная уязвимость, довольно высока...
Ответить