Поиск ошибок и улучшений в ПО

93
Поиск ошибок и улучшений в ПО Применительно на web-интерфейсах, сайтах и cs.stu Максим Мирошниченко WebProduction

Upload: webproduction

Post on 09-Mar-2016

250 views

Category:

Documents


2 download

DESCRIPTION

Лекция-доклад для студентов ЧГТУ кафедры ИКС

TRANSCRIPT

Page 1: Поиск ошибок и улучшений в ПО

Поиск ошибок и улучшений в ПОПрименительно на web-интерфейсах,

сайтах и cs.stu

Максим МирошниченкоWebProduction

Page 2: Поиск ошибок и улучшений в ПО

SQL-инъекция(SQL-injection)

Page 3: Поиск ошибок и улучшений в ПО

SELECT * FROM `table` WHERE `id`=’{$x}’;

Page 4: Поиск ошибок и улучшений в ПО

$x = 10

Page 5: Поиск ошибок и улучшений в ПО

$x = 10’ OR 1=1 OR id=’1

Page 6: Поиск ошибок и улучшений в ПО

SELECT * FROM `table` WHERE id=’{$x}’;

+

$x = 10’ OR 1=1 OR id=’1

=

SELECT * FROM `table`WHERE `id`= 10’ OR 1=1 OR id=’1’

Page 7: Поиск ошибок и улучшений в ПО

Инъекция в оператор SELECT как правило безобидна

(для mysql начиная с 3.23 и выше)

Но инъекция в DELETE сносит всю таблицу!А инъекция в UPDATE “уничтожает” все данные!

Page 8: Поиск ошибок и улучшений в ПО

DELETE FROM `table` WHERE `id`=’{$x}’;

Если получиться передать в $x кавычки - всем данным в таблице наступит конец.

DELETE FROM `table`WHERE `id`=’1’ OR 1=1 OR id=’2’;

Page 9: Поиск ошибок и улучшений в ПО
Page 10: Поиск ошибок и улучшений в ПО
Page 11: Поиск ошибок и улучшений в ПО
Page 12: Поиск ошибок и улучшений в ПО
Page 13: Поиск ошибок и улучшений в ПО

http://frontzmin.org/view_post.php?id=992это означает, что где-то есть update :)

Page 14: Поиск ошибок и улучшений в ПО
Page 15: Поиск ошибок и улучшений в ПО
Page 16: Поиск ошибок и улучшений в ПО
Page 17: Поиск ошибок и улучшений в ПО
Page 18: Поиск ошибок и улучшений в ПО
Page 19: Поиск ошибок и улучшений в ПО
Page 20: Поиск ошибок и улучшений в ПО
Page 21: Поиск ошибок и улучшений в ПО
Page 22: Поиск ошибок и улучшений в ПО

Экранируйте одинарные кавычки!

$x = mysql_escape_string($x);или

$x = str_replace(“ ‘ ”, “ \’ ”, $x);или

просто не пишите sql-запросы руками :)

Page 23: Поиск ошибок и улучшений в ПО

Проверить ресурс на SQL-инъекцию:

добавьте в URL к параметру одинарную кавычку и просто смотрите, что будет :)

Page 24: Поиск ошибок и улучшений в ПО
Page 25: Поиск ошибок и улучшений в ПО
Page 26: Поиск ошибок и улучшений в ПО

На cs.stu в API есть методы,которые допускают инъекции,

но нету контроллеров,которые эти методы вызывают ;)

Page 27: Поиск ошибок и улучшений в ПО
Page 28: Поиск ошибок и улучшений в ПО
Page 29: Поиск ошибок и улучшений в ПО

Да, это был баг.Но не критичный :)

А нужно было показывать страницу 404...

Page 30: Поиск ошибок и улучшений в ПО

XSSCross-site-scripting

Page 31: Поиск ошибок и улучшений в ПО

Пассивный XSS - это всего-лишь прямой вывод GET/POST-параметра в страницу.

Активный XSS - это возможность сделать запрещенную вставку (img, js, flash) в

комментарий, публикацию и т.д.

Page 32: Поиск ошибок и улучшений в ПО
Page 33: Поиск ошибок и улучшений в ПО

http://.../page.html?param=</script><script>alert(‘BUGAGA!’);...

Page 34: Поиск ошибок и улучшений в ПО
Page 35: Поиск ошибок и улучшений в ПО
Page 36: Поиск ошибок и улучшений в ПО

На cs.stu вроде-как нету активныхXSS-уязвимостей :)

А раньше были...

Page 37: Поиск ошибок и улучшений в ПО
Page 38: Поиск ошибок и улучшений в ПО

Как с бороться с XSS:

Активный XSS: проверяйте данные, которые сохраняете от пользователей.

Пассивный XSS: если параметр из URL приходится показывать на странице -

проверяйте его.

Page 39: Поиск ошибок и улучшений в ПО

Поиск ошибок и улучшений в формах

ввода

Page 40: Поиск ошибок и улучшений в ПО

Опять кавычки, но уже двойные :)

Page 41: Поиск ошибок и улучшений в ПО

<input type=”text” value=”данные” ... />

