Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSS Link Cleaner, Функция 
V
    Опции темы
kat_ru
Дата 4.3.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Насколько актуальна функция ниже?
Критика, пожелания, что можно или нужно изменить - исправить? Если не сложно как?

Заранее благодарен за ответ.

Код

    function XSSLinkCleaner() {
        $flag = 0;
        $QString = html_entity_decode( urldecode( $_SERVER['QUERY_STRING'] ) );
        $var = explode("&", $QString);
             foreach($var as $k => $v) {
                if (
                    !strpos($v, "<")  and !strpos($v, ">")  and
                    !strpos($v, "'")  and !strpos($v, "/")  and
                    !strpos($v, ".")  and !strpos($v, ",")  and
                    !strpos($v, "|")  and !strpos($v, "%")  and
                    !strpos($v, ";")  and !strpos($v, "*")  and
                    !strpos($v, "?")  and !strpos($v, "}")  and
                    !strpos($v, "{")  and !strpos($v, "]")  and
                    !strpos($v, "[")  and !strpos($v, "+")  and
                    !strpos($v, "-")  and !strpos($v, "(")  and
                    !strpos($v, ")")  and !strpos($v, "^")  and
                    !strpos($v, "$")  and !strpos($v, "~")  and
                    !strpos($v, "@")  and !strpos($v, "!")  and
                    !strpos($v, " ")  and !strpos($v, "\"") and
                    !strpos($v, "\\") and !strpos($v, "^")  and
                    !strpos($v, "`")  and !strpos($v, ":")
                ) {
                    if (!is_null($v) and $v !== "") $var_tmp[] = $v;
                } else $flag = 1;
            }
            if (isset($var_tmp) and count($var_tmp) > 0) {
                foreach($var_tmp as $k => $v) {
                    $NQString .= ($k == 0) ? "?".$v : $v;
                }
            } else $NQString = "?";
            if ($flag == 1) header("Location: ".$NQString."", TRUE, 301);
    }


Это сообщение отредактировал(а) kat_ru - 4.3.2008, 15:50
PM MAIL   Вверх
A1ekcandr
Дата 4.3.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



зачем столько strpos в этом случае сделть легче через регулярное выражение
PM MAIL   Вверх
mishaSL
Дата 4.3.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Согласен c A1ekcandr, проще через 1 регулярное выражение.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
GeneralElectric
Дата 4.3.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Непонятно, зачем такой большой набор символов.
Вообще, было бы неплохо, если автор словами сформулировал задачу, которую он хочет решить.
В таких вопросах всегда полезно это делать, поскольку толкование XSS уязвимости у всех может быть разным.

PM MAIL   Вверх
kat_ru
Дата 4.3.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Например так?
Код

    function XSSLinkCleaner() {
        $flag = 0;
        $QString = html_entity_decode( urldecode( $_SERVER['QUERY_STRING'] ) );
        $var = explode("&", $QString);
        $preg = "[!|@|#|\\$|%|\^|&|\*|\(|\)|-|_|<|>|\?|,|;|:|\"|'|`|~|\\\|\||{|}|\[|\]]";
        if (is_array($var) and count($var) > 0) {
            foreach ($var as $k => $v) {
                if (!is_null($v) and $v !== "") {
                    if (preg_match($preg, $v)) $flag = 1;
                    else $NQString .= ($k == 0) ? "?".$v : "&".$v;
                }
            }
            if ($flag == 1) {
                $NQString = ($NQString == "" or is_null($NQString)) ? "?" : $NQString;
                header("location: ".$NQString."", true, 301);
            }
        }
    }



GeneralElectric
    Избавить адресную строку от ненужных символов...
Хотя наверно проще и надежней сделать список только разрешенных символов.
PM MAIL   Вверх
source777
Дата 5.3.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата

  $preg = \"[!|@|#|\\\\$|%|\\^|&|\\*|\\(|\\)|-|_|<|>|\\?|,|;|:|\\\"|\'|`|~|\\\\\\|\\||{|}|\\[|\\]]\";
Прочитай описание синтаксиса регэкспов и поясни нафига ты этот забор из | построил?

Цитата(kat_ru @  4.3.2008,  17:42 Найти цитируемый пост)
Хотя наверно проще и надежней сделать список только разрешенных символов.
Вот именно, а ещё лучше сразу весь URI проверить на соответствие: |^[a-z 0-9\\.:_-/]+$|i 

P.S. Что тут на форуме за злобный баг, слеши обратные расставляющий???




Это сообщение отредактировал(а) source777 - 5.3.2008, 00:32


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
kat_ru
Дата 5.3.2008, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Цитата(source777 @  5.3.2008,  00:29 Найти цитируемый пост)
Цитата(kat_ru @  4.3.2008,  17:42 Найти цитируемый пост)
Хотя наверно проще и надежней сделать список только разрешенных символов.
Вот именно, а ещё лучше сразу весь URI проверить на соответствие: |^[a-z 0-9\\.:_-/]+$|i 

P.S. Что тут на форуме за злобный баг, слеши обратные расставляющий???


У меня с регулярками туго... ((( Не понимаю и писец... Перечитывал уже раз 10 на php.net

Если не сложно можете по символьно объяснить логику вот этого выражения: " |^[a-z 0-9\\.:_-/]+$|i  "
PM MAIL   Вверх
SelenIT
Дата 5.3.2008, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(kat_ru @  5.3.2008,  01:45 Найти цитируемый пост)
по символьно объяснить логику вот этого выражения: " |^[a-z 0-9\\.:_-/]+$|i  " 

| - открывающий ограничитель шаблона
^ - начало строки
[ - начало символьного класса, допускающего:
a-z - лат.буквы
  - пробел (не понимаю только, нафига он в урле — по-моему, он лишний)
0-9 - цифры (можно написать короче - \d)
\\ - обратный слеш (заэкранирован, чтобы PHP не подумал, что это заэкранированная точка. Кстати, в урле обратный слеш, имхо, тоже не нужен)
. : _ / - любой из этих символов
- - вообще-то, между символами внутри квадратных скобок задает диапазон символов. Но в данном случае начало диапазона (_ - 0x5F) находится в кодовой таблице раньше его конца (/ - 0x2F), поэтому, судя по мануалу
Цитата

Символ минус '-' внутри класса используется для задания символьного диапазона. Например, [d-m] соответствует любому символу, находящемуся между 'd' и 'm', включая сами символы 'd' и 'm'. В случае, если '-' необходим, как член класса, он должен находиться в такой позиции, в которой он не может интерпретироваться как диапазон (как правило, это первый и последний символ описания класса) либо экранироваться при помощи обратного слеша.
будет интерпретироваться как собственно дефис. Лучше, конечно, подобных неоднозначностей не допускать и следовать совету выше.
] - конец символьного класса
+ - означает, что входящие в класс символы могут встречаться один и более раз
$ - конец строки.
| - закрывающий ограничитель шаблона
i - модификатор, указывающий на независимость от регистра

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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
source777
Дата 6.3.2008, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(SelenIT @  5.3.2008,  03:36 Найти цитируемый пост)
\\\\ - обратный слеш (заэкранирован, чтобы PHP не подумал, что это заэкранированная точка. Кстати, в урле обратный слеш, имхо, тоже не нужен)
[cuted]он не заэкранирован, это как раз заэкранированная точка, но этот дурацкий форум добавляет обратные слеши в моих сообщениях и к кавычкам \" \' и к обратным слешам \\... ТАМ ДОЛЖЕН БЫТЬ ОДИН ОБРАТНЫЙ СЛЕШ, А НЕ ДВА. не смогли на форуме нормально addslashes, stripslashes применить...

Цитата

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

Цитата(SelenIT @  5.3.2008,  03:36 Найти цитируемый пост)
 пробел (не понимаю только, нафига он в урле — по-моему, он лишний)
По всякому бывает, пример Wkipedia нормально обрабатывает пробелы в URL, так что может и пригодиться, но это конечно по желанию...


kat_ru, общий смысл |^[a-z 0-9\\.:_-/]+$|i состоит в том, чтобы проверить, что URL состоит из латинских букв, цифр, пробелов, точек, значков подчёркивания, дефисов, двоеточий, прямых и обратных слешей. 
Ещё более мощным решением будет вырезать из URL все символы кроме вышеобозначенных, тогда сайт даже не заметит, что была попытка ввести какие-то иные символы...

P.S. Поскольку я уже отчаялся добиться от этого форума вменяемой работы, то смотри вложение, надеюсь хотя бы его форум не испаганит... Код там 100%-рабочий вместе с большим комментарием...

Это сообщение отредактировал(а) skyboy - 6.3.2008, 00:55

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  clear_uri.php 1,28 Kb


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Хрипа
Дата 6.3.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



Я делаю так:
Код

$arr = array_merge($_POST,$_GET);
foreach($arr as $key => $value) $arr[$key] = mysql_escape_string(strip_tags($value));

Если у вас уже готовый скрипт то интегрировать можно так:
Код

foreach($_GET as $key => $value) $_GET[$key] = mysql_escape_string(strip_tags($value));

--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
solenko
Дата 6.3.2008, 11:00 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



А смысл в такой фильтрации на входе? Фильтровать нужно:
1. На этапе вставки в базу (от того, тчо может вызвать креш базы)
2. На выводе данных (от всего, чего мы не ждем в выводе)

А то как-то сомнительна практическая ценность получается.
1. Как сохранить html (это нужно практически в каждом проекте)? 
2. Вы расчитываете, что в базе у вас корректные данные, т.к. вы их туда вставили. Но вы забываете, что отдаете проект заказчику. И он может, например, импортировать данные в базу минуя ваши фильтры.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
flashaa
Дата 6.3.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Согласен с Solenko. Просто фильтровать URL вот так - пытаться убить конкретных людей с помощью выброса атомной бомбы на целую страну. Не проще ли отфильтровать те параметры, которые надо отфильтровать а не пускать все под общую гребенку? К тому же если захотим вдруг пропустить фильтруемые символы, придется отключать эту фильтровалку и писать отдельно под каждый запрос (что и надо было делать).

Это сообщение отредактировал(а) flashaa - 6.3.2008, 11:46
PM MAIL   Вверх
SelenIT
Дата 6.3.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(source777 @  6.3.2008,  00:27 Найти цитируемый пост)
это как раз заэкранированная точка

В квадратных скобках точку экранировать не надо.

Цитата(source777 @  6.3.2008,  00:27 Найти цитируемый пост)
пример Wkipedia нормально обрабатывает пробелы в URL

Сорри, прошу доказательств. Желательно не через браузер (который любезно сам заменяет пробелы на %20 при сабмите), а в виде скриншота сессии телнета.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
kat_ru
Дата 6.3.2008, 14:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Цитата

А смысл в такой фильтрации на входе? Фильтровать нужно:
1. На этапе вставки в базу (от того, тчо может вызвать креш базы)
2. На выводе данных (от всего, чего мы не ждем в выводе)

А то как-то сомнительна практическая ценность получается.
1. Как сохранить html (это нужно практически в каждом проекте)? 
2. Вы расчитываете, что в базе у вас корректные данные, т.к. вы их туда вставили. Но вы забываете, что отдаете проект заказчику. И он может, например, импортировать данные в базу минуя ваши фильтры.



предположим на страничке есть <div id="main"></div>
в случае если зайти на страничку по такой ссылке: http://host/?a=<script>getE...).innerHTML=XSS Here!</script> то это и будет XSS.

Цитата

Я делаю так:
Выделить всёкод PHP
1:
2:
    
$arr = array_merge($_POST,$_GET);
foreach($arr as $key => $value) $arr[$key] = mysql_escape_string(strip_tags($value));

Если у вас уже готовый скрипт то интегрировать можно так:
Выделить всёкод PHP
1:
    
foreach($_GET as $key => $value) $_GET[$key] = mysql_escape_string(strip_tags($value));


Для POST данных нужен немного другой подход... ибо каждая форма имеет свой обработчик. А например mysql_escape_string (кстати: mysql_real_escape_string) не сработает и даже выведет ошибку в случае если нет активного соединения с БД...


Код

   function XSSLinkCleaner() {
........................
            if ($flag == 1) {
                $NQString = ($NQString == "" or is_null($NQString)) ? "?" : $NQString;
                header("location: ".$NQString."", true, 301);
            }
        }
    }


строка "header("location: ".$NQString."", true, 301);"

301 Статус заголовка HTTP скажет поисковикам например, что страница переехала окончательно и накопленный рейтинг надо бы перенести на $NQString.

Ведь если на множество форумов распространят ссылку http://host/?a=<script>getE...L="XSS Here!";</script> то это цитируемость страницы... которая переместиться на http://host/?

Поправьте если не прав...

Спасибо всем! Думаю вопрос решен...



PM MAIL   Вверх
SelenIT
Дата 6.3.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(kat_ru @  6.3.2008,  14:07 Найти цитируемый пост)
в случае если зайти на страничку по такой ссылке: http://host/?a=<script>getE...).innerHTML=XSS Here!</script> то это и будет XSS.

Да ну? Яваскрипт из адресной строки может выполниться в одном случае - по "ссылке" с "протоколом" javascript:. Другое дело, если в коде страницы где-то вызывается echo $_GET['a']  без проверки (например, перед результатами поиска отображается сама поисковая фраза) - тогда да, возможностей "творчески переосмыслить" эту страницу масса smile. Но это как раз второй случай в списке solenko.

Цитата(kat_ru @  6.3.2008,  14:07 Найти цитируемый пост)
кстати: mysql_real_escape_string) не сработает и даже выведет ошибку в случае если нет активного соединения с БД...

Правильно, это ее документированное поведение. Потому что зачем она нужна, если не собираетесь ничего записывать? А если собираетесь - то почему не готовы? ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
source777
Дата 6.3.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(solenko @  6.3.2008,  11:00 Найти цитируемый пост)
А смысл в такой фильтрации на входе?
Смысл очень большой, и состоит он в том, чтобы показывалась нормальная страница, если пользователь случайно или специально введёт что-то типа кавычки, вместо какого-нить невменяемого сообщения типа страница не найдена... Никто не отменяет фильтрацию при обращении к БД, но это оффтопик в данном случае...

Цитата(SelenIT @  6.3.2008,  12:54 Найти цитируемый пост)
Сорри, прошу доказательств. Желательно не через браузер (который любезно сам заменяет пробелы на %20 при сабмите), а в виде скриншота сессии телнета. 
Если ты не заметил, там сначала urldecode вызывается, след никаких %20 в строке уже не будет, а вот пробелы будут. яснышко?

Цитата(SelenIT @  6.3.2008,  12:54 Найти цитируемый пост)
В квадратных скобках точку экранировать не надо.
ничего, не помешает.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Feldmarschall
Дата 6.3.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



source777, ты очень невнимательно читаешь реплики собеседников.
Во-первых, solenko задал вопрос про фильтрацию не тебе, а Хрипа. или ты хочешь сказать, что согласен с его методом?
Во-вторых, не теряй нить разговора с SelenIT. Речь шла о том, что пробела никакого в урле быть, разумеется, не может.
И википедия, разумеется, никакие пробелы в урле не понимает. Это должно быть понятно любому человеку, который хоть непного представляет себе работу протокола НТТР, в котором пробел является служебным символом. Тем более, что SelenIT подробно все объяснил.
PM   Вверх
source777
Дата 7.3.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(Feldmarschall @  6.3.2008,  17:00 Найти цитируемый пост)
Во-первых, solenko задал вопрос про фильтрацию не тебе, а Хрипа. 
Да? Где это указано в его сообщении?


Цитата(Feldmarschall @  6.3.2008,  17:00 Найти цитируемый пост)
Во-вторых, не теряй нить разговора с SelenIT. Речь шла о том, что пробела никакого в урле быть, разумеется, не может.И википедия, разумеется, никакие пробелы в урле не понимает. Это должно быть понятно любому человеку, который хоть непного представляет себе работу протокола НТТР, в котором пробел является служебным символом. Тем более, что SelenIT подробно все объяснил.
Это я подробно всё объяснил, а ты RTFM по функции urldecode, может уразумеешь откуда там пробелы берутся... Причём я это уже объяснял, но ты НАСТОЛЬКО невнимательно читаешь реплики собеседников, что даже не заметил...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



source777, мы с Feldmarschallом прицепились исключительно к фразе
Цитата(source777 @  6.3.2008,  00:27 Найти цитируемый пост)
пример Wkipedia нормально обрабатывает пробелы в URL

Тут уж урлдекодом не отбиться, придется отвечать за сказанное smile. Хотя, если вдуматься, фраза
Цитата(source777 @  5.3.2008,  00:29 Найти цитируемый пост)
ещё лучше сразу весь URI проверить на соответствие: |^[a-z 0-9\\.:_-/]+$|i 

тоже явно не подразумевала URL-декодирование (по определению URI), так что нефиг отмазываться smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
source777
Дата 7.3.2008, 01:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(SelenIT @  7.3.2008,  01:04 Найти цитируемый пост)
тоже явно не подразумевала URL-декодирование (по определению URI), так что нефиг отмазываться
это было очевидное(из кода) идеоматическое сокращение \"URI после обработки функцией urldecode\"(откуда ж я знал, что здесь даже комодераторам надо всё разжевывать...), а вы бы лучше на код внимательнее смотрели, тогда бы понимали что имеется в виду!..




--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



source777, то, что эта фраза относилась к коду kat_ru, было абсолютно неочевидно - для большинства людей фраза, начинающаяся с "а лучше сразу <сделать по-другому>" звучит как предложение полной альтернативы, а не маленького усовершенствования smile

Но во фразе про Википедию даже этими "очевидными умолчательствами" не прикрыться, там просто явный ляп smile 

Это сообщение отредактировал(а) SelenIT - 7.3.2008, 01:29


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
source777
Дата 7.3.2008, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(SelenIT @ 7.3.2008,  01:04)
source777, мы с Feldmarschallом прицепились исключительно к фразе
Цитата(source777 @  6.3.2008,  00:27 Найти цитируемый пост)
пример Wkipedia нормально обрабатывает пробелы в URL

Тут уж урлдекодом не отбиться, придется отвечать за сказанное

Да уж вы  с Feldmarschallом, напоминает название одного фильма \"...ой и ещё ...ее\", с точки зрения пользователя, он вводит пробел, и его не колышит, что он сначала заменяется на %20, а потом на _. К тому же %20 - это в данном случае есть ничто иное как обозначение пробела и его вполне корректно пробелом и называть...  Яснышко? 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



source777, давай определимся.
Если этот рег просматривает строку после декодирования, то в нем не хватает как минимум поддержки русских букв. И многих других символов, вполне передающихся через квери стринг.
PM   Вверх
SelenIT
Дата 7.3.2008, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(source777 @  7.3.2008,  01:29 Найти цитируемый пост)
с точки зрения пользователя, он вводит пробел, и его не колышит

Вот я, как пользователь, которого не колышет, и попросил показать пример - в телнете smile. Почему нельзя, если это корректно?

Цитата(source777 @  7.3.2008,  01:29 Найти цитируемый пост)
К тому же %20 - это в данном случае есть ничто иное как обозначение пробела и его вполне корректно пробелом и называть...

Логично... Если на сарае написано известно что (любимое слово Арт.Лебедева), значит, сарай - это оно самое и есть  smile Так, что ли, по этой логике?

Программирование - это область точной науки. Играть со словами и убеждать самого себя "да я ж совсем другое имел в виду" тут бессмысленно - программа все равно будет делать не это, а буквально то, что ты ей сказал. Яснышко?  smile

Добавлено через 1 минуту и 20 секунд
...ох, придет сейчас PARROT и надерет нам всем троим уши... smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 01:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



SelenIT, давай отстанем от википедии.
В конце концов, яндекс тоже корректно обрабатывает пробелы в урле. Если говорить о раскодированном варианте.

Ведь нас, по большому счету, интересует не уличить друг дружку в неправоте, а сделать нормальную функцию.
Чем и предлагаю совместно заняться =)

Для начала я бы четко ограничил область её  применения.
В каких случаях нас интетесует защита от XSS? 
PM   Вверх
SelenIT
Дата 7.3.2008, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Feldmarschall, хм... мне казалось, что насчет применимости все по местам давно расставил solenko, а дальше пошел чистый флейм...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Я не могу настаивать на своем мнении, но мне кажется, что solenko отвечал не автору. Возможно, я так думаю потому, что сам хотел ответить Хрипа то же самое.

По сути же вопроса комментарий solenko не совсем в тему: переданное в квери стринг обычно не пишут в базу.

Но эти рассуждения, как раз, хорошая база для определения области применения.
Значит, с при помещении в базу у нас все просто: на входе мускулевский искейп, на выходе - htmlspecialchars. И никаких XSS.

Теперь переходим к обработке урлов. 
Тут тоже, наверное, не стоит резать все чохом, а обрабатывать только там, где нужно.
Насколько я себе представляю механизм, мы делаем поиск с пространичным выводом:
Код

?query=word&page=1

и подставляем это дело в ссыки на страницы.
malicious user подпихивает нам вместо word конструкцию, которую мы сами, своими руками, пишем в ссылку. так?
PM   Вверх
SelenIT
Дата 7.3.2008, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Feldmarschall, пожалуй, ты прав. Меня сбило с толку, что следующим постом автор ответил solenko.

