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.
| Ürün/Hizmet | Makale |
|---|---|
| WCF | |
| Web API'si | |
| Web uygulaması |
WCF- Yapılandırma dosyasına serviceDebug düğümünü eklemeyin
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | WCF |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | Genel, NET Framework 3 |
| Öznitelikler | N/A |
| Referanslar | MSDN, Fortify Kingdom |
| Adımlar | Windows Communication Framework (WCF) hizmetleri, hata ayıklama bilgilerini kullanıma sunacak şekilde yapılandırılabilir. Hata ayıklama bilgileri üretim ortamlarında kullanılmamalıdır. etiketi, <serviceDebug> bir WCF hizmeti için hata ayıklama bilgileri özelliğinin etkinleştirilip etkinleştirilmediğini tanımlar. includeExceptionDetailInFaults özniteliği true olarak ayarlanırsa, uygulamadan gelen özel durum bilgileri istemcilere döndürülür. Saldırganlar, hata ayıklama çıkışından elde ettikleri ek bilgilerden yararlanarak çerçeveye, veritabanına veya uygulama tarafından kullanılan diğer kaynaklara yönelik saldırıları bağlayabilir. |
Example
Aşağıdaki yapılandırma dosyası etiketini içerir <serviceDebug> :
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Hizmette hata ayıklama bilgilerini devre dışı bırakın. Bu, etiketi uygulamanızın yapılandırma dosyasından <serviceDebug> kaldırarak gerçekleştirilebilir.
WCF- Yapılandırma dosyasına serviceMetadata düğümünü eklemeyin
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | WCF |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | Genel |
| Öznitelikler | Genel, NET Framework 3 |
| Referanslar | MSDN, Fortify Kingdom |
| Adımlar | Bir hizmetle ilgili bilgilerin herkese açık olarak sunulması, saldırganlara hizmetlerden nasıl yararlanabilecekleri hakkında değerli içgörüler sağlayabilir. etiketi meta <serviceMetadata> veri yayımlama özelliğini etkinleştirir. Hizmet meta verileri genel olarak erişilmemesi gereken hassas bilgiler içerebilir. En azından, yalnızca güvenilen kullanıcıların meta verilere erişmesine izin verin ve gereksiz bilgilerin gösterilmediğinden emin olun. Daha da iyisi, meta veri yayımlama özelliğini tamamen devre dışı bırakın. Güvenli bir WCF yapılandırması <serviceMetadata> etiketi içermez. |
ASP.NET Web API'de uygun özel durum işlemenin yapıldığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web API'si |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | MVC 5, MVC 6 |
| Öznitelikler | N/A |
| Referanslar | ASP.NET Web API'de İstisna Yönetimi, ASP.NET Web API'de Model Doğrulama |
| Adımlar | Varsayılan olarak, ASP.NET Web API'daki çoğu yakalanmayan özel durum, durum kodu 500, Internal Server Error olan bir HTTP yanıtına çevrilir |
Example
API tarafından döndürülen durum kodunu denetlemek için aşağıda HttpResponseException gösterildiği gibi kullanılabilir:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Example
Özel durum yanıtı üzerinde daha fazla denetim için sınıfı HttpResponseMessage aşağıda gösterildiği gibi kullanılabilir:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)),
ReasonPhrase = "Product ID Not Found"
}
throw new HttpResponseException(resp);
}
return item;
}
türünde HttpResponseExceptionolmayan işlenmeyen özel durumları yakalamak için Özel Durum Filtreleri kullanılabilir. Özel durum filtreleri System.Web.Http.Filters.IExceptionFilter arabirimini uygular. Özel durum filtresi yazmanın en basit yolu sınıfından System.Web.Http.Filters.ExceptionFilterAttribute türemek ve OnException yöntemini geçersiz kılmaktır.
Example
Özel durumları HTTP durum koduna NotImplementedExceptiondönüştüren 501, Not Implemented bir filtre aşağıdadır:
namespace ProductStore.Filters
{
using System;
using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;
public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
}
Web API'sinde özel durum filtresi kaydetmenin birkaç yolu vardır:
- Hareket bazında
- Denetleyiciye göre
- Genel
Example
Filtreyi belirli bir eyleme uygulamak için, filtreyi eyleme öznitelik olarak ekleyin:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Example
Filtreyi üzerindeki controllertüm eylemlere uygulamak için, filtreyi sınıfına controller öznitelik olarak ekleyin:
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Example
Filtreyi tüm Web API denetleyicilerine genel olarak uygulamak için, filtrenin bir örneğini koleksiyona GlobalConfiguration.Configuration.Filters ekleyin. Bu koleksiyondaki özel durum filtreleri herhangi bir Web API denetleyicisi eylemi için geçerlidir.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Example
Model doğrulaması için model durumu aşağıda gösterildiği gibi CreateErrorResponse yöntemine geçirilebilir:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
ASP.NET Web API'de olağanüstü işleme ve model doğrulama hakkında ek ayrıntılar için başvurular bölümündeki bağlantıları gözden geçirin
Hata iletilerinde güvenlik ayrıntılarını ifşa etme
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web uygulaması |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | Genel |
| Öznitelikler | N/A |
| Referanslar | N/A |
| Adımlar | Genel hata iletileri, hassas uygulama verileri dahil edilmeden doğrudan kullanıcıya sağlanır. Hassas verilere örnek olarak şunlar verilebilir:
Bir uygulama içindeki tüm hataları yakalamak ve genel hata iletileri sağlamanın yanı sıra IIS içinde özel hataların etkinleştirilmesi, bilgilerin açığa çıkmasını önlemeye yardımcı olur. SQL Server veritabanı ve .NET Özel durum işleme, diğer hata işleme mimarileri arasında özellikle ayrıntılıdır ve uygulamanızın profilini açan kötü amaçlı bir kullanıcı için son derece yararlıdır. .NET Exception sınıfından türetilen bir sınıfın içeriğini doğrudan görüntülemeyin ve beklenmeyen bir özel durumun doğrudan kullanıcıya yükseltilmemesi için uygun özel durum işlemeye sahip olduğunuzdan emin olun.
|
Varsayılan hata işleme sayfasını uygulama
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web uygulaması |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | Genel |
| Öznitelikler | N/A |
| Referanslar | ASP.NET Hata Sayfaları Ayarları İletişim Kutusunu Düzenleme |
| Adımlar | bir ASP.NET uygulaması başarısız olduğunda ve HTTP/1.x 500 İç Sunucu Hatasına neden olduğunda veya özellik yapılandırması (İstek Filtreleme gibi) bir sayfanın görüntülenmesini engellediğinde, bir hata iletisi oluşturulur. Yöneticiler, uygulamanın istemciye kolay bir ileti, istemciye ayrıntılı hata iletisi veya yalnızca localhost'a ayrıntılı hata iletisi görüntüleyip görüntülemeyeceğini seçebilir.
|
IIS’de Dağıtım Yöntemi’ni Perakende Olarak Ayarla
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web uygulaması |
| SDL Aşaması | Dağıtım |
| Uygulanabilir Teknolojiler | Genel |
| Öznitelikler | N/A |
| Referanslar | deployment Öğesi (ASP.NET Ayarlar Şeması) |
| Adımlar | Anahtar Çoğu zaman, başarısız istek izleme ve hata ayıklama gibi geliştirici odaklı anahtarlar ve seçenekler etkin geliştirme sırasında etkinleştirilir. Herhangi bir üretim sunucusundaki dağıtım yönteminin perakende olarak ayarlanması önerilir. machine.config dosyasını açın ve |
Özel durumlar güvenli bir şekilde başarısız olmalıdır
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web uygulaması |
| SDL Aşaması | İnşa et |
| Uygulanabilir Teknolojiler | Genel |
| Öznitelikler | N/A |
| Referanslar | Güvenli bir şekilde başarısız olun |
| Adımlar | Uygulama güvenli bir şekilde başarısız olmalıdır. Belirli bir kararın alınmasına bağlı olarak Boole değeri döndüren herhangi bir yöntemin dikkatle oluşturulmuş bir özel durum bloğu olmalıdır. Özel durum bloğu dikkatsizce yazıldığında, güvenlik sorunlarının fark edilmeden ortaya çıkmasına yol açan birçok mantıksal hata oluşur. |
Example
public static bool ValidateDomain(string pathToValidate, Uri currentUrl)
{
try
{
if (!string.IsNullOrWhiteSpace(pathToValidate))
{
var domain = RetrieveDomain(currentUrl);
var replyPath = new Uri(pathToValidate);
var replyDomain = RetrieveDomain(replyPath);
if (string.Compare(domain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
//// Adding additional check to enable CMS urls if they are not hosted on same domain.
if (!string.IsNullOrWhiteSpace(Utilities.CmsBase))
{
var cmsDomain = RetrieveDomain(new Uri(Utilities.Base.Trim()));
if (string.Compare(cmDomain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
return false;
}
else
{
return true;
}
}
return false;
}
}
return true;
}
catch (UriFormatException ex)
{
LogHelper.LogException("Utilities:ValidateDomain", ex);
return true;
}
}
Bir özel durum oluştuğunda yukarıdaki yöntem her zaman True döndürür. Son kullanıcı tarayıcı tarafından kabul edilen ancak Uri() oluşturucu tarafından kabul edilmeyen yanlış biçimlendirilmiş bir URL sağlarsa, bu bir istisna fırlatır ve kurban geçerli ancak hatalı biçimlendirilmiş URL'ye yönlendirilir.