MELHORAR WEB APPLICATION SECURITY: AMEAÇAS E COUNTERMEASURES: correcções e comentários

Traduções de Artigos Traduções de Artigos
Artigo: 867600 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Este artigo contém comentários, correcções e informações sobre erros conhecidos relacionados com o livro Microsoft padrões & práticas melhorar a segurança de aplicações Web: ameaças e Countermeasures, ISBN 0-7356-1842-9

Versão Web do livro é actualizada à medida que os erros encontrar. Poderá encontrar vários ou todos os erros abaixo já corrigido na versão web da lista na MSDN.

Abrange os seguintes tópicos:
  • Página 273, capítulo 10: Criar páginas ASP.NET seguras e controlos, secção: controlos de ligação de dados, concluir secção
  • Página 441, capítulo 16: Proteger O servidor Web, secção: desactivar o NetBIOS e SMB

Mais Informação

página 273, capítulo 10: criar páginas ASP.NET seguras e controlos, secção: controlos de ligação de dados, concluir secção
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

alteração:

Controlos de ligação de dados da Web não codificar a saída. O único controlo codifica a saída é o controlo de caixa de texto quando a propriedade TextMode está definida para várias linhas. Se associar outro controlo a dados com código malicioso de XSS, o código será executado no cliente. Como resultado, se obter dados a partir de uma base de dados e não poderá ter certeza de que os dados são válidos (talvez porque é uma base de dados é partilhado com outras aplicações), codificar os dados antes de passar para o cliente.

To:

Dados controlos dependentes são controlos web ligação aos componentes de dados a um público herdadas ? DataSource ? propriedade. Para mencionar alguns, encontrará DataGrid, caixa de listagem e DropDownList para serem utilizados com muita frequência. Não todos os dados controlos dependentes efectuar codificação ao apresentar os dados obtidos a partir de um componente dependente de dados; assim, será sua responsabilidade para efectuar a codificação em componentes de dados não fidedignos para impedir ataques XSS. Por exemplo, um componente de dados não é possível tornar fidedigno num cenário onde aplicações diferentes partilham uma única base de dados. Se um intruso tem capacidade para inserir código malicioso de XSS a base de dados (por abuse uma vulnerabilidade das aplicações, por exemplo) todas as aplicações utilizando codificação não web controlos dependentes, ficará vulnerável. Evite apenas codificação se que pode ser determinado que o resultado do componente de dados será sempre válido.

São exemplos de controlos de ligação de dados que não efectuam a codificação DataGrid DataList, RadioButtonList e CheckBoxList. Controlo dependente efectuar a codificação de dados pode variar dependendo cada controlo específico. Por exemplo, para um DataGrid controlo, tem as seguintes opções:
  • Transformar todas as colunas modelos e utilizar manualmente HtmlEncode()/UrlEncode() cada chamada para DataBinder.Eval
  • Substituir um dos métodos a DataBinding, como, por exemplo, OnDatabinding ou OnItemDataBound e efectuar a codificação nos respectivos itens. O exemplo seguinte ilustra como substituir o método OnItemDataBound de um controlo DataGrid para codificar os itens através de um utilizando HtmlEncode() ou UrlEncode() quando for necessária:

...
[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;
      }
     }
   }
...

441 de página, no capítulo 16: proteger o servidor Web, secção: desactivar o NetBIOS e SMB
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

Nota seguinte é adicionada:

NOTA: Teste as alterações antes de implementar na produção. Desactivar partilha ou NetBIOS negativamente podem afectar a capacidade de gestão para o cenário. Por exemplo, o IIS utiliza a API NetUserChangePassword que depende do NetBIOS. Se permitir aos utilizadores alterar palavras-passe através do IIS, este deixará de funcionar.

Propriedades

Artigo: 867600 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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