Цитата(Feldmarschall @  7.3.2008,  01:57 Найти цитируемый пост)
malicious user подпихивает нам вместо word конструкцию, которую мы сами, своими руками, пишем в ссылку. так?

Так. Получается, теоретически там может быть (после URL-декодирования) что-то вроде " onclick="злобный_скрипт_в_одну_строку". Но опять же, опасно это только при выводе в HTML и точно так же обезвреживается htmlspecialchars-ом, разве нет?

Опять же, если мы собираем ссылки руками, скорее всего мы их сразу же урленкодим (напр., тем же http_build_query), а что опасного может быть в заурленкоденной строке?

Это сообщение отредактировал(а) SelenIT - 7.3.2008, 03:00


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(SelenIT @  7.3.2008,  02:11 Найти цитируемый пост)
 Но опять же, опасно это только при выводе в HTML 


Ну так я ведь и пишу именно о самом, что ни на есть, выводе в HTML.

Цитата(SelenIT @  7.3.2008,  02:11 Найти цитируемый пост)
скорее всего мы их сразу же урленкодим 


О! А вот это в самую точку. Действительно - urlencode-им. А саму строку поиска, выводимую в поле формы - htmlspecialchars-им.

Получается, именно эти две функции гарантируют нас от XSS? вроде бы, они предусамтривают все варианты вывода данных обратно юзеру... Или нет?
PM   Вверх
SelenIT
Дата 7.3.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Имхо, в случае корректного HTML (все атрибуты в кавычках и т.д.) - да. По крайней мере, сам пока дыр не вижу...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Получается, развесистая функция 
а) не нужна вообще
б) тем более не нужна на входе
в) на выходе все сделает htmlspecialchars

