System.Security.SecureString osztály
Fontos
Javasoljuk, hogy ne használja az osztályt a SecureString
.NET (Core) új fejlesztéséhez, vagy ha a meglévő kódot a .NET-be (Core) migrálja. További információ: SecureString nem használható.
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
SecureString egy olyan sztringtípus, amely biztonsági mértéket biztosít. Megpróbálja elkerülni a potenciálisan bizalmas sztringek tárolását a folyamatmemória egyszerű szövegként. (A korlátozásokról azonban tekintse meg a Mennyire biztonságos a SecureString? szakasz.) Egy példány SecureString értéke automatikusan védett az alapul szolgáló platform által támogatott mechanizmussal a példány inicializálásakor vagy az érték módosításakor. Az alkalmazás a metódus meghívásával megváltoztathatatlanná teheti a példányt, és megakadályozhatja a MakeReadOnly további módosításokat.
A példányok maximális hossza SecureString 65 536 karakter.
Fontos
Ez a típus implementálja az interfészt IDisposable . Ha befejezte a típus egy példányának használatát, közvetlenül vagy közvetve kell megsemmisítenie. A típus közvetlen megsemmisítéséhez hívja meg a metódust Dispose egy try
/catch
blokkban. Közvetett módon történő elidegenítéséhez használjon olyan nyelvi szerkezetet, mint using
a (C#-ban) vagy Using
a (Visual Basicben). További információ: "Az IDisposable-t megvalósító objektum használata" című szakasz a IDisposable felület témakörében.
Az SecureString osztály és tagjai nem láthatók a COM számára. További információ: ComVisibleAttribute.
Sztring és SecureString
Az osztály egy példánya System.String nem módosítható, és ha már nincs rá szükség, nem ütemezhető programozott módon a szemétgyűjtésre; vagyis a példány írásvédett lesz a létrehozása után, és nem lehet előre jelezni, hogy mikor törlik a példányt a számítógép memóriájából. Mivel System.String a példányok nem módosíthatók, a meglévő példányokat módosító műveletek ténylegesen létrehoznak egy másolatot a módosításhoz. Következésképpen, ha egy String objektum bizalmas információkat, például jelszót, hitelkártyaszámot vagy személyes adatokat tartalmaz, fennáll a veszélye annak, hogy az adatok a használat után felfedhetők, mert az alkalmazás nem tudja törölni az adatokat a számítógép memóriájából.
Az SecureString objektumok hasonlóak egy String olyan objektumhoz, amelyben szöveges érték van. Az objektum értéke SecureString azonban rögzítve van a memóriában, használhat védelmi mechanizmust, például a mögöttes operációs rendszer által biztosított titkosítást, amíg az alkalmazás írásvédettként nem jelöli meg, és törölhető a számítógép memóriájából a metódust hívó Dispose alkalmazás vagy a .NET szemétgyűjtő használatával.
Az osztály korlátainak SecureString megvitatása: How secure is SecureString? (Mennyire biztonságos a SecureString? szakasz).
SecureString-műveletek
Az SecureString osztály olyan tagokat tartalmaz, amelyek lehetővé teszik a következőket:
Objektum példányosítása SecureString : Az objektum példányosítása SecureString paraméter nélküli konstruktor meghívásával.
Karakterek hozzáadása egy SecureString objektumhoz: Egyszerre egyetlen karaktert adhat hozzá egy SecureString objektumhoz annak vagy InsertAt metódusának AppendChar meghívásával.
Fontos
Az SecureString objektumokat soha nem szabad egyből létrehozni String, mert a bizalmas adatokra már ki vannak téve a nem módosítható String osztály memóriamegőrzési következményei. Az objektumok létrehozásának SecureString legjobb módja egy karakteres, nem felügyelt forrásból, például a Console.ReadKey metódusból származik.
Karakterek eltávolítása egy SecureString objektumból: Az egyes karaktereket lecserélheti a SetAt metódus meghívásával, az egyes karakterek eltávolításával a RemoveAt metódus meghívásával, vagy az összes karakter eltávolításával a SecureString példányból a Clear metódus meghívásával.
SecureString Az objektum írásvédetté tétele Miután definiálta az SecureString objektum által képviselt sztringet, meghívja annak metódusátMakeReadOnly, hogy a sztring írásvédett legyen.
Információk lekérése az SecureString objektumról: Az SecureString osztálynak csak két tagja van, amelyek információt nyújtanak a sztringről: a tulajdonsága Length , amely az UTF16 kódolású kódegységek számát jelzi a sztringben, valamint a IsReadOnly, metódus, amely azt jelzi, hogy a példány írásvédett-e.
A példány számára SecureString lefoglalt memória felszabadítása Mivel SecureString a IDisposable felület implementálva van, a metódus meghívásával szabadíthatja fel a Dispose memóriát.
Az SecureString osztálynak nincsenek olyan tagjai, amelyek megvizsgálják, összehasonlítják vagy átalakítják egy adott osztály értékét SecureString. Az ilyen tagok hiánya segít megvédeni a példány értékét a véletlen vagy rosszindulatú expozíciótól. Az objektum értékének módosításához használja az System.Runtime.InteropServices.Marshal osztály megfelelő tagjait, például a SecureStringToBSTR metódust SecureString .
A .NET-osztálytár gyakran a következő módokon használja SecureString a példányokat:
Jelszóadatok megadása egy folyamathoz a ProcessStartInfo struktúra használatával vagy a Process.Start metódus túlterhelésének meghívásával, amely egy típusú SecureStringparaméterrel rendelkezik.
Hálózati jelszóadatok megadása egy NetworkCredential típusparaméterrel SecureString rendelkező osztálykonstruktor meghívásával vagy a NetworkCredential.SecurePassword tulajdonság használatával.
Jelszóadatok megadása az SQL Server-hitelesítéshez a SqlCredential.SqlCredential konstruktor meghívásával vagy a SqlCredential.Password tulajdonság értékének beolvasásával.
Sztring továbbítása nem felügyelt kódnak. További információkért lásd a SecureString és az interop szakaszt .
SecureString és interop
Mivel az operációs rendszer nem támogatja SecureStringközvetlenül, az SecureString objektum értékét a szükséges sztringtípusra kell konvertálnia, mielőtt a sztringet natív metódussá továbbítja. Az Marshal osztály öt metódust használ:
Marshal.SecureStringToBSTR, amely a SecureString com által felismert bináris sztringgé (BSTR) alakítja át a sztringértéket.
Marshal.SecureStringToCoTaskMemAnsi és Marshal.SecureStringToGlobalAllocAnsi, amely a SecureString sztringértéket nem felügyelt memóriában lévő ANSI-sztringre másolja.
Marshal.SecureStringToCoTaskMemUnicode és Marshal.SecureStringToGlobalAllocUnicode, amely a SecureString sztring értékét egy Unicode-sztringre másolja nem felügyelt memóriában.
Ezek a metódusok egy világos szöveges sztringet hoznak létre a nem felügyelt memóriában. A fejlesztő felelőssége, hogy mihelyst már nincs rá szükség, ki kell szabadítanák és felszabadítják ezt a memóriát. A sztringkonvertálási és memóriafoglalási metódusok mindegyike rendelkezik egy olyan metódussal, amely nullára állítja ki a memóriát, és felszabadítja a lefoglalt memóriát:
Mennyire biztonságos a SecureString?
A megfelelő létrehozás esetén a SecureString példányok több adatvédelmet biztosítanak, mint egy String. Ha egy karakteres forrásból hoz létre sztringet, String több köztes értéket hoz létre a memóriában, míg SecureString csak egyetlen példányt hoz létre. Az objektumok szemétgyűjtése String nem determinisztikus. Emellett, mivel a memória nincs rögzítve, a szemétgyűjtő további értékmásolatokat String készít a memória áthelyezésekor és tömörítésekor. Ezzel szemben az objektumhoz SecureString lefoglalt memória rögzítve van, és a memória felszabadítható a Dispose metódus meghívásával.
Bár a SecureString példányokban tárolt adatok biztonságosabbak, mint a String példányokban tárolt adatok, jelentős korlátozások vonatkoznak a SecureString példányok biztonságára. Ezek közé tartoznak:
Platform
A Windows operációs rendszeren a példány belső karaktertömbjének SecureString tartalma titkosítva van. Függetlenül attól, hogy hiányzó API-k vagy kulcskezelési problémák miatt a titkosítás nem érhető el minden platformon. A platformfüggőség SecureString miatt nem titkosítja a belső tárolót nem Windows-platformon. Ezeken a platformokon más technikákat is használnak a további védelem érdekében.
Időtartam
Még akkor is, ha az SecureString implementáció képes kihasználni a titkosítás előnyeit, a példányhoz SecureString rendelt egyszerű szöveg különböző időpontokban jelenhet meg:
Mivel a Windows nem nyújt biztonságos sztring-implementációt az operációs rendszer szintjén, a .NET-nek továbbra is át kell alakítania a biztonságos sztring értékét egyszerű szöveges ábrázolására annak használatához.
Ha a biztonságos sztring értékét olyan módszerekkel módosítják, mint AppendChar a vagy RemoveAt, vissza kell fejteni (azaz vissza kell alakítani egyszerű szöveggé), módosítani kell, majd újra kell titkosítani.
Ha a biztonságos sztringet interop-hívásban használják, azt ANSI-sztringgé, Unicode-sztringgé vagy bináris sztringgé (BSTR) kell konvertálni. További információkért lásd a SecureString és az interop szakaszt .
Az az időintervallum, amelyre a SecureString példány értéke ki van téve, csupán az osztályhoz String képest rövidül.
A tárolás és a használat Általánosabban az SecureString osztály definiál egy tárolási mechanizmust a védett vagy bizalmasan kezelendő sztringértékekhez. A .NET-en kívül azonban egyetlen használati mechanizmus sem támogatja SecureString. Ez azt jelenti, hogy a biztonságos sztringet használható űrlapmá (általában egyértelmű szöveges űrlaptá) kell konvertálni, amelyet a cél felismerhet, és a visszafejtésnek és az átalakításnak a felhasználói térben kell történnie.
Összességében biztonságosabb, SecureString mint String az, hogy korlátozza a bizalmas sztringadatok expozícióját. Előfordulhat azonban, hogy ezek a sztringek továbbra is ki vannak téve a nyers memóriához hozzáféréssel rendelkező folyamatoknak vagy műveleteknek, például a gazdagépen futó rosszindulatú folyamatnak, egy folyamatképnek vagy egy felhasználó által megtekinthető felcserélési fájlnak. SecureString A jelszavak védelme helyett az ajánlott alternatíva egy átlátszatlan leíró használata a folyamaton kívül tárolt hitelesítő adatokhoz.
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: