S>>как только пойдет обрашение к буферу, полученному из вне, так сразу есть риск выхода за придел по невнимательности и как результат возможность получить дырку. Не имеет значение на каком языке написано. G>В случае управляемого языка будет эксепшн и никакой опасности исполнить вредоносный код на целевой системе.
Так или иначе тебе придется каснуться физической памяти — не все объекты в системе управляемые. Нужно делать маршалинг, ну вот тут и будет тонкое место.
Потом эксплойтить можно сам рантайм. Как это существует для "безопасных" движков типа JavaScript, Java или PDF. Точно также можно эксплойтить через JavaScript, т.к рантайм ненадежен. Рано или позно все это появится и для .net. Тогда весь миф о безопасности рассеится. Я бы упавать на безопасность только среды не стал.
S>>На C# легко можно течь по памяти. К примеру, создай объект и держи его даже если он уже не нужен. G>Это не утечка, обект будет освобожден когда ссылка на него исчезнет. G>Утечка — когда теряется ссылка на выделенную память.
если твоя программа создает в начале или в процессе работы глобальные объеты и не использует их до конца работы, но хранит ссылку на них, то это утечка, по крайней мере, с точки зрения пользователя.
Re[15]: Какие крупные конторы разрабатывают на C#?
Здравствуйте, shrecher, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
S>>>как только пойдет обрашение к буферу, полученному из вне, так сразу есть риск выхода за придел по невнимательности и как результат возможность получить дырку. Не имеет значение на каком языке написано. G>>В случае управляемого языка будет эксепшн и никакой опасности исполнить вредоносный код на целевой системе.
S>Так или иначе тебе придется каснуться физической памяти — не все объекты в системе управляемые. Нужно делать маршалинг, ну вот тут и будет тонкое место.
Ну обычно всяческий маршалинг это мизрная часть всего кода приложения, если вообще есть. Тот же самый парсер html можно написать только на managed коде. Кроме того далеко не каждый маршалинг может представлять опасность.
S>Потом эксплойтить можно сам рантайм. Как это существует для "безопасных" движков типа JavaScript, Java или PDF. Точно также можно эксплойтить через JavaScript, т.к рантайм ненадежен.
Но ошибок в рантайме меньше, чем в native приложениях, исправление ошибки в рантайме автоматически исправляет её во всех приложениях, работающих на этом рантайме.
S>Рано или позно все это появится и для .net. Тогда весь миф о безопасности рассеится. Я бы упавать на безопасность только среды не стал.
Уже проявлялось несколько раз, еще в первой версии, все исправлено.
Вообще есть тенденция к повышению надежности, безопасности и быстродействию рантаймов. Для приложений такого не наблюдается.
S>если твоя программа создает в начале или в процессе работы глобальные объеты и не использует их до конца работы, но хранит ссылку на них, то это утечка, по крайней мере, с точки зрения пользователя.
С точки зрения пользователя никаких утечек нет. неиспользуемая память рано или позно ляжет в своп и не будет поднята отуда никогда.
Если есть в unmanaged коде утечка, и этот код вызывается мног раз за время работы приложения, то можно всю доступную память забить, в managed коде такое повторить очень сложно.
S>Возражу. Программные продукуты (к примеру MS Office, Vista, Windows7, Photoshop) регулярно, каждый год выпускают новые версии, но как-то особо никто не рвется переходить на C#.
Новые версии — это же не переписывание программы заново. Думаю в этих программах полно кода, написанного еще в 80-х годах прошлого века. Ни один психически здоровый менеджер не отдаст приказ переписывать такое количество столь сложного и давно прекрасно работающего кода.
Где-то я встречал упоминание о том, что разработка таких программ с нуля сопоставима по стоимости со строительством небоскреба. Думаю, это заниженная оценка. Даже не представляю, сколько может стоить разработка операционной системы, аналогичной Windows 7, с нуля. Это просто нереальная задача.
Если бы Microsoft решил заново переписать Windows и Office, он бы подписал себе смертный приговор.
S>Более того, появляются новые библиотеки, вроде QT, которые уже при живом C# создаются на С++.
Если не ошибаюсь, QT ведет свою историю с 1991 года.
Здравствуйте, gandjustas, Вы писали:
G>Ну обычно всяческий маршалинг это мизрная часть всего кода приложения, если вообще есть. Тот же самый парсер html можно написать только на managed коде. Кроме того далеко не каждый маршалинг может представлять опасность.
Если маршалинг прост — читай буффер один раз и все, то да. А если маршалинг по условиям взятым из исходного буфера: подпарзил заголовок — прочитай еще N байт, то это дверь для багов.
S>>Потом эксплойтить можно сам рантайм. Как это существует для "безопасных" движков типа JavaScript, Java или PDF. Точно также можно эксплойтить через JavaScript, т.к рантайм ненадежен. G>Но ошибок в рантайме меньше, чем в native приложениях, исправление ошибки в рантайме автоматически исправляет её во всех приложениях, работающих на этом рантайме.
казалось бы, ведь ActiveScript (в флашах) тоже ультробезопасен, а нет сам рантайм с ошибками. Просто ошибки загноны в другое место, но безопасность системы особенно не повысилась. Для разработчкика это может быть даже хуже: ему надо ждать патча от вендора. К примеру, MS по полгода не фиксит критические ошибки.
G>Вообще есть тенденция к повышению надежности, безопасности и быстродействию рантаймов. Для приложений такого не наблюдается.
Поизучай сайт http://secunia.com/advisories/ Тут тебе целый набор, и Опера, и Адобе и Оффис. И дыры активно растут.
S>>если твоя программа создает в начале или в процессе работы глобальные объеты и не использует их до конца работы, но хранит ссылку на них, то это утечка, по крайней мере, с точки зрения пользователя. G>С точки зрения пользователя никаких утечек нет. неиспользуемая память рано или позно ляжет в своп и не будет поднята отуда никогда.
1. своп небесконечен
2. C++ утечка тоже ляжет в своп.
3. автоматически найти ошибку когда теряются ссылки на глобальные объекты будет сложнее, т.к она зависит от логики работы и не может быть обнаружена по формальным факторам. К примеру, если каждый проход некого цикла вы суете объект в коллекцию и не используете его, то фиг такой лик найдешь.
Re[17]: Какие крупные конторы разрабатывают на C#?
Здравствуйте, shrecher, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
G>>Ну обычно всяческий маршалинг это мизрная часть всего кода приложения, если вообще есть. Тот же самый парсер html можно написать только на managed коде. Кроме того далеко не каждый маршалинг может представлять опасность.
S>Если маршалинг прост — читай буффер один раз и все, то да. А если маршалинг по условиям взятым из исходного буфера: подпарзил заголовок — прочитай еще N байт, то это дверь для багов.
Тут не о багах речь, а о безопасности. Баги всегда бывают, независимо от языка.
S>>>Потом эксплойтить можно сам рантайм. Как это существует для "безопасных" движков типа JavaScript, Java или PDF. Точно также можно эксплойтить через JavaScript, т.к рантайм ненадежен. G>>Но ошибок в рантайме меньше, чем в native приложениях, исправление ошибки в рантайме автоматически исправляет её во всех приложениях, работающих на этом рантайме.
S>посмотри сколько ошибок именно в рантайме: S>http://secunia.com/advisories/34012/
Ага и там же ссылки на фиксы этих ошибок.
S>казалось бы, ведь ActiveScript (в флашах) тоже ультробезопасен, а нет сам рантайм с ошибками. Просто ошибки загноны в другое место, но безопасность системы особенно не повысилась.
Вообще в адобе достаточно хреново относятся к безопасности.
S>Для разработчкика это может быть даже хуже: ему надо ждать патча от вендора. К примеру, MS по полгода не фиксит критические ошибки.
Какая часть из них относится к безопасности?
G>>Вообще есть тенденция к повышению надежности, безопасности и быстродействию рантаймов. Для приложений такого не наблюдается.
S>Поизучай сайт http://secunia.com/advisories/ Тут тебе целый набор, и Опера, и Адобе и Оффис. И дыры активно растут.
Ну и везде есть решения, которые предлагают апгрейдиться до новой версии.
S>>>если твоя программа создает в начале или в процессе работы глобальные объеты и не использует их до конца работы, но хранит ссылку на них, то это утечка, по крайней мере, с точки зрения пользователя. G>>С точки зрения пользователя никаких утечек нет. неиспользуемая память рано или позно ляжет в своп и не будет поднята отуда никогда.
S>1. своп небесконечен
Если утечка разовая, то пофиг.
S>2. C++ утечка тоже ляжет в своп.
Если разовая, то пофиг. Но в C++ бывают утечки в коде, который вызывается многократно. В .NET такого добиться сложно.
S>3. автоматически найти ошибку когда теряются ссылки на глобальные объекты будет сложнее, т.к она зависит от логики работы и не может быть обнаружена по формальным факторам. К примеру, если каждый проход некого цикла вы суете объект в коллекцию и не используете его, то фиг такой лик найдешь.
Такие "лики" находятся очень просто, можно прямо из дебаггера смотреть сколько объектов находятся в каких-то глобальных коллекциях.
А вообще я достотаточно редко видел использование глобальных коллекций, чтобы такой вариант имело смысл рассматривать.
Re[13]: Какие крупные конторы разрабатывают на C#?
Здравствуйте, shrecher, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
S>>>Вот именно, а зачем их переписывать если C++ всех устраивает? Чтобы переходить на другое средство, к примеру, C# нужны веские аргументы и бенефиты. G>>Наверное вопрос не в том устраивает или нет, а вопрос в том с какой целью переписывать и где взять программистов для переписывания.
S>Если бы реальные бенефиты были, то переписали.
S>>>А кроме быстроты лабания кода никаких плюсов .net не дает G>>Ну да, всего-то отсуствие утечек и безопасный код.
S>Ты хочешь сказать, что если на C# написать какой-нибудь парзер (к примеру HTML-я), то в нем не будет уязвимостей только потому, что используется C#? Не верю, как только пойдет обрашение к буферу, полученному из вне, так сразу есть риск выхода за придел по невнимательности и как результат возможность получить дырку. Не имеет значение на каком языке написано.
Если не прилагать для этого специальных усилий (т.е. не использовать unsafe), то то такой дырки в C# не получить.
Re[11]: Какие крупные конторы разрабатывают на C#?
Здравствуйте, shrecher, Вы писали:
S>Здравствуйте, WizardBox, Вы писали:
WB>>Кстати, а сайты мы куда относим? Сейчас очень много ASP.NET web сайтов.
S>Сайты на ASP.NET?! Вот уж новость. Судя по предложению хостеров обычно — PHP и apache. Для серьезных вещей — JSP, CMS.
Известно ли многоуважаемому дону, что серьезные конторы не пользуются услугами сомнительных хостеров. Тем более на php. Так что предложения хостеров — не показатель
Здравствуйте, leonidvp, Вы писали:
L>Здравствуйте
L>Подскажите, пожалуйста, название крупных контор, типа Люксофта, которые разрабатывают на C#. В Москве.