Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Produto/Serviço | Artigo |
|---|---|
| WCF |
|
| Web API | |
| Aplicativo Web |
WCF- Não incluir o elemento serviceDebug no arquivo de configuração
| Title | Detalhes |
|---|---|
| Componente | WCF |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | Genérico, NET Framework 3 |
| Atributos | N/A |
| References | MSDN, Fortify Kingdom |
| Etapas | Os serviços do Framework de Comunicação do Windows (WCF) podem ser configurados para expor informações de depuração. As informações de depuração não devem ser usadas em ambientes de produção. A <serviceDebug> tag define se o recurso de informações de depuração estiver habilitado para um serviço WCF. Se o atributo includeExceptionDetailInFaults for definido como true, as informações de exceção do aplicativo serão retornadas aos clientes. Os invasores podem aproveitar as informações adicionais que obtêm com a saída de depuração para montar ataques direcionados à estrutura, banco de dados ou outros recursos usados pelo aplicativo. |
Exemplo
O seguinte arquivo de configuração inclui a <serviceDebug> marca:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Desabilite as informações de depuração no serviço. Isso pode ser feito removendo a <serviceDebug> marca do arquivo de configuração do aplicativo.
WCF - não inclui o nó serviceMetadata no arquivo de configuração
| Title | Detalhes |
|---|---|
| Componente | WCF |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | Genérico |
| Atributos | Genérico, NET Framework 3 |
| References | MSDN, Fortify Kingdom |
| Etapas | Expor publicamente informações sobre um serviço pode fornecer aos invasores informações valiosas sobre como eles podem explorar o serviço. A <serviceMetadata> marca habilita o recurso de publicação de metadados. Os metadados de serviço podem conter informações confidenciais que não devem ser acessíveis publicamente. No mínimo, permita que usuários confiáveis acessem os metadados e garantam que as informações desnecessárias não sejam expostas. Melhor ainda, desabilitar totalmente a capacidade de publicar metadados. Uma configuração segura do WCF não conterá a <serviceMetadata> marca. |
Verifique se o tratamento adequado de exceções é feito no ASP.NET Web API
| Title | Detalhes |
|---|---|
| Componente | Web API |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | MVC 5, MVC 6 |
| Atributos | N/A |
| References | Exception Handling in ASP.NET Web API, Model Validation in ASP.NET Web API |
| Etapas | Por padrão, a maioria das exceções não capturadas em ASP.NET Web API são convertidas em uma resposta HTTP com código de status 500, Internal Server Error |
Exemplo
Para controlar o código de status retornado pela API, HttpResponseException pode ser usado conforme mostrado abaixo:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Exemplo
Para obter mais controle sobre a resposta de exceção, a HttpResponseMessage classe pode ser usada conforme mostrado abaixo:
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;
}
Para capturar exceções sem tratamento que não são do tipo HttpResponseException, filtros de exceção podem ser usados. Os filtros de exceção implementam a System.Web.Http.Filters.IExceptionFilter interface. A maneira mais simples de escrever um filtro de exceção é derivar da System.Web.Http.Filters.ExceptionFilterAttribute classe e substituir o método OnException.
Exemplo
Aqui está um filtro que converte exceções NotImplementedException em código 501, Not Implementedde status HTTP:
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);
}
}
}
}
Há várias maneiras de registrar um filtro de exceção da API Web:
- Por ação
- Por controlador
- Globalmente
Exemplo
Para aplicar o filtro a uma ação específica, adicione o filtro como um atributo à ação:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Exemplo
Para aplicar o filtro a todas as ações em um controller, adicione o filtro como um atributo à controller classe:
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Exemplo
Para aplicar o filtro globalmente a todos os controladores de API Web, adicione uma instância do filtro à GlobalConfiguration.Configuration.Filters coleção. Os filtros de exceção nesta coleção se aplicam a qualquer ação do controlador de API Web.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Exemplo
Para validação de modelo, o estado do modelo pode ser passado para o método CreateErrorResponse, conforme mostrado abaixo:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
Verifique os links na seção de referências para obter detalhes adicionais sobre manipulação excepcional e validação de modelo no ASP.NET Web API
Não expor detalhes de segurança em mensagens de erro
| Title | Detalhes |
|---|---|
| Componente | Aplicativo Web |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | Genérico |
| Atributos | N/A |
| References | N/A |
| Etapas | Mensagens de erro genéricas são fornecidas diretamente ao usuário sem incluir dados confidenciais do aplicativo. Exemplos de dados confidenciais incluem:
A captura de todos os erros em um aplicativo e o fornecimento de mensagens de erro genéricas, bem como a habilitação de erros personalizados no IIS, ajudarão a impedir a divulgação de informações. banco de dados SQL Server e tratamento de exceções do .NET, entre outras arquiteturas de tratamento de erros, são especialmente prolixos e extremamente úteis para um usuário mal-intencionado fazer o perfil do seu aplicativo. Não exiba diretamente o conteúdo de uma classe derivada da classe .NET Exception e verifique se você tem o tratamento de exceção adequado para que uma exceção inesperada não seja inadvertidamente gerada diretamente ao usuário.
|
Implementar a página de tratamento de erros padrão
| Title | Detalhes |
|---|---|
| Componente | Aplicativo Web |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | Genérico |
| Atributos | N/A |
| References | Caixa de Diálogo de Editar Configurações de Páginas de Erro do ASP.NET |
| Etapas | Quando um aplicativo ASP.NET falha e causa um erro de servidor interno HTTP/1.x 500 ou uma configuração de recurso (como Filtragem de Solicitações) impede que uma página seja exibida, uma mensagem de erro será gerada. Os administradores podem escolher se o aplicativo deve ou não exibir uma mensagem amigável para o cliente, uma mensagem de erro detalhada para o cliente ou uma mensagem de erro detalhada somente para o localhost. A
Abra o arquivo |
Definir o método de implantação para o varejo no IIS
| Title | Detalhes |
|---|---|
| Componente | Aplicativo Web |
| Fase do SDL | Implantação |
| Tecnologias aplicáveis | Genérico |
| Atributos | N/A |
| References | Elemento de Implantação (Esquema de Configurações ASP.NET) |
| Etapas | O Muitas vezes, os argumentos e as opções que estão voltados para os desenvolvedores, como um rastreamento da solicitação e depuração com falha, são habilitados durante o desenvolvimento ativo. É recomendável que o método de implantação, em qualquer servidor de produção, seja definido para varejo. abra o arquivo machine.config e verifique se ele |
As exceções devem falhar com segurança
| Title | Detalhes |
|---|---|
| Componente | Aplicativo Web |
| Fase do SDL | Construir |
| Tecnologias aplicáveis | Genérico |
| Atributos | N/A |
| References | Falha com segurança |
| Etapas | O aplicativo deve falhar com segurança. Qualquer método que retorna um valor booliano, com base no qual determinada decisão é tomada, deve ter o bloco de exceção cuidadosamente criado. Há muitos erros lógicos devido a quais problemas de segurança ocorrem, quando o bloco de exceção é escrito descuidadamente. |
Exemplo
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;
}
}
O método acima sempre retornará True, se ocorrer alguma exceção. Se o usuário final fornecer uma URL malformada, que o navegador respeita, mas o Uri() construtor não, isso gerará uma exceção e a vítima será levada para a URL válida, mas malformada.