Вот теперь тема действительно соответствует статусу решённой =)

Впрочем, хотелось бы подождать мнений других участников.
Вообще, короткое и точное определение XSS (не принципа, а формализация учзвимости) не помешало бы.
А то глупо решать задачу, не представляя точно, в чем она заключается...


PM   Вверх
source777
Дата 7.3.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(Feldmarschall @  7.3.2008,  01:33 Найти цитируемый пост)
Если этот рег просматривает строку после декодирования, то в нем не хватает как минимум поддержки русских букв. И многих других символов, вполне передающихся через квери стринг. 
Да, пож-та добавляй, я ж и про пробел говорил, что это на усмотрение разработчика, ибо нет такой цели охватить все валидные символы(\" \' к ним тоже относятся), есть цель ограничить допустимые символы теми, которые будут использоваться...

Цитата(SelenIT @  7.3.2008,  01:35 Найти цитируемый пост)
Программирование - это область точной науки. Играть со словами и убеждать самого себя "да я ж совсем другое имел в виду" тут бессмысленно - программа все равно будет делать не это, а буквально то, что ты ей сказал. Яснышко?  smile
Поверь мне, это всё такая фигня по сравнению с тем, что весами измеряют массу! smile 



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(source777 @  7.3.2008,  13:18 Найти цитируемый пост)
это всё такая фигня по сравнению с тем, что весами измеряют массу!

Засчитано  smile  smileНо помнить об этой тонкости все же стоит - мало ли, вдруг придется взвешивать что-либо в падающем самолете, напр., для проверки, выдержит ли парашют... ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



source777, как показало наше небольшое исследование, цель ограничить допустимые символы не имеет прямого отношения к исходной задаче - защите от XSS

Разве что, отдельным пунктом идет информация, помещаемая в теги <script>.
Здесь надо разобраться с правилами экранирования.

Это сообщение отредактировал(а) Feldmarschall - 7.3.2008, 16:57
PM   Вверх
source777
Дата 7.3.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(Feldmarschall @  7.3.2008,  16:54 Найти цитируемый пост)
source777, как показало наше небольшое исследование, цель ограничить допустимые символы не имеет прямого отношения к исходной задаче - защите от XSS
зато попутно обеспечивает первый уровень защиты от SQL-инъекций. Да и топик-стартер сказал, что он понимает под XSS:
Цитата(kat_ru @  4.3.2008,  17:42 Найти цитируемый пост)
Избавить адресную строку от ненужных символов...

естественно это имеет мало общего с XSS в принципе, однако именно в этом и была исходная задача...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Feldmarschall @  7.3.2008,  16:54 Найти цитируемый пост)
отдельным пунктом идет информация, помещаемая в теги <script>