Page 42: Поиск ошибок и улучшений в ПО

<input type=”text” value=”данные” ... />

+

если пользователь ввел в данные двойную кавычку

=

<input type=”text” value=”дан”ные” ... />

Page 43: Поиск ошибок и улучшений в ПО

Это уже баг.

<input type=”text” value=”дан”ные” ... />

Page 44: Поиск ошибок и улучшений в ПО

<input type=”text” value=”дан” /> <script> alert(‘XSS’);</script>” ... />

Это пассивный XSS.

Page 45: Поиск ошибок и улучшений в ПО

На cs.stu в формах нету пассивного XSS, но разорвать <input> двойной кавычкой можно.

Баг.

Page 46: Поиск ошибок и улучшений в ПО
Page 47: Поиск ошибок и улучшений в ПО

Ошибки и улучшения в полях ввода дат

Page 48: Поиск ошибок и улучшений в ПО

Любимый и правильный формат дат для разработчиков:

yyyy-mm-dd hh:ii:ss(Y-m-d H:i:s)

Но 99% пользователей его на дух не переносят :)

Page 49: Поиск ошибок и улучшений в ПО
Page 50: Поиск ошибок и улучшений в ПО

Пользователи могут ввести:2009-12-09

09-12-09 - фатальный вариант

2009.12.0912.09.200912,09,200912 09 2009

09/12/2009 - фатальный вариант для англоязычных (формат d/m/y)

12/09/2009 - фатальный вариант для русскоязычных (формат m/d/y)

09/12/09 - фатальный вариант

2009 Dec 99 dec 09 и еще +100500 вариантов

Page 51: Поиск ошибок и улучшений в ПО

Чтобы все остались довольны:

1. Дату, которую вводит пользователь проганяем через strtotime или аналоги.

2. Добавляем каледарик для поля ввода.

3. Формат даты по умолчанию делаем в соответствии с локалью пользователя/севера.

(тяжело)

Page 52: Поиск ошибок и улучшений в ПО
Page 53: Поиск ошибок и улучшений в ПО

Исключения для дат рождения

Page 54: Поиск ошибок и улучшений в ПО
Page 55: Поиск ошибок и улучшений в ПО
Page 56: Поиск ошибок и улучшений в ПО
Page 57: Поиск ошибок и улучшений в ПО

Но если пользователю приходиться заполнять сотни полей с датами (админу, модератору), то:

dd-mm-yydd-mm-yyyy

dd.mm.yydd.mm.yyyy

Page 58: Поиск ошибок и улучшений в ПО

Поле для ввода емейла:

1. Нужна проверка формата [email protected]. Нужна проверка формата [email protected]

(спасибо GMail)

Page 59: Поиск ошибок и улучшений в ПО

Если при ошибочном заполнении формы введенные данные слетают, пользователь

второй раз форму не заполнит.

Page 60: Поиск ошибок и улучшений в ПО
Page 61: Поиск ошибок и улучшений в ПО
Page 62: Поиск ошибок и улучшений в ПО
Page 63: Поиск ошибок и улучшений в ПО

Обращайте внимание на длинну и порядок полей ввода

Page 64: Поиск ошибок и улучшений в ПО

Поиск “орфографических” визуальныхошибок

(и не только орфографических)

Page 65: Поиск ошибок и улучшений в ПО

Выравнивания по ширине в web’e НЕТ!

Page 66: Поиск ошибок и улучшений в ПО
Page 67: Поиск ошибок и улучшений в ПО
Page 68: Поиск ошибок и улучшений в ПО
Page 69: Поиск ошибок и улучшений в ПО
Page 70: Поиск ошибок и улучшений в ПО
Page 71: Поиск ошибок и улучшений в ПО
Page 72: Поиск ошибок и улучшений в ПО
Page 73: Поиск ошибок и улучшений в ПО

Тире − это &mdash;Минус − это “-”

Ссылка должна подчеркиваться или быть подчеркнутой.

Page 74: Поиск ошибок и улучшений в ПО
Page 75: Поиск ошибок и улучшений в ПО
Page 76: Поиск ошибок и улучшений в ПО

Расположение элементовна страницах

Page 77: Поиск ошибок и улучшений в ПО
Page 78: Поиск ошибок и улучшений в ПО
Page 79: Поиск ошибок и улучшений в ПО
Page 80: Поиск ошибок и улучшений в ПО
Page 81: Поиск ошибок и улучшений в ПО
Page 82: Поиск ошибок и улучшений в ПО
Page 83: Поиск ошибок и улучшений в ПО
Page 84: Поиск ошибок и улучшений в ПО
Page 85: Поиск ошибок и улучшений в ПО
Page 86: Поиск ошибок и улучшений в ПО
Page 87: Поиск ошибок и улучшений в ПО
Page 88: Поиск ошибок и улучшений в ПО
Page 89: Поиск ошибок и улучшений в ПО

Как все происходит,если нету тестирования...

Page 90: Поиск ошибок и улучшений в ПО
Page 91: Поиск ошибок и улучшений в ПО
Page 92: Поиск ошибок и улучшений в ПО

http://pm.stu.cn.ua/