XML을 사용하여 타사 웹 서비스와 통신 중입니다. 보안 스캐너가 몇 가지 CWE-216 결함을보고한다는 것을 제외하고는 모든 것이 정상적으로 작동합니다. XMLSerialization을 사용하는 일반 텍스트 암호
암호
는 실제로 다음과 같은LoginDetails
클래스 내에서 메모리에 저장되어
[Serializable()]
public class LoginDetails
{
public string Login { get; set; }
public string Password { get; set; }
}
타사는 일반 텍스트로 전송되는 암호가 필요합니다 (예제 위해 단순화 된). 그래서 불행하게도 나는 여기에서 문제의 선택의 여지가 없다. 내가하고 싶은 일은 필드가 안전하게 저장되고 /되거나 가능한 한 빨리 메모리에서 제거되도록하는 것입니다.
개선의 관점에서 나는 SecureString
을 명백한 이유로 사용하려고 시도했으며 StringBuilder
을 사용하면이 변경이 무효화됩니다. 또한 LoginDetails
클래스에 IDisposable
을 구현하려고했습니다. 이것은 두 속성을 null로 설정하는 것으로 구성됩니다. 나는 여러 가지 토론 (particularly this one)으로 이어졌고 그다지 효과가 없다고 말했습니다.
필드 유형을 SecureString
또는 StringBuilder
으로 변경할 때 문제가 발생합니다. 올바르게 직렬화되지 않아서 요청이 제 3 자에서 실패합니다. XMLSerializer
을 다르게 처리하여이 유형을 다르게 처리 할 수있는 방법이 있습니까? 그렇기 때문에 우리 쪽 메모리에 다소 안전하게 저장되지만 일반 텍스트로 제 3 자에게 전송됩니다. 이러한 보안 시도는 양측에서 시행되지 않을 것인가?
내가 간과 한 것도 있을까요?
많은 감사
같은
finally
블록 내에 배치 될 수있다? – NMGod내가 그 말을 바꿔 보겠습니다. 나는 그들이 그들의 유형에 따라 "올바르게"연재되고 있다고 가정하고있다. SecureString은 직렬화 가능 (이해할 수 없음) 인 반면 StringBuilder는 xx xx StringBuilder>로 직렬화됩니다. 내가 필요한 것은 XMLSerializer를 사용할 때까지 안전성이 있거나 (지금 가지고있는 것보다 안전하다) 암호 속성의 cleartext 값이 제 3 자에게 전송되는 시점입니다. –
Remembber StringBuilder가 비 상속 (Non-Inherit) 인 스크래치. – NMGod