А когда такое бывает нужно? Имхо, кто вставляет юзерские данные в теги <script>, тому никакая фильтрация не поможет...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
kat_ru
Дата 7.3.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Цитата

http ://host/1.php?page=1&a=%3Cscript%3Ealert(123);%3C/script%3E

Не совсем красивая ссылка не правда ли?
Да и действительно вдруг забудешь вот - это?
Цитата

О! А вот это в самую точку. Действительно - urlencode-им. А саму строку поиска, выводимую в поле формы - htmlspecialchars-им.


в этом случае редирект с 301 статусом на адрес http ://host/1.php?page=1 будет куда лучше и полезнее... ;)

а относительно - пробелов, кириллицы и т.п. дык это индивидуально )))



PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



SelenIT, перейди в список тем форума, и подведи мышку к знаку вопроса в квадратных скобочках ;-)
А потом согласись, что это весьма распространенная практика

source777, у SQL инъекций, как и у осетрины, не бывает уровней свежести.
уровень только один.
данные прослешиваются обкавычиваются
управляющие элементы выбираются из вариантов, заранее прописаных в скрипте, или приводятся к инту.
Все. 
Больше никаких уровней нет.

Тут наоборот - чем больше уровней, тем меньше защита. У семи нянек дитя без глазу - говорит русская пословица.
Один уровень, но сделанный с пониманием проблемы, надежнее десяти, но основанных на слухах и домыслах.

Именно поэтому я хочу решать исходную задачу, а не то, что написал автор.

Добавлено через 14 минут и 7 секунд
kat_ru, об этом и речь.
Что есть универсальные решения, которые работают для любых случаев, а есть системы, состоящие из заплаток, ставящихся "индивидуально".

Здесь тот же самый неверный подход, который мы видим в борьбе с SQL инъекциями.
Прослешивание/обкавычивание нужно делать всегда. Не только, и не столько ради защиты, а потому что синтаксис такой.
И добавлять к этому синтаксису проверки на разнообразные "вредные символы" - бессмысленно. И вредно. Получается, у нас не база данных, а дискотека с фейсконтролем. 

