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

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

Ответ 1

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

  • Если у вас есть какой-либо переводчик языка (HTML, JavaScript и SQL - большая тройка), вы все равно можете иметь уязвимости в области инъекций или XSS.
  • P/Invoke может вызвать проблемы, особенно если вы производите произвольное сортировку. Даже если вы вызываете "безопасный" API через P/Invoke, ваш код маршаллинга может содержать ошибку, которая развращает или раскрывает память.
  • Если вы делаете доступ к файлам, вам необходимо убедиться, что ваши файлы всегда находятся в допустимых каталогах. Не забудьте очистить от плохих абсолютных и относительных путей.
  • Криптография. Хорошее криптографическое программирование действительно сложно, и .Net различные функции безопасности ничего не делают против криптоактивных атак.

Ответ 2

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

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

Ответ 3

Не совсем. Я сделаю смелое выражение здесь:
Нет такой вещи, как "С# -специфическая уязвимость кодирования, которая не связана с платформой .net".

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

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

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

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

Ответ 4

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

Ответ 5

Не забывайте, что вы можете вызывать любой С++ из С#. Я делаю это все время. Поэтому все проблемы переполнения буфера и т.д. Для С++ имеют значение для С#, а также даже, если вы не вызываете напрямую С++, потому что С# вызывает С++ для этого. < ш > Думаю об этом. И любые вызовы COM и призывы маршала так же открыты, насколько это возможно. В Linux вы можете использовать процедуры _r, а в Версии 8 в VС++ вы можете использовать подпрограммы _s, чтобы уменьшить вероятность переполнения буфера (для этого нужны пользовательские буферы и/или максимальные размеры). Единственный способ остановить уязвимости - выключить компьютер и прочитать бумажную книгу (если у нее тоже нет вируса).