Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu, Windows Kabuğu ile ilgili güvenlik konuları hakkında bilgi sağlar. Bu belge, güvenlik sorunları hakkında bilmeniz gereken her şeyi sağlayamaz; bunun yerine, bu teknoloji alanı için başlangıç noktası ve başvuru olarak kullanın.
Shell, düzgün işlenmemeleri durumunda olası güvenlik risklerini ortaya koyan birkaç önemli özellik de dahil olmak üzere sistemin bir dizi önemli yönünü denetler. Bu konu başlığı altında, sık karşılaşılan bazı sorunlar ve uygulamalarınızda bunların nasıl ele alınacakları açıklanmaktadır. Güvenliğin İnternet tabanlı açıklarla sınırlı olmadığını unutmayın. Terminal Hizmetleri aracılığıyla erişilebilen sistemler de dahil olmak üzere paylaşılan sistemlerde, kullanıcıların sistemi paylaşan diğer kişilere zarar verecek hiçbir şey yapamayacağından da emin olmanız gerekir.
- Uygulamanızı Düzgün Yükleme
- Shlwapi
- Autocomplete
- ShellExecute, ShellExecuteEx ve İlgili İşlevler
- Dosyaları Taşıma ve Kopyalama
- Güvenli Ad Alanı Uzantıları Yazma
- Güvenlik Uyarıları
- İlgili konular
Uygulamanızı Düzgün Yükleme
Olası Shell güvenlik sorunlarının çoğu uygulamanızı doğru yükleyerek azaltılabilir.
Uygulamayı Program Files klasörünün altına yükleyin.
İşletim Sistemi Location Windows XP, Windows Server 2003 ve öncesi CSIDL_PROGRAM_FILES Windows Vista ve üzeri FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86 veya FOLDERID_ProgramFilesCommonX64. Ayrıntılar için bkz. KNOWNFOLDERID . Kullanıcı verilerini Program Files klasörünün altında depolamayın.
Tüm kullanıcılar için ortak olan veriler için uygun veri klasörünü kullanın.
İşletim Sistemi Location Windows XP, Windows Server 2003 ve öncesi CSIDL_COMMON_APPDATA Windows Vista ve üzeri FOLDERID_ProgramData Belirli bir kullanıcıya ait veriler için uygun kullanıcı veri klasörünü kullanın.
İşletim Sistemi Location Windows XP, Windows Server 2003 ve öncesi CSIDL_APPDATA, CSIDL_PERSONAL ve diğerleri. Windows Vista ve üzeri FOLDERID_RoamingAppData, FOLDERID_Documents ve diğerleri. Program Files klasörü dışında bir konuma yüklemeniz gerekiyorsa, kullanıcıların dosya sisteminin uygunsuz bölümlerine erişimi olmaması için erişim denetim listelerini (ACL) düzgün ayarladığınızdan emin olun. Belirli bir kullanıcıya özgü tüm veriler, diğer kullanıcıların erişmesini engelleyen bir ACL'ye sahip olmalıdır.
Dosya ilişkilendirmelerini ayarlarken komut satırını düzgün bir şekilde belirttiğinizden emin olun. Tam yol kullanın ve boşluk içeren öğeleri tırnak içine alın. Komut parametrelerini ayrı tırnak içine alın. Aksi takdirde, dize yanlış ayrıştırılmış olabilir ve uygulama düzgün başlatılmaz. Düzgün biçimlendirilmiş komut satırlarına iki örnek burada gösterilmiştir.
"C:\Program Files\MyApp\MyApp.exe" "%1" "%2" C:\MyAppDir\MyApp\MyApp.exe "%1"
Uyarı
Standart yükleme klasörlerinin konumu sistemden sisteme farklılık gösterebilir. Belirli bir Windows Vista veya sonraki bir sistemdeki standart klasörün konumunu almak için uygun KNOWNFOLDERID değeriyle SHGetKnownFolderPath çağrısı yapın. Windows XP, Windows Server 2003 veya önceki sistemlerde, SHGetFolderLocation veya SHGetFolder çağrısı yapın Uygun CSIDL değerine sahipPath.
Shlwapi
Shell Lightweight API (Shlwapi), bir dizi dize işleme işlevi içerir. Bu işlevlerin yanlış kullanılması, döndürülmekte olan kesme bildirimi olmadan beklenmedik şekilde kesilmiş dizelere yol açabilir. Aşağıdaki durumlarda Shlwapi işlevleri kullanılmamalıdır. Daha az risk oluşturan listelenen alternatif işlevler onların yerine kullanılmalıdır.
| Shlwapi İşlevi | Alternatif İşlev |
|---|---|
| StrCat,StrNCat | StringCchCat, StringCbCat ve ilgili işlevler |
| StrCpy, StrCpyN | StringCchCopy, StringCbCopy ve ilgili işlevler |
| wnsprintf, wvnsprintf | StringCchPrintf, StringCbPrintf ve ilgili işlevler |
PathRelativePathTo gibi dosya yolu döndüren işlevlerde, arabelleğin boyutunu her zaman MAX_PATH karakter olarak ayarlayın. Bunun yapılması, arabelleğinde mümkün olan en büyük dosya yolunu ve sonlandırıcı null karakteri tutacak kadar büyük olmasını sağlar.
Alternatif dize işlevleri hakkında daha fazla bilgi için bkz . Strsafe.h hakkında.
Otomatik Tamamlama
Parolalar için Otomatik Tamamlama özelliğini kullanmayın.
ShellExecute, ShellExecuteEx ve İlgili İşlevler
Uygulamaları başlatmak için kullanabileceğiniz birkaç Shell işlevi vardır: ShellExecute, ShellExecuteEx, WinExec ve SHCreateProcessAsUserW. Yürütülecek uygulamanın kesin bir tanımını sağladığından emin olun.
- Yürütülebilir dosyanın yolunu sağlarken tam yolu sağlayın. Dosyayı bulmak için Shell'e bağımlı değildir.
- Boşluk içeren bir komut satırı dizesi sağlarsanız, dizeyi tırnak içine alın. Aksi takdirde ayrıştırıcı, boşluk içeren tek bir öğeyi birden çok öğe olarak yorumlayabilir.
Dosyaları Taşıma ve Kopyalama
Sistem güvenliğinin bir anahtarı ACL'leri düzgün atamaktır. Şifrelenmiş dosyaları da kullanabilirsiniz. Dosyaları taşıdığınızda veya kopyaladığınızda, doğru ACL'ye atandığından ve bunların şifresinin yanlışlıkla çözülmediğinden emin olun. Bu, dosyaları Hem Geri Dönüşüm Kutusu'na hem de dosya sistemi içinde taşımayı içerir. IFileOperation (Windows Vista veya üzeri) veya SHFileOperation (Windows XP ve öncesi) kullanın. Hedef dosya için beklenen ACL'yi ayarlamayan MoveFile kullanmayın.
Güvenli Ad Alanı Uzantıları Yazma
Kabuk ad alanı uzantıları, kullanıcıya veri sunmanın güçlü ve esnek bir yoludur. Ancak, doğru yazılmazlarsa sistem hatasına neden olabilirler. Göz önünde bulundurulması gereken bazı önemli noktalar:
- Görüntüler gibi verilerin doğru biçimlendirildiğini varsaymayın.
- MAX_PATH bir dizedeki bayt sayısına eşdeğer olduğunu varsaymayın. Bu , karakter sayısıdır.
Güvenlik Uyarıları
Aşağıdaki tabloda, yanlış kullanıldığında uygulamalarınızın güvenliğini tehlikeye atabilecek bazı özellikler listelenmiştir.
| Özellik | Risk azaltma |
|---|---|
| ShellExecute, ShellExecuteEx | Belirli bir dosyayı bulmak için bir dizi varsayılan konumu denetlemeye bağlı aramalar kimlik sahtekarlık saldırısında kullanılabilir. İstediğiniz dosyaya erişdiğinizden emin olmak için tam yol kullanın. |
| StrCat | İlk bağımsız değişken olan psz1, psz2 ve kapatma '\0' öğesini barındıracak kadar büyük olmalıdır, aksi takdirde arabellek taşması oluşabilir. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN veya StringCchCatNEx. |
| StrCatBuff | Son dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN veya StringCchCatNEx. |
| StrCatChainW | Son dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCatEx, StringCbCatNEx, StringCchCatEx veya StringCchCatNEx. |
| StrCpy | İlk bağımsız değişken olan psz1, psz2 ve kapatma '\0' öğesini barındıracak kadar büyük olmalıdır, aksi takdirde arabellek taşması oluşabilir. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN veya StringCchCopyNEx. |
| StrCpyN | Kopyalanan dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN, StringCchCopyNEx. |
| Strdup | StrDup, lpsz'nin null olarak sonlandırılan bir dize olduğunu varsayar. Ayrıca, döndürülen dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCat, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN veya StringCchCopyNEx. |
| StrNCat | İlk bağımsız değişken olan pszFront, pszBack'i ve '\0' kapanışını tutacak kadar büyük olmalıdır, aksi takdirde arabellek taşması oluşabilir. Son bağımsız değişken olan cchMax'inpszFront'a kopyalanacak karakter sayısı olduğunu, pszFront boyutunun bayt cinsinden olması gerekmediğini unutmayın. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN veya StringCchCatNEx. |
| wnsprintf | Kopyalanan dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintf veya StringCchVPrintfEx. |
| wvnsprintf | Kopyalanan dizenin null olarak sonlandırılacağı garanti edilmiyor. Bunun yerine aşağıdaki alternatiflerden birini kullanın. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintf veya StringCchVPrintfEx. |
İlgili konular