Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 karakterláncok tárolását a folyamatmemóriában szöveg formátumban. (A korlátozásokról azonban tekintse meg a SecureString biztonságossá tételét ismertető szakaszt .) 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.
Egy SecureString példány maximális hossza 65 536 karakter.
Fontos
Ez a típus implementálja a IDisposable felületet. 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 ártalmatlanításához hívja meg a Dispose metódust egy try/catch blokkban. Ha közvetve szeretné megsemmisíteni, használjon olyan nyelvi szerkezetet, mint a using (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óért lásd 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 példányok nem módosíthatók, azok a műveletek, amelyek úgy tűnnek, hogy egy meglévő példányt módosítanak, valójában egy másolatot hoznak létre azok módosításához. 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. Azonban a SecureString objektum értéke 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, és módosítható, amíg az alkalmazása nem jelöli meg írásvédettként. Ezt követően az objektum törölhető a számítógép memóriájából az alkalmazás által a Dispose metódus meghívásával vagy a .NET szemétgyűjtő által.
A SecureString osztály korlátairól bővebben a How secure is SecureString? (Mennyire biztonságos a SecureString?) szakaszban olvashat.
SecureString-műveletek
Az SecureString osztály olyan tagokat tartalmaz, amelyek lehetővé teszik a következőket:
Az SecureString objektum példányosítása: Az SecureString objektumot a paraméter nélküli konstruktorának meghívásával példányosítjuk.
Karakterek hozzáadása egy SecureString objektumhoz: Egyszerre egyetlen karaktert adhat hozzá egy SecureString objektumhoz annak vagy AppendChar metódusának InsertAt meghívásával.
Fontos
A SecureString objektumot soha nem szabad String-ból létrehozni, mert a bizalmas adatok már ki vannak téve a nem módosítható String osztály memória-megőrzési hatásainak. Az egy objektum létrehozásának legjobb módja egyenként karakterekből egy nem menedzselt forrásból, például a SecureString metódusból.
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 SecureString példány számára lefoglalt memória felszabadítása. Mivel a SecureString megvalósítja a IDisposable interfészt, a memóriát a Dispose metódus meghívásával szabadíthatja fel.
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álykönyvtár általánosan a következő módokon használja a SecureString 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 átadása kezeletlen 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 sztringértéket COM által felismert bináris sztringgé (BSTR) alakítja át.
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, nullázza és felszabadítsa 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 karakterenkénti forrásból hoz létre sztringet, String több köztes példányt hoz létre a memóriában, míg SecureString csak egyetlen példányt hoz létre. A String objektumok szemétgyűjtése 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 a következők:
Plattform
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 időintervallum, amely alatt a SecureString példány értéke látható, csupán rövidebb az String osztályéhoz képest.
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 a SecureString biztonságosabb, mint a String, mert korlátozza a bizalmas adatok expozícióját. Előfordulhat azonban, hogy ezek a karaktersorozatok 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 folyamatlerakódásnak vagy egy felhasználó által megtekinthető swap 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.