Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA3004 |
| Titel | Review code for information disclosure vulnerabilities (Überprüfen von Code auf Sicherheitsrisiken bei der Veröffentlichung von Informationen) |
| Kategorie | Security |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Nein |
| Anwendbare Sprachen | C# und Visual Basic |
Ursache
Eine Ausnahmemeldung, Stapelverfolgung oder Zeichenfolgen-Repräsentation erreicht die Webausgabe.
Standardmäßig analysiert diese Regel die gesamte Codebasis, aber dieses Verhalten ist konfigurierbar.
Regelbeschreibung
Die Offenlegung von Ausnahmeinformationen bietet Angreifern Einblicke in die Interna Ihrer Anwendung, die Angreifern bei der Suche nach anderen Sicherheitsrisiken helfen können.
Diese Regel versucht, eine Ausnahmemeldung, eine Stapelverfolgung oder eine Zeichenfolgendarstellung aufzufinden, die an eine HTTP-Antwort ausgegeben wird.
Hinweis
Diese Regel kann keine Daten über Assemblys hinweg nachverfolgen. Wenn eine Assembly z. B. eine Ausnahme abfängt und diese dann an eine andere Assembly übergibt, die die Ausnahme ausgibt, generiert diese Regel keine Warnung.
Hinweis
Es gibt eine konfigurierbare Einschränkung, wie tief diese Regel den Datenfluss über Methodenaufrufe hinweg analysiert. Weitere Informationen zum Konfigurieren der Einschränkung in einer EditorConfig-Datei finden Sie unter Analysetoolkonfiguration.
So beheben Sie Verstöße
Geben Sie keine Ausnahmeinformationen an HTTP-Antworten aus. Stellen Sie stattdessen eine generische Fehlermeldung bereit. Weitere Informationen finden Sie auf der Seite OWASP: Nicht ordnungsgemäße Fehlerbehandlung.
Wann sollten Warnungen unterdrückt werden?
Wenn Sie wissen, dass Ihre Webausgabe innerhalb der Vertrauensgrenze Ihrer Anwendung liegt und nie nach außen veröffentlicht wird, ist es in Ordnung, diese Warnung zu unterdrücken. Dieser Fall ist selten. Berücksichtigen Sie, dass sich die Vertrauensstellungsgrenze und Datenflüsse Ihrer Anwendung im Laufe der Zeit ändern können.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA3004
// The code that's violating the rule is on this line.
#pragma warning restore CA3004
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_diagnostic.CA3004.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Mithilfe der folgenden Optionen können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Sie können diese Optionen nur für diese Regel, für alle Regeln, für die sie gelten, oder für alle Regeln in dieser Kategorie (Sicherheit), für die sie gelten, konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.
Ausschließen bestimmter Symbole
Sie können bestimmte Symbole, wie z. B. Typen und Methoden, von der Analyse ausschließen, indem Sie die Option excluded_symbol_names festlegen. Sie können beispielsweise festlegen, dass die Regel nicht für Code innerhalb von Typen namens MyType ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Hinweis
Ersetzen Sie das XXXX-Element von CAXXXX durch die ID der entsprechenden Regel.
Zulässige Formate für Symbolnamen im Optionswert (durch | getrennt):
- Nur Symbolname (schließt alle Symbole mit dem Namen ein, unabhängig vom enthaltenden Typ oder Namespace)
- Vollqualifizierte Namen im Dokumentations-ID-Format der Symbole. Jeder Symbolname erfordert ein Symbolartpräfix, z. B.
M:für Methoden,T:für Typen undN:für Namespaces. -
.ctorfür Konstruktoren und.cctorfür statische Konstruktoren
Beispiele:
| Optionswert | Zusammenfassung |
|---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Trifft auf alle Symbole namens MyType zu |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Trifft auf alle Symbole namens MyType1 oder MyType2 zu |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Entspricht der speziellen Methode MyMethod mit der angegebenen vollqualifizierten Signatur. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Ordnet die spezifischen Methoden MyMethod1 und MyMethod2 ihren jeweiligen vollqualifizierten Signaturen zu. |
Ausschließen bestimmter Typen und von diesen abgeleiteten Typen
Sie können bestimmte Typen und ihre abgeleiteten Typen von der Analyse ausschließen, indem Sie die Option excluded_type_names_with_derived_types festlegen. Wenn Sie z. B. festlegen möchten, dass die Regel nicht für Methoden innerhalb von MyType-Typen und von diesen abgeleiteten Typen ausgeführt werden soll, fügen Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzu:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Hinweis
Ersetzen Sie das XXXX-Element von CAXXXX durch die ID der entsprechenden Regel.
Zulässige Formate für Symbolnamen im Optionswert (durch | getrennt):
- Nur Typname (schließt alle Typen mit dem Namen ein, unabhängig vom enthaltenden Typ oder Namespace)
- Vollqualifizierte Namen im Dokumentations-ID-Format des Symbols mit einem optionalen Präfix
T:
Beispiele:
| Optionswert | Zusammenfassung |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Stimmt mit allen MyType-Typen und allen von diesen abgeleiteten Typen überein. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Stimmt mit allen MyType1- oder MyType2-Typen und allen von diesen abgeleiteten Typen überein. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Stimmt mit einem bestimmten Typ MyType überein, der anhand eines angegebenen vollqualifizierten Namens und aller von ihm abgeleiteten Typen identifiziert wird. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Bestimmte MyType1- und MyType2-Typen werden mit ihren entsprechenden vollqualifizierten Namen und allen abgeleiteten Typen abgeglichen. |
Pseudocodebeispiele
Verletzung
using System;
public partial class WebForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs eventArgs)
{
try
{
object o = null;
o.ToString();
}
catch (Exception e)
{
this.Response.Write(e.ToString());
}
}
}
Imports System
Partial Public Class WebForm
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, eventArgs As EventArgs)
Try
Dim o As Object = Nothing
o.ToString()
Catch e As Exception
Me.Response.Write(e.ToString())
End Try
End Sub
End Class
Lösung
using System;
public partial class WebForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs eventArgs)
{
try
{
object o = null;
o.ToString();
}
catch (Exception e)
{
this.Response.Write("An error occurred. Please try again later.");
}
}
}
Imports System
Partial Public Class WebForm
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, eventArgs As EventArgs)
Try
Dim o As Object = Nothing
o.ToString()
Catch e As Exception
Me.Response.Write("An error occurred. Please try again later.")
End Try
End Sub
End Class