programing

ASP에서 SecureString을 사용하면 어떤 이점이 있습니까?NET?

oldcodes 2023. 9. 1. 21:20
반응형

ASP에서 SecureString을 사용하면 어떤 이점이 있습니까?NET?

내가 올바르게 이해한 것은 앱이 메모리, 가비지 힙 또는 디스크에 페이징된 메모리에 대한 난해한 공격으로부터 안전하도록 일반 텍스트를 메모리에서 보호하기 위한 것입니다.SecureString은 관리되지 않는 바이트로 공급되며 관리되지 않는 바이트를 한 번에 하나씩 사용합니다. 그러면 메모리에서 문자열이 지워집니다. (잘못하면 수정합니다!)

ASP.NET에서 비밀은 웹 양식으로 수집되고 HTTPS에 다시 게시됩니다. 그러면 Request 개체는 양식의 모든 요청 값을 이름 값 쌍으로 변환하여 컬렉션에 넣습니다. 예: Request["TxtPassword"]-- 문자열을 가져오기도 전에 이미 메모리에 안전하게 기록되었습니다.더 나쁜 것은, 내가 컨트롤을 사용하고 있다면, 보안되지 않은 표현은 TextBox 속성에서 더 많은 관리 문자열을 가질 것입니다.

이 SecureString으로 무엇이든 하려면 관리되지 않는 문자열을 사용하는 API가 필요합니다. 그래서 저장된 proc 매개 변수나 다른 많은 것에 보안 문자열을 사용할 수 없는 것 같습니다.

제가 잘못하고 있는 건가요, 아니면 보안되지 않은 문자열의 복사본을 관리되는 메모리에 유출하지 않고 SecureString을 사용하려고 하는 것은 어리석은 짓인가요?

OAuth 또는 Windows auth로 전환하는 것은 옵션이 아닙니다.

정확하게 추론한 것과 이미 언급한 다른 것들처럼 보안 문자열을 사용하여 ASP에서 보안에 중요한 데이터를 저장하는 것은 의미가 없습니다.NET 형식입니다. 해당 데이터가 이미 일반 텍스트로 메모리에 있기 때문입니다.

그러나 다음과 같은 다른 시나리오가 있습니다.SecureString중요한 데이터는 프로그램 자체에서 생성되므로 작업이 끝난 후에는 메모리에 남아 있으면 안 되므로 권장합니다.예를 들어, 쉐어포인트 사이트를 프로그래밍 방식으로 생성하거나 시스템 간에 인증 정보를 전송합니다.

과거에는 민감한 데이터의 수명을 최대한 단축하는 것이 더 쉬웠습니다.스택에 할당할 수 있으며 프로그램을 사용하는 즉시 삭제할 수 있습니다.

char secret[512];
generate_secret(secret, sizeof(secret));
do_something_with(secret);
memset(secret, 0, sizeof(secret));
// Secret data is now gone.

그러나 이러한 접근 방식은 주로 다음과 같은 이유로 관리되는 문자열에서는 불가능합니다.

  • 그들은 스택에 할당되지 않았습니다.
  • 그것들은 불변이기 때문에 지워질 수 없습니다.
  • 그것들은 일회용이 아니기 때문에 GC가 데이터를 개방하는 시간에 대한 보장은 없습니다.메모리 상태에 따라 해제되지 않을 수도 있습니다.

SecureString에서는 이 문제를 가변적이고 일회용으로 해결하려고 합니다. 이를 통해 다음과 같이 기록할 수 있습니다.

using (SecureString secret = new SecureString()) {
    GenerateSecret(secret);
    secret.MakeReadOnly();
    DoSomethingWith(secret);
}
// Secret data is now gone.

SecureString은 시스템 간의 직접 호출을 위한 네트워크 자격 증명을 할당하는 데 가장 적합합니다.웹 영역에서는 자격 증명이 웹을 통해 들어온 경우 일반 텍스트로 되어 있지만 표준 자격 증명 호출(ftp, 디렉터리 서비스 등)을 통해 해당 자격 증명을 다시 보내야 하는 경우 SecureString을 사용하는 것이 통과 방법으로 문제가 되지 않습니다.문자열이 이미 일반 텍스트로 서버 시스템에 있는 것은 맞지만, 시스템 간의 설치 공간을 최소화할 수 있습니다.로컬에서만 이 암호를 사용하는 경우 SecureString이 크게 필요하지 않을 수 있습니다.

하지만 좋은 보안 습관은 결코 시간 낭비가 아닙니다.

저는 당신이 그것의 기본을 가지고 있다고 생각합니다.SecureString은 클라이언트 측의 관점에서 설계되었습니다.따라서 WPF/Winforms 앱(및 Silverlight는 그 안에 있는지 기억하지 못할 수도 있음)의 경우 문자열을 처음으로 처리하지 않았기 때문에 서버 쪽 앱에 비해 훨씬 가치가 있습니다.

내가 유일하게 누락된 사용에 플래그를 표시한 것은SecureString보안 코드 검토를 수행할 때는 응용프로그램에 의해 데이터가 암호화되고 재사용될 수 있는 경우입니다.

예를 들어 웹 사이트 백엔드가 타사 또는 자격 증명이 필요한 다른 내부 리소스와 통신해야 하는 경우.이것들은 해시될 수 없기 때문에, 저는 그것들을 사용할 것입니다.SecureStringTLS를 통해 요청을 작성해야 하는 경우.

가능한 경우 Windows Data Protection API를 사용할 수도 있습니다.

할 점은 다같다니습과음의 입니다.SecureString가능한 한 짧은 시간 동안 메모리에 내용을 저장하는 것입니다.

내가 잘못 알고 있는 것이 아니라면 다음 솔루션을 사용하여 CLR의 문자열 관리에서 입력을 차단할 수 있습니다. 웹 API: MultipartMemoryStreamProvider를 사용할 때 다중 파트 값에 액세스하는 방법은 무엇입니까?

ExecutePostProcessingAsync(...) 메서드의 FormData는 ReadAsByteArrayAsync()로만 읽으며 도중에 문자열이 되어서는 안 됩니다.

도중에 입력을 안전하게 유지하려면 여전히 https가 필요합니다.

언급URL : https://stackoverflow.com/questions/4463821/is-there-any-benefit-to-using-securestring-in-asp-net

반응형