Обучение
Модуль
Guide to Secure .NET Development with OWASP Top 10 - Training
Evaluate security risks that come with insecure application development patterns and practices
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Еще одной проблемой является потенциал для дыр безопасности, эксплуатируемых условиями гонки. Существует несколько способов, в которых это может произойти. Подтопии, которые следуют описанию некоторых основных ошибок, которые разработчик должен избежать.
Если метод Dispose класса (дополнительные сведения см. в разделе "Сборка мусора") не синхронизирован, возможно, что код очистки внутри Dispose может выполняться несколько раз, как показано в следующем примере.
Sub Dispose()
If Not (myObj Is Nothing) Then
Cleanup(myObj)
myObj = Nothing
End If
End Sub
void Dispose()
{
if (myObj != null)
{
Cleanup(myObj);
myObj = null;
}
}
Так как эта реализация Dispose не синхронизирована, можно Cleanup
вызывать сначала одним потоком, а затем вторым потоком, прежде чем _myObj
задать значение NULL. Зависит ли это от того, что происходит при выполнении Cleanup
кода. Основная проблема с несинхронизированными реализациями Dispose включает использование дескрипторов ресурсов, таких как файлы. Неправильное удаление может привести к неправильному использованию дескриптора, что часто приводит к уязвимостям системы безопасности.
В некоторых приложениях можно получить доступ к членам класса другим потокам до полного запуска конструкторов классов. При необходимости необходимо просмотреть все конструкторы классов, чтобы убедиться, что при этом не должно возникнуть никаких проблем безопасности или синхронизации потоков.
Код, который кэширует сведения о безопасности или использует операцию security Assert для доступа к коду, также может быть уязвим для условий расы, если другие части класса не синхронизированы соответствующим образом, как показано в следующем примере.
Sub SomeSecureFunction()
If SomeDemandPasses() Then
fCallersOk = True
DoOtherWork()
fCallersOk = False
End If
End Sub
Sub DoOtherWork()
If fCallersOK Then
DoSomethingTrusted()
Else
DemandSomething()
DoSomethingTrusted()
End If
End Sub
void SomeSecureFunction()
{
if (SomeDemandPasses())
{
fCallersOk = true;
DoOtherWork();
fCallersOk = false;
}
}
void DoOtherWork()
{
if (fCallersOK)
{
DoSomethingTrusted();
}
else
{
DemandSomething();
DoSomethingTrusted();
}
}
Если есть другие пути к DoOtherWork
вызову из другого потока с тем же объектом, ненадежный вызывающий объект может проскользнуть мимо запроса.
Если код кэширует сведения о безопасности, убедитесь, что вы просматриваете ее для этой уязвимости.
Условия гонки также могут возникать в объекте, который ссылается на статический или неуправляемый ресурс, который затем освобождается в его методе завершения. Если несколько объектов совместно используют ресурс, управляемый в методе завершения класса, объекты должны синхронизировать весь доступ к такому ресурсу.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Guide to Secure .NET Development with OWASP Top 10 - Training
Evaluate security risks that come with insecure application development patterns and practices
Документация
Безопасность и создание кода "на лету" - .NET
Создание кода от имени кода с меньшим доверием, который выполняется при более высоком доверии, является проблемой безопасности, особенно если вызывающий объект может повлиять на создание кода.
Обеспечение безопасности данных - .NET
Объявите данные состояния как частные или внутренние переменные, чтобы ограничить доступ к нему. К таким данным по-прежнему можно обращаться с помощью отражения, сериализации и отладки.
Безопасность и ввод данных пользователем - .NET
Код может передавать введенные пользователем данные в качестве параметров другому коду, что может повлиять на безопасность. Можно сделать диапазон проверка, чтобы отклонить проблемные входные данные.
Рекомендации по безопасному написанию кода для .NET - .NET
Разработка кода для работы с . Разрешения, применяемые NET и другие принудительное применение, помогают предотвратить доступ вредоносного кода к данным или выполнять другие действия.