2012-07-11 16 views
7

ServicePointManager.ServerCertificateValidationCallback jest globalnym dobrem statyczne, które mogą zostać zastąpione przez każdego kawałka kodu w aplikacji, po prostu robi:Jakie są powody, dla których usługa ServicePointManager.ServerCertificateValidationCallback została zaprojektowana w ten sposób?

ServicePointManager.ServerCertificateValidationCallback 
    = (sender, cert, chain, sslPolicyErrors) => true; 

Dlaczego decydują się na wdrożenie go w ten sposób? Z pewnością powinna to być właściwość obiektu WebRequest i powód, dla którego ignorujesz certyfikat, powinien mieć bardzo dobry powód.

+0

Więc na co narzekasz, że jest to właściwość statyczna zamiast właściwości instancji, co utrudnia stosowanie różnych zasad w niezależnych częściach aplikacji? – CodesInChaos

+2

Nie, ponieważ jakikolwiek fragment kodu trzeciej strony, który zużywasz jak SDK itp. Może przejść i zastąpić twoje wywołanie zwrotne tam, gdzie jest. – superlogical

+0

To nie wygląda na prawdziwe pytanie do mnie. Po prostu narzekasz na niepotrzebne użycie globalnego, zmiennego stanu. – CodesInChaos

Odpowiedz

5

Inny kod, który może ustawić tę właściwość, nie jest problemem związanym z bezpieczeństwem, ponieważ ustawienie tej właściwości wymaga uprawnień, które nie muszą być nadane kodowi, któremu nie ufasz.

Z drugiej strony zgadzam się, że jest to zły projekt, ponieważ jest to globalny, zmienny stan i należy go unikać. W szczególności powoduje, że korzystanie z różnych zasad walidacji w różnych częściach programu jest niepotrzebnie trudne. Wspólny plik konfiguracyjny, jak sugerujesz, byłby jeszcze gorszym IMO.

Prawidłowy wybór będzie właściwością instancji dla wywołania zwrotnego, podobnie jak używa zwykła klasa SslStream. Nie jestem dostatecznie zaznajomiony z tą częścią frameworka, aby stwierdzić, czy ta właściwość istnieje, a tym samym ServicePointManager.ServerCertificateValidationCallback służy tylko jako wartość domyślna lub jeśli ta globalna zmienna jest jedynym sposobem wpływania na walidację certyfikatu.

Powiązane problemy