SYSLIB0001: kodowanie UTF-7 jest niezabezpieczone
Kodowanie UTF-7 nie jest już szeroko używane między aplikacjami, a wiele specyfikacji obecnie zabrania używania w wymiennych. Jest on również czasami używany jako wektor ataku w aplikacjach, które nie przewidują napotkania danych zakodowanych w formacie UTF-7. Firma Microsoft ostrzega przed użyciem programu , System.Text.UTF7Encoding ponieważ nie zapewnia wykrywania błędów.
W związku z tym następujące interfejsy API są oznaczone jako przestarzałe, począwszy od platformy .NET 5. Użycie tych interfejsów API generuje ostrzeżenie SYSLIB0001
w czasie kompilacji.
- Encoding.UTF7 Właściwość
- UTF7Encoding Konstruktorów
Obejścia
Jeśli używasz Encoding.UTF7 własnego protokołu lub formatu pliku:UTF7Encoding
Przełącz się na przy użyciu polecenia Encoding.UTF8 lub UTF8Encoding. UTF-8 jest standardem branżowym i jest powszechnie obsługiwany w różnych językach, systemach operacyjnych i środowiskach uruchomieniowych. Korzystanie z protokołu UTF-8 ułatwia przyszłą konserwację kodu i zwiększa jego współdziałanie z resztą ekosystemu.
Jeśli porównujesz wystąpienie z elementem EncodingEncoding.UTF7:
Zamiast tego rozważ przeprowadzenie kontroli na dobrze znanej stronie kodowej UTF-7, czyli
65000
. Porównując się ze stroną kodu, należy unikać ostrzeżenia, a także obsługiwać niektóre przypadki brzegowe, takie jak wywołanienew UTF7Encoding()
lub podklasa typu.void DoSomething(Encoding enc) { // Don't perform the check this way. // It produces a warning and misses some edge cases. if (enc == Encoding.UTF7) { // Encoding is UTF-7. } // Instead, perform the check this way. if (enc != null && enc.CodePage == 65000) { // Encoding is UTF-7. } }
Pomijanie ostrzeżenia
Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.
Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.
// Disable the warning.
#pragma warning disable SYSLIB0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0001
Aby pominąć wszystkie SYSLIB0001
ostrzeżenia w projekcie, dodaj <NoWarn>
właściwość do pliku projektu.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
</PropertyGroup>
</Project>
Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.