X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Заказчикам «программной части» и исполнителям-скриптописателям
x64
x64
Topic Starter сообщение 24.11.2015, 23:33; Ответить: x64
Сообщение #1


Приветствую, уважаемые форумчане!

В последнее время довелось лицезреть сорцы нескольких скриптов, сданных исполнителями «Работы для вебмастера». Результат удручил: люди вроде не первый день программируют, некоторые даже имеют пачку хороших отзывов. Состояние шока вызывает качество исполнения. Говоря о «качестве» речь веду не о форматировании кода или выводе каждой HTML-строки с помощью echo. Речь вообще не об оформлении. Разговор о фильтрации входных данных исполнителем и положительных отзывах со стороны заказчика.


Заказчикам

На Форуме можно найди достаточное число отзывов, вида: «Потребовался скрипт. Все исполнители просили 2xx$, а этот согласился сделать за xx$. Работа выполнена быстро и на высоком уровне. Однозначный специалист. Рекомендую!».
Давайте не будем лукавить: не специалист не может оценить качество кода, и вынужден довольствоваться лишь результатами. Таким образом (на примере калькулятора), вводя в поле ожидаемые данные, он получает ожидаемые результаты.
Но! Тот, кто пробует сайт на прочность, не довольствуется ожиданиями кодера.
Посему, потратьте пару минут своего времени и попробуйте ввести в текстовое поле формы «неожиданные» значения. В общем случае, это кавычки — ' и " и символ >.
Для проверки sql-инъекции поочерёдно используются первые 2 символа. Маячком в данном случае будет наличие ошибок на странице.
Для проверки на xss подойдут варианты:
"><i>
'><i>
><i>
смотря как исполнитель осуществляет вывод параметров (понятно, вам не требуется копать код, просто поочерёдно попробуйте 3 варианта). Вводите один из вариантов и отправляете форму. Если часть текста становится наклонным, либо появляются непонятные символы — обычно обратный слеш \ — бейте тревогу.
В зависимости от «тяжести» инъекции злоумышленник может получить права администратора или содержимое базы данных сайта.
Это может показаться странным, но несколько исполнителей создали условия для подобных атак.
В случае каких-то сомнений, выкладывайте «ответственную» часть кода здесь — обсудим.


Исполнителям

Не буду учить, что и как делать. Просто примите несколько советов, особенно если новичок в программировании. В конце концов, пострадать может не только сайт заказчика, но и ваша репутация.
Итак, несколько советов на примере PHP.

1. Приводите входные данные к ожидаемому формату.
Ждёте целое? Делайте хотя бы так:
Код
$_GET['ival'] = isset($_GET['ival']) ? (int) $_GET['ival'] : 0;

Ожидаете дату в виде ГГГГ-ММ-ДД? Не идеальный вариант, но позволяет избежать инъекции:
Код
$_GET['dval'] = isset($_GET['dval']) ? substr($_GET['dval'], 0, 10) : '';
if ( ! preg_match('!^\d{4}-\d{2}-\d{4}$!', $_GET['dval']) ) $_GET['dval'] = '';

Несколько иначе обстоят дела с текстом — данные должны быть в том же виде, что ввёл пользователь.
Код
$_GET['sval'] = isset($_GET['sval']) ? trim($_GET['sval']) : '';

Заметили, что никаких addslashes() и htmlspecialchars() не используется? Первая функция довольно специфична и с вероятностью 99.99% не понадобится, если не знаете для чего это нужно (как вариант — формирование кода для исполнении в eval()). Функция htmlspecialchars() нужна, когда выводите переменную в HTML-контексте. Для примера, есть код:
Код
echo '<input value="' . $_GET['sval'] . '">';

В чистом виде выводится текстовой параметр (помним, что такие данные обычно не обрабатываются). Если параметр передан как "><i>, код будет иметь вид:
<input value""><i><"[дальше наклонное начертание текста с глюками вёрстки]
Этого можно избежать с помощью экранирования таким образом:
Код
echo '<input value="' . htmlspecialchars($_GET['sval']) . '">';

Т. е. экранировать параметры нужно при выводе, а не при получении!

2. При формировании запроса в базу данных пропускайте текстовые параметры через функцию mysql_real_escape_string(), остальные приводите к ожидаемому типу. Не нужно полагаться на addslashes(). В следующем примере он бесполезен:
Код
$q = 'SELECT * FROM table WHERE id = ' . addslashes($_GET['id']);

Можно передать $_GET['id'] как 1 OR 1 — это уже позволяет получить данные всей таблицы. А с помощью установки заведомо несуществующего идентификатора и оператора UNION, злоумышленник при желании получает данные всех доступных текущему пользователю баз/таблиц!

3. Не возлагайте больших надежд на фильтрацию посредством JavaScript. Так можно обмануть заказчика, но не злоумышленника. JS, в данном случае, можно использовать лишь для удобства пользователя. Помните: все пришедшие от пользователя данные, с которыми производятся какие-то действия, необходимо обработать. Это актуально не только для $_GET/$_POST, но и для кук, и даже USERAGENT (идентификатор браузера)!

Не ищите гемор там, где его быть не должно. Даже проверка на допустимость с помощью строгого регулярного выражения лучше, чем отсутствие проверок вообще, либо бездумное использование addslashes/htmlspecialchars в частности.


На этой ноте откланиваюсь и желаю успешных заказов и заказчиков.


Поблагодарили: (6)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Drupal_way
Drupal_way
сообщение 24.11.2015, 23:49; Ответить: Drupal_way
Сообщение #2


Вот почему популярные ЦМС лучше самописи, как правило. Там входные данные обычно проверяются и задаются в правильном формате.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Ссылки для вас!! Акция 50% скидки первым заказчикам!!!
0 Ссылки_Вам 2772 17.5.2017, 13:32
автор: -Linkstoyou-
Открытая тема (нет новых ответов) Требуется вебмастер для написания программной части сайта
4 TK.V 2032 19.11.2012, 21:47
автор: Bandicoot
Открытая тема (нет новых ответов) Изменение цвета части изображения!
0 Panich 3941 22.6.2011, 13:52
автор: -Panich-
Открытая тема (нет новых ответов) Сделаю бесплатно первым четырем заказчикам баннеры, по типу моего
Для своего портфолио
20 nethead 5291 16.2.2010, 20:34
автор: nethead


 



RSS Текстовая версия Сейчас: 18.4.2024, 6:03
Дизайн