Так и в твоем случае. Урленкодить надо всегда. Не потому что защита, а потому что синтаксис такой. 
Соблюдаешь ты синтаксис пхп? И синтаксис хтмл надо соблюдать. 

PM   Вверх
source777
Дата 7.3.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(Feldmarschall @  7.3.2008,  17:45 Найти цитируемый пост)
source777, у SQL инъекций, как и у осетрины, не бывает уровней свежести.
уровень только один.
данные прослешиваются обкавычиваются
управляющие элементы выбираются из вариантов, заранее прописаных в скрипте, или приводятся к инту.
Все. 
Больше никаких уровней нет.
Вот от такой точки зрения и получается куча кривых сайтов, которые URL типа http://site/page/\'1 никогда не отобразят так же как http://site/page/1, а как говорится сообщение об ошибке - первый шаг к завершению взлома.. 
Лишая защиту многоуровневости - ты лишаешь сайт многих разных вкусностей, например лога попыток SQL-инъекций, для дальнейшего забанивания IP.

Цитата(Feldmarschall @  7.3.2008,  17:45 Найти цитируемый пост)
Тут наоборот - чем больше уровней, тем меньше защита. У семи нянек дитя без глазу - говорит русская пословица.
Один уровень, но сделанный с пониманием проблемы, надежнее десяти, но основанных на слухах и домыслах.
Кстати многоуровневая система защиты применяется везде, где хоть чуточку думают о безопасности...

Цитата(Feldmarschall @  7.3.2008,  17:45 Найти цитируемый пост)
Что есть универсальные решения, которые работают для любых случаев, а есть системы, состоящие из заплаток, ставящихся "индивидуально".
Ууу, как всё запущено, обзови ещё это священным Граалем и поклоняйся ему... 
Пока ты ничего универсального правда не придумал... ведь вышеописанную ситуацию твой код обработать не сможет, т.к. получит либо \'1, либо 0, но никак не нужное значение = 1.



Это сообщение отредактировал(а) source777 - 7.3.2008, 18:53


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
kat_ru
Дата 7.3.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Другого не будет



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 16.1.2007
Где: Moscow City

Репутация: нет
Всего: нет



Цитата

Так и в твоем случае. Урленкодить надо всегда. Не потому что защита, а потому что синтаксис такой. 
Соблюдаешь ты синтаксис пхп? И синтаксис хтмл надо соблюдать. 


Чту и уважаю! И соответственно соблюдаю.




PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Feldmarschall @  7.3.2008,  17:45 Найти цитируемый пост)
перейди в список тем форума, и подведи мышку к знаку вопроса в квадратных скобочках ;-)

Каюсь, ни одной не нашел. И сам ни разу не встречался...

Цитата(source777 @  7.3.2008,  18:41 Найти цитируемый пост)
куча кривых сайтов, которые URL типа http://site/page/\'1 никогда не отобразят так же как http://site/page/1

Имхо, как раз отображать одно и то же для разных урлов - криво, и с точки зрения SEO, и чисто эстетически. Я бы для первого урла выдавал 404 и не парился.

Цитата(source777 @  7.3.2008,  18:41 Найти цитируемый пост)
не нужное значение = 1

Чем это оно нужное? Очевидно же, что это ошибка, равно как и http://site/page/nepomnuvrodebylo1 - нет такого раздела, и баста...

Цитата(source777 @  7.3.2008,  18:41 Найти цитируемый пост)
Лишая защиту многоуровневости - ты лишаешь сайт многих разных вкусностей, например лога попыток SQL-инъекций

Где связь? И чем фильтрация query_string-а может помочь логированию иньекций? Имхо, наоборот помешает - насколько я понял, при твоем подходе для описанной ситуации в лог запишется безобидная единичка... smile

Если на то пошло, то настоящая многоуровневость - это именно то, за что ратует Feldmarschall, когда с каждой заразой борются прицельно в том месте, где она может дать о себе знать: с SQL-иньекцией (включая лог попыток таковой) - при составлении запроса, с XSS - при выводе. И лишает ее как раз попытка нагородить все заборы в одном месте, как в том анекдоте ("...надеть ср-во от гол. боли, намазать йодом, надеть поверх другое, намазать зеленкой, перебинтовать... и никаких половых контактов!").


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
source777
Дата 7.3.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(SelenIT @  7.3.2008,  20:46 Найти цитируемый пост)
Чем это оно нужное? Очевидно же, что это ошибка
Это такая же ошибка, как и то, что возможно универсальное решение... В мире так мало что универсально, даже законы сохранения имеют границы применимости, поэтому любое \"универсальное\" решение имеет как минимум одну ошибку...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



