내가 상속 한 이전 .NET 웹 앱은 이상한 "어셈블리 보안 검사"에 흩어져 있습니다. 어셈블리의 이름 인 공개 키가 어셈블리를 호출 할 때 의 공개 키와 길이가 같은지 확인합니다 어셈블리를 실행 중입니다.왜 .net 웹 응용 프로그램은 호출 어셈블리 이름의 공개 키가 EXECUTING 어셈블리와 동일한 길이인지 확인해야합니까?
CheckAssembly(System.Reflection.Assembly.GetCallingAssembly(), System.Reflection.Assembly.GetExecutingAssembly(), this);
... 그리고 그 방법은 다음과 같습니다 :
통화
는 다음과 같이public static void CheckAssembly(Assembly callingAssembly, Assembly executingAssembly, object useObject)
{
byte[] assemblyPublicKey = executingAssembly.GetName().GetPublicKey();
byte[] callingPublicKey = callingAssembly.GetName().GetPublicKey();
if (callingPublicKey == null || assemblyPublicKey.Length != callingPublicKey.Length)
{
throw new SecurityException("The calling assembly does not have permission to use objects of type '" + useObject.GetType().FullName + "'");
}
for (int i = 0; i < assemblyPublicKey.Length; i++)
{
if (assemblyPublicKey[i] != callingPublicKey[i])
{
throw new SecurityException("The calling assembly does not have permission to use objects of type '" + useObject.GetType().FullName + "'");
}
}
}
나는이 교환되지 않은 어셈블리 (DLL 파일)의 경우 검사 생각 또는 변경 또는 무엇이든. 그 맞습니까? 그렇지 않다면,이 코드는 무엇을하고 있습니까? 그것이 왜 쓰여졌 을까?
필자는 .net 프레임 워크가 필요할 경우이를 수행 할 것이라고 생각했습니다. 권리?
어쩌면이 응용 프로그램이 웹 응용 프로그램이 아닌 winforms 응용 프로그램 일 때의 오래된 코드일까요? 웹 응용 프로그램이므로 서버에있는 DLL을 완벽하게 제어 할 수 있으므로 보안 위험이 없습니다. 맞습니까?
(필요한 경우 추가 정보를 제공 할 수 있음).
이 코드에 가장 적합한 곳은 thedailywtf.com입니다. –
감사합니다. @HansPassant, 그래서 전적으로 쓸모 없다는 가정은 맞습니까? – MGOwen
메신저는 첫 번째 수표가 아마도 두 번째 수표 (더 집약적 인 것 같아요)를하지 않을 것이라고 추측합니다. 나는 그들이 얼마나 다른 길이가 될지 모릅니다. –