APRIMORAR WEB APPLICATION SECURITY: AMEAÇAS E CONTRAMEDIDAS: correções e comentários

Traduções deste artigo Traduções deste artigo
ID do artigo: 867600 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Este artigo contém comentários, correções e informações sobre erros conhecidos relacionados ao catálogo de Microsoft Patterns & practices melhorar a segurança dos aplicativos da Web: ameaças e contramedidas, ISBN 0-7356-1842-9

Versão da Web do livro é atualizada como encontramos os erros. Você pode encontrar muitos ou todos os erros abaixo já corrigido na versão da web do livro no MSDN.

Os seguintes tópicos são abordados:
  • Página 273, capítulo 10: Building Secure ASP.NET páginas e controles, seção: controles ligados a dados, conclua a seção
  • Capítulo 16, página 441: Protegendo seu servidor Web, seção: desativar o NetBIOS e SMB

Mais Informações

página 273, capítulo 10: Building Secure ASP.NET páginas e controles, seção: controles ligados a dados, conclua a seção
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

alteração:

Controles Web com dados vinculados não codifique a saída. O único controle que codifica a saída é o controle TextBox quando sua propriedade TextMode é definida como MultiLine. Se você vincular qualquer outro controle a dados que possuem códigos XSS mal intencionados, o código será executado no cliente. Como resultado, se você recupera dados de um banco de dados e você não terá certeza de que os dados são válidos (talvez porque ele é um banco de dados que é compartilhado com outros aplicativos), codificar os dados antes de passá-lo novamente para o cliente.

To:

Dados controles vinculados são controles da web que são ligáveis componentes de dados por meio de um público herdadas ? DataSource ? propriedade. Para mencionar alguns, você encontrará DataGrid, DropDownList e ListBox a ser usado com muita freqüência. Nem todos os dados controles acoplados executam codificação ao exibir dados recuperados de um componente de dados vinculados; assim, ele será sua responsabilidade para realizar a codificação componentes de dados não-confiável para impedir ataques XSS. Por exemplo, um componente de dados não pode ser confiáveis em um cenário em que diferentes aplicativos compartilham um único banco de dados. Se um invasor tem a capacidade de inserir códigos XSS mal intencionados no banco de dados (por inadequado uma vulnerabilidade em um dos aplicativos, por exemplo) todos os aplicativos usando controles de web codificação não vinculados a ele, ficará vulnerável. Apenas Evite codificação se você puder ser determinado que a saída do componente de dados sempre será válida.

Exemplos de controles ligados a dados que não executam codificação são DataGrid, DataList, RadioButtonList e CheckBoxList. Executar a codificação para dados de um controle acoplado pode variar dependendo cada controle específico. Por exemplo, para um DataGrid controle, você tem as seguintes opções:
  • Ativar todas as colunas em modelos e usar HtmlEncode()/UrlEncode() manualmente em cada chamada para DataBinder.Eval
  • Substituir um dos seus métodos de vinculação de dados, como OnDatabinding ou OnItemDataBound e executar a codificação em seus itens. O exemplo a seguir ilustra como substituir o método OnItemDataBound de um controle DataGrid para codificar seus itens por um usando HtmlEncode() ou UrlEncode() quando necessário:

...
[DefaultProperty("Text"),
  ToolboxData("<{0}:DataGrid runat=server></{0}:DataGrid>")]
 
public class DataGrid : System.Web.UI.WebControls.DataGrid
{
    /// <summary>
    /// The ItemDataBound event is raised after an item is data bound to the DataGrid
    /// control. This event provides you with the last opportunity to access the data
    /// item before it is displayed on the client. After this event is raised, the data
    /// item is nulled out and no longer available. - .NET Framework Class Library
    /// </summary>
    /// <param name="e"></param>
    protected override void OnItemDataBound(DataGridItemEventArgs e)
    {
      base.OnItemDataBound (e);
 
      switch (e.Item.ItemType)
      {
        case ListItemType.Item:
        case ListItemType.AlternatingItem:
        case ListItemType.EditItem:
        case ListItemType.SelectedItem:
        case ListItemType.Footer:
        case ListItemType.Header:
        case ListItemType.Pager:  
          // even though not all of these ListItemTypes are data bound,
          // perform HtmlEncode or UrlEncode on each control. If there are
          // no controls, we perform HtmlEncode on any available text.
          // Also, don't let &nbsp;'s be encoded.
          TableCellCollection cCells = e.Item.Cells;
          foreach (TableCell tc in cCells)
          {
            if (tc.Controls.Count > 0)
            {
              foreach (Control ctrl in tc.Controls)
              {
                
                // don't perform HtmlEncode on URL's
                if (ctrl is HyperLink)
                {
                  HyperLink hLnk = (HyperLink)ctrl;
 
                  if (hLnk.Text.Length > 0)
                    hLnk.Text = HttpUtility.HtmlEncode(hLnk.Text);
                  if (hLnk.NavigateUrl.Length > 0)
                    hLnk.NavigateUrl = HttpUtility.UrlEncode(hLnk.NavigateUrl);
                }
                else if (ctrl is LinkButton)
                {
                  LinkButton lButton = (LinkButton)ctrl;
 
                  if (lButton.Text.Length > 0)
                    lButton.Text = HttpUtility.HtmlEncode(lButton.Text);
                }
                else if (ctrl is Button)
                {
                  Button cButton = (Button)ctrl;
 
                  if (cButton.Text.Length > 0)
                    cButton.Text = HttpUtility.HtmlEncode(cButton.Text);
                }
              }
            } 
            else 
            {              
              // there are no controls in the table cell
              // HTMLEncode any available text
              if (tc.Text.Length > 0) 
              {
                if ("&nbsp;" != tc.Text) 
                  tc.Text = HttpUtility.HtmlEncode(tc.Text);
              }
            }
          }
          break;
        
        default:
          break;
      }
     }
   }
...

página 441, capítulo 16: Protegendo seu servidor Web, seção: desativar o NetBIOS e SMB
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

Observação seguinte é adicionada:

Observação: Teste as alterações antes de implementá-los em produção. Desabilitar compartilhamento ou NetBIOS pode negativamente capacidade de gerenciamento para seu cenário. Por exemplo, o IIS usa a API NetUserChangePassword que depende do NetBIOS. Se você permitir que os usuários alterem as senhas através do IIS, isso funcionará mais.

Propriedades

ID do artigo: 867600 - Última revisão: terça-feira, 8 de maio de 2007 - Revisão: 1.4
A informação contida neste artigo aplica-se a:
  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
Palavras-chave: 
kbmt kbdocfix kbdocerr KB867600 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 867600

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com