Какие-либо проблемы безопасности кодирования, характерные для C#?

В мире C++ существует множество способов сделать годную для использования уязвимость: переполнение буфера, небезопасная обработка жала, различные арифметические приемы, printf проблемы, строки, не заканчивающиеся '\0' и многое другое. Несмотря на большинство этих проблем были решены в Java, существуют некоторые вещи говорить о. Но есть ли какой-либо список типичных уязвимостей кодирования C#-specific? (и не связанный с самой платформой.NET)

13
задан Nick 3 March 2010 в 18:51
поделиться

4 ответа

Вот несколько проблем, с которыми вы можете столкнуться:

  1. Если у вас есть какой-либо интерпретатор языка (HTML, JavaScript и SQL - большая тройка), то у вас все равно могут быть инъекции или XSS-уязвимости.
  2. P / Invoke может вызвать проблемы, особенно если вы выполняете какой-либо настраиваемый маршаллинг. Даже если вы вызываете «безопасный» API через P / Invoke, ваш код маршаллинга может содержать ошибку, которая повреждает или открывает доступ к памяти.
  3. Если вы осуществляете доступ к файлам, вам необходимо убедиться, что ваши файлы всегда находятся в допустимых каталогах. Обязательно выполните дезинфекцию против плохих абсолютных и относительных путей.
  4. Криптография. Хорошее криптографическое программирование действительно сложно, и различные функции безопасности .Net ничего не делают против крипто-атак.
6
ответ дан 2 December 2019 в 00:58
поделиться

Не совсем. Я собираюсь сделать здесь смелое заявление:
Не существует такой вещи, как «специфическая для C # уязвимость программирования, не связанная с платформой .net».

Программа, написанная на C ++, компилируется непосредственно в исполняемый файл машины, поэтому компилятор языка несет прямую ответственность за создание исполняемого кода, следовательно, C ++ может легко «создать уязвимость, которую можно использовать».

Однако программа, написанная на C #, компилируется в IL, который является единственным языком, с которым работает платформа .net. Среда .net создает исполняемый файл машины на основе этого кода IL. Все, что может делать C #, - это просто подмножество того, на что способна платформа .net. Вот как я могу сделать свое смелое заявление. Все, что вы могли бы сделать с C # и создать уязвимость в коде, будет одной из следующих:
1) Ошибка в платформе .net
или
{{1} } 2) Выполнение кода за пределами платформы .net

Таким образом, то, как ваш вопрос в настоящее время сформулирован, заставляет меня думать, что либо вы не полностью осознаёте огромные различия между «написанием кода на C» и «написанием кода для платформа .net "или я неправильно понимаю ваш вопрос. Возможно и то, и другое! 8)

Надеюсь, это поможет!

2
ответ дан 2 December 2019 в 00:58
поделиться

Вероятно, нет из вашего списка проблем, но с этим следует быть осторожным: void *

0
ответ дан 2 December 2019 в 00:58
поделиться

C# основан на .NET, а .NET должен быть безопасным для типов, что означает, что ничего из вашего списка ужасов не применимо к C# или любому другому языку .NET.

Но опять же, в C# есть ключевое слово unsafe, и после этого все ставки сделаны.
Он позволяет использовать настоящие указатели и все, что с ними связано.

5
ответ дан 2 December 2019 в 00:58
поделиться