2011-02-16 6 views
0

요구 사항 문서를 읽습니다.비동기 호출로 보안 취약점이 발생합니까?

요구 사항 중 하나는 비동기 호출이 있어서는 안된다는 것입니다. 보안 요구 사항 인 것 같습니다.

질문 비동기 호출의 보안 취약점은 무엇입니까? 또는 그들을 금지하는 다른 이유?

모든 전송은 Https/SSL을 통해 이루어집니다. 호출은 2 시스템 간의 웹 서비스입니다.

+3

무엇으로부터 무엇을 비동기식으로 호출합니까? –

+9

기술적 인 디자인 결정을 내리는 관리자처럼 들립니다. – awm

답변

2

있는 유일한 방법은 은 "완료"이벤트가 스푸핑 따라서 응용 프로그램에 악의적 인 데이터를 공급 할 수있는 약간의 기회가 될 수 있다는 것입니다.

그러나 나는 그 가능성이 떨어진다 고 생각했을 것입니다.

4

비동기 호출에는 본질적으로 문제가 없지만 작업하기가 더 어려울 수 있습니다. 내가 생각할 수있는

2

비동기 호출은 프로세스를 호출 할 때 다른 스레드를 생성하고 부모 스레드가 계속 비즈니스를 수행하는 동안 결과를 수신하는 프로세스에서 하나의 스레드로 정의되며 동일한 호출이 동 기적으로 수행되는 것보다 안전합니다. 이 두 프로세스의 유일한 차이점은 프로세스 외부 관찰자의 관점에서 볼 때 사이드 스레드는 주 스레드 대신 호출 결과를 기다리는 동안 차단되는 스레드라는 것입니다. 새 스레드는 새 스택 및 실행 포인터를 가져 오지만 프로세스의 다른 모든 스레드와 힙을 공유하며 스레드는 다른 스레드의 스택에있는 변수를 참조로 액세스 할 수 있습니다. 동일한 메모리 공간에서 실행되는 동일한 프로그램입니다. 코드가 하나가 아닌 두 위치에서 실행되는 것입니다.

또한 비동기 작업이없는 C# 프로그램을 작성할 수도 없습니다. 런타임에는 많은 조작이 내장되어 있습니다. 가비지 콜렉션 (예 : 가령 다양한 I/O 레이어와 통신하기 위해 런타임에서 사용되는 스레드) 이벤트 중심의 UI 프로그래밍은 많이 쓰입니다. 프로그램의 "주 스레드"는 사용자가 무언가를 할 때마다 런타임의 "UI 스레드"에 의해 호출됩니다. 그렇지 않으면 그냥 기다리고있어.

2

비동기 호출은 흔히 일 수있는 경쟁 조건이있어 보안 취약점이 발생할 수 있습니다. 이 솔루션은 양탄자 아래를 청소하고, 문제을 하지 이해하는 -

그러나, 이러한 이유로 철저하게이를 금지하는 것은 그들이 때로는lead to security vulnerabilities 수 있기 때문에 부호있는 정수의 사용을 금지하는 것과 같다.

2

비동기 호출에서는 일반적으로 호출의 마지막 부분이 임의 스레드에서 실행되기 때문에 호출의 적절한 컨텍스트를 유지하기가 더 어려워집니다. 실행시 스레드 로컬 객체 (예 : ASP.Net의 HttpContext.Current) 일반 정적/스레드 로컬 객체는 올바르게 의존하는 코드를 실행하기 전에 올바르게 복원되어야합니다.

비동기 호출을 허용하지 않으면 데스크톱 응용 프로그램의 응답하지 않는 UI와 서비스 응용 프로그램의 성능 문제를 보장합니다.

다른 모든 사람들이 비동기 코드를 작성하는 것이 동기식보다 어렵다는 것을 지적했습니다. 해당 코드를 작성하는 데 도움이되는 라이브러리가 있습니다. 즉 http://msdn.microsoft.com/en-us/magazine/cc546608.aspx

관련 문제