source777, я имел в виду, что для системы, ожидающей http://site/page/1, появление на входе http://site/page/'1 - явно нештатная ситуация, и   выдавать при ней тот же контент, что и для http://site/page/1 - имхо, некорректно. И вообще разные URL для одного контента - зло. В данном примере, имхо, логично (и для пользователя, и для поисковиков) выдать кастомную страницу 404 со ссылками на http://site/page/1http://site/page/11 и т.п. ("возможно, вам нужно это?"), как это делает, например, онлайновый PHP-мануал smile. Плюс на всякий случай взять IP этого юзера "на карандаш", чтоб при повторном подозрительном запросе забанить его (если хочется;)...

Это сообщение отредактировал(а) SelenIT - 7.3.2008, 21:55


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



SelenIT, вы незаметно перешли к обсуждению вопросов юзабилити. А эти вопросы, в отличие от технических, действително имеют много вариантов решения. 
Думаю, тут давно уже пора поставить точку. 
Каждый остался при своем мнении, и врядли его уже изменит.

Хочу сказать спасибо автору и source777 за то, что они заставили меня лишний раз задуматься о проблеме XSS и придумать приемлемое универсальное решение.
Жаль только, что source777 не привел конкретных примеров неудачности универсального решения, а ограничился общими фразами о том, что это плохо.

Подход kat_ru... Не знаю. Наверное, имеет право на существование. Он сродни волшебным кавычкам: "а вдруг сам прослешить забудешь? Лучше мы на автомате все входящее прослешим! а что данные побьются, то это не беда. пострипаем при нужде".
PM   Вверх
SelenIT
Дата 7.3.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Feldmarschall @  7.3.2008,  22:05 Найти цитируемый пост)
вы незаметно перешли к обсуждению вопросов юзабилити

Имхо, тут вопрос на стыке юзабилити и защитного программирования, а именно - что делать с мусором на входе. Безотносительно к юзабилити (которым ради безопасности, действительно, и малость пожертвовать не грех) я категорически не согласен с вариантом, при котором мусор на входе рассматривается как вариант штатного случая, да еще идет гадание, какого именно.

Цитата(Feldmarschall @  7.3.2008,  22:05 Найти цитируемый пост)
примеров неудачности универсального решения

Сорри, тут уже я потерял нить, что мы в итоге приняли за таковое? У меня сложилось мнение, что речь была о чем-то абстрактном smile

Цитата(Feldmarschall @  7.3.2008,  22:05 Найти цитируемый пост)
спасибо автору и source777

+1

Цитата(Feldmarschall @  7.3.2008,  22:05 Найти цитируемый пост)
Подход kat_ru... Не знаю. Наверное, имеет право на существование.

В каких ситуациях?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 7.3.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ну, жили же волшебные кавычки много лет. И до сих пор живут на многих сайтах. 
Но вреда-то от них не так уж много. Ну поругается немного source777, на неверно отображённый рег, но это ведь не смертельно =)

Цитата(SelenIT @  7.3.2008,  22:14 Найти цитируемый пост)
что мы в итоге приняли за таковое?

Ну, я для себя решил, что htmlspecialchars+rawurlencode предохраняют меня от XSS. Буду рад услышать возражения.

PM   Вверх
source777
Дата 7.3.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 2
Всего: 56



Цитата(Feldmarschall @  7.3.2008,  22:05 Найти цитируемый пост)
придумать приемлемое универсальное решение.
так приемлимое или универсальное? ты его сформулируй в виде кода и определись, ибо слова \"универсальное\" и \"приемлимое\" явно несочетаемы...


Это сообщение отредактировал(а) source777 - 8.3.2008, 15:59


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
SelenIT
Дата 7.3.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Feldmarschall @  7.3.2008,  22:26 Найти цитируемый пост)
поругается немного source777, на неверно отображённый рег

С тем багом, кстати, вообще какая-то сверхъестественная загадка. Волшебные кавычки явно ни при чем - не могут же они по-разному работать для разных пользователей? Есть шанс найти еще одно исключение для FAQ-а ;)

Цитата(Feldmarschall @  7.3.2008,  22:26 Найти цитируемый пост)
htmlspecialchars+rawurlencode предохраняют меня от XSS

Я того же мнения, плюс аксиома "все значения атрибутов - в кавычках". Для меня это общий принцип (универсальный;), на основании которого я всегда могу сделать
Цитата(source777 @  7.3.2008,  22:34 Найти цитируемый пост)
приемлемое
решение для каждого конкретного случая. И пока не вижу разумных случаев, где этого не было бы достаточно.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1787 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.