Почему небезопасный контекст кода [связанный с работой указателя] представляет собой угрозу безопасности в C #? - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно было вызвать функцию библиотеки C, которая принимает указатели в качестве аргумента из одной программы на C #. В C # нам нужно защищать операции указателя с ключевым словом # unsafe . Документы Microsoft C # говорят, что использование указателей вызывает проблемы со стабильностью и безопасностью.

В общеязыковой среде выполнения (CLR) небезопасный код называется непроверяемый код. Небезопасный код в C # не обязательно опасен; Это это просто код, безопасность которого не может быть подтверждена CLR. CLR будет поэтому выполняйте небезопасный код только в том случае, если он полностью доверен сборка. Если вы используете небезопасный код, вы обязаны обеспечить что ваш код не представляет угрозы безопасности или ошибки указателя.

А в документах написано

Использование небезопасного кода создает риски безопасности и стабильности.

Я новичок в языке C #. До этого я работал только на языке Си и в среде UNIX. Я понимаю, что неправильный указатель имеет проблемы со стабильностью. Это может привести к сбою программы / ОС или может привести к неожиданным результатам.

Вот мои вопросы:

1) Я не понимаю, как операции с указателями могут привести к проблеме безопасности. Единственное, что я могу думать, это вызвать указатель на функцию, который содержит вредоносный код, но эта ссылка переполнения стека говорит, что небезопасный контекст не нужен для вызова указателя на функцию (пожалуйста, исправьте меня, если мое понимание неверно). Тогда Как отключение операций с указателями повысит безопасность?

2) Мы можем вызывать функции C из программы C #, и эти функции C могут содержать вредоносный код. Может ли CLR обнаруживать эти уязвимости безопасности?

1 Ответ

0 голосов
/ 07 мая 2018

Одним из примеров угроз безопасности при неправильном использовании указателей является использование после освобождения . Одним из примеров этой проблемы является недавно обнаруженная проблема безопасности в Chrome .

Я не очень знаком с C #, но думаю, что CLR не «понимает» код C, а выполняет его напрямую. Поэтому я думаю, что CLR не может анализировать / обнаруживать проблемы с кодом C, который вы хотели бы использовать.

...