CA3008: XPath-injektálási biztonsági rések kódjának áttekintése
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA3008 |
Cím | XPath-injektálási biztonsági rések kódjának áttekintése |
Kategória | Biztonság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A potenciálisan nem megbízható HTTP-kérés bemenete XPath-lekérdezést ér el.
Ez a szabály alapértelmezés szerint a teljes kódbázist elemzi, de ez konfigurálható.
Szabály leírása
Ha nem megbízható bemenettel dolgozik, ügyeljen az XPath-injektálási támadásokra. Az XPath-lekérdezések nem megbízható bemenettel történő létrehozása lehetővé teheti, hogy a támadó rosszindulatúan manipulálja a lekérdezést, hogy nem kívánt eredményt adjon vissza, és esetleg közzétehesse a lekérdezett XML tartalmát.
Ez a szabály xPath-kifejezést elérő HTTP-kérésekből próbál bemenetet keresni.
Feljegyzés
Ez a szabály nem tudja nyomon követni az adatokat a szerelvények között. Ha például egy szerelvény felolvassa a HTTP-kérés bemenetét, majd átadja azt egy XPath-lekérdezést végrehajtó másik szerelvénynek, ez a szabály nem fog figyelmeztetést eredményezni.
Feljegyzés
Konfigurálható korlátja van annak, hogy ez a szabály milyen mélyre fogja elemezni az adatfolyamokat a metódushívások között. A korlátozás Szerkesztőkonfigurációs fájlban való konfigurálásáról az Analyzer Configuration című témakörben olvashat.
Szabálysértések kijavítása
Az XPath-injektálási biztonsági rések javításának néhány módszere:
- Ne hozzon létre XPath-lekérdezéseket a felhasználói bemenetből.
- Ellenőrizze, hogy a bemenet csak biztonságos karakterkészletet tartalmaz-e.
- Escape idézőjelek.
Mikor kell letiltani a figyelmeztetéseket?
Ha tudja, hogy biztonságosnak ellenőrizte a bemenetet, akkor nem baj, ha letiltja ezt a figyelmeztetést.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA3008
// The code that's violating the rule is on this line.
#pragma warning restore CA3008
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA3008.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Biztonság), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott szimbólumok kizárása
Bizonyos szimbólumokat, például típusokat és metódusokat kizárhat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
típusok egyikén sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak szimbólumnév (a névvel ellátott összes szimbólumot tartalmazza, függetlenül attól, hogy milyen típusú vagy névtérrel rendelkezik).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek. Minden szimbólumnévhez szimbólum típusú előtag szükséges, például
M:
metódusokhoz,T:
típusokhoz ésN:
névterekhez. .ctor
konstruktorok és.cctor
statikus konstruktorok számára.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Megegyezik az összes elnevezett MyType szimbólummal. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Megegyezik az összes elnevezett MyType1 szimbólummal vagy MyType2 . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Megfelel a megadott metódusnak MyMethod a megadott teljes jogosultsággal rendelkező aláírással. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Egyezik az adott metódusokkal MyMethod1 és MyMethod2 a megfelelő, teljes mértékben minősített aláírásokkal. |
Adott típusok és származtatott típusok kizárása
Bizonyos típusokat és azok származtatott típusait kizárhatja az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
és származtatott típusok egyik metódusán sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak típusnév (a névvel rendelkező összes típust tartalmazza, függetlenül attól, hogy milyen típust vagy névteret tartalmaz).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek opcionális
T:
előtaggal.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Megfelel az összes névvel ellátott MyType típusnak és az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Megfelel az összes névvel ellátott MyType1 típusnak, vagy MyType2 az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Egyezik MyType a megadott teljes névvel és az összes származtatott típusával. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Egyezik az adott típusokkal MyType1 és MyType2 a megfelelő teljes névvel, valamint az összes származtatott típussal. |
Példák pszeudokódokra
Megsértése
using System;
using System.Xml.XPath;
public partial class WebForm : System.Web.UI.Page
{
public XPathNavigator AuthorizedOperations { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
string operation = Request.Form["operation"];
// If an attacker uses this for input:
// ' or 'a' = 'a
// Then the XPath query will be:
// authorizedOperation[@username = 'anonymous' and @operationName = '' or 'a' = 'a']
// and it will return any authorizedOperation node.
XPathNavigator node = AuthorizedOperations.SelectSingleNode(
"//authorizedOperation[@username = 'anonymous' and @operationName = '" + operation + "']");
}
}
Imports System
Imports System.Xml.XPath
Partial Public Class WebForm
Inherits System.Web.UI.Page
Public Property AuthorizedOperations As XPathNavigator
Protected Sub Page_Load(sender As Object, e As EventArgs)
Dim operation As String = Me.Request.Form("operation")
' If an attacker uses this for input:
' ' or 'a' = 'a
' Then the XPath query will be:
' authorizedOperation[@username = 'anonymous' and @operationName = '' or 'a' = 'a']
' and it will return any authorizedOperation node.
Dim node As XPathNavigator = AuthorizedOperations.SelectSingleNode( _
"//authorizedOperation[@username = 'anonymous' and @operationName = '" + operation + "']")
End Sub
End Class
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: