ERHÖHEN WEB APPLICATION SECURITY: BEDROHUNGEN und GEGENMAßNAHMEN: Korrekturen und Kommentare

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 867600 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel enthält Kommentare, Korrekturen und Informationen zu bekannten Fehlern im Zusammenhang mit dem Buch Microsoft Patterns & Practices Verbessern der Sicherheit von Webanwendungen: Bedrohungen und Gegenmaßnahmen, ISBN 0-7356-1842-9

Webversion des Buches wird aktualisiert, wie wir den Fehler gefunden. Möglicherweise viele oder alle der unten stehenden Fehlerliste finden Sie in der Web-Version der Dokumentation auf MSDN bereits behoben.

Folgende Themen werden behandelt:
  • Seite 273, Kapitel 10: Erstellen sicherer ASP.NET-Seiten und Steuerelemente, Abschnitt: datengebundenen Steuerelementen Abschnitt abgeschlossen
  • Seite 441, Kapitel 16: Schützen des Webservers, Abschnitt: Deaktivieren von NetBIOS und SMB

Weitere Informationen

Seite 273, Kapitel 10: Erstellen sicherer ASP.NET-Seiten und Steuerelemente, Abschnitt: datengebundenen Steuerelementen abgeschlossen Bereich
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

ändern:

Datengebundene Web Steuerelemente Ausgabe nicht codieren. Das einzige Steuerelement, das Ausgabe codiert ist das TextBox-Steuerelement, wenn dessen Eigenschaft TextMode auf MultiLine festgelegt ist. Wenn Sie alle anderen Steuerelemente an Daten, die bösartigen XSS-Code verfügt binden, wird der Code auf dem Client ausgeführt. Als Ergebnis Wenn Sie Daten aus einer Datenbank abzurufen und Sie nicht sicher, dass sein die Daten ist gültig (vielleicht da es eine Datenbank handelt, die mit anderen Anwendungen gemeinsam genutzt wird), die Daten zu codieren, bevor Sie es an dem Client übergeben.

To:

Gebundene Steuerelemente Websteuerelemente sind, die an Datenkomponenten über eine öffentliche geerbte bindbare ? DataSource ?-Eigenschaft. Um zu wenige zu erwähnen, finden Sie DataGrid, ListBox und DropDownList, sehr häufig verwendet werden. Nicht alle Daten gebundene Steuerelemente führen Codierung beim Anzeigen von Daten aus einer gebundenen Daten-Komponente abgerufen; folglich es Ihrer Verantwortung, führen Sie die Codierung auf nicht vertrauenswürdige Datenkomponenten um XSS-Angriffe zu vermeiden. Beispielsweise kann keine Datenkomponente in einem Szenario vertrauenswürdig sein, in denen verschiedene Anwendungen eine einzelne Datenbank freigeben. Wenn ein Angreifer die Möglichkeit zum Einfügen von böswilligen XSS-Codes in die Datenbank (durch eine Sicherheitsanfälligkeit in eine der Anwendungen, z. B. Menge) hat alle Anwendungen mit nicht-Codierung Websteuerelemente gebunden ist, wird anfällige aktivieren. Vermeiden Sie nur Codierung, wenn Sie sicher sein können, dass die Ausgabe der Datenkomponente immer gültig werden.

Beispiele für datengebundene Steuerelemente, die keine Codierung durchführen sind DataGrid, DataList, RadioButtonList und CheckBoxList. Codierung für ein Daten durchführen kann gebundenes Steuerelement jedes bestimmte Steuerelement abhängig. Z. B. für ein DataGrid-Steuerelement, Sie haben die folgenden Optionen:
  • Aktivieren Sie alle Spalten in Vorlagen und manuell bei jedem Aufruf DataBinder.Eval verwenden Sie HtmlEncode()/UrlEncode()
  • Überschreiben Sie eine seiner Methoden DataBinding z. B. OnDatabinding oder OnItemDataBound und führen Sie Codierung auf seine Elemente. Das folgende Beispiel veranschaulicht die OnItemDataBound-Methode eines DataGrid-Steuerelements überschrieben, um seine Elemente entweder durch Codieren mithilfe von HtmlEncode() oder UrlEncode() bei Bedarf:

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

Seite 441, Kapitel 16: Schützen des Webservers, Abschnitt: Deaktivieren von NetBIOS und SMB
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

folgenden Hinweis hinzugefügt:

Hinweis: Testen Sie Ihre Änderungen vor der Implementierung in der Produktion. Freigabe deaktivieren oder NetBIOS kann die Verwaltungsmöglichkeiten für Ihr Szenario beeinträchtigen. IIS verwendet beispielsweise die NetUserChangePassword-API NetBIOS abhängig. Wenn Sie Benutzer ändern Kennwörter über IIS zulassen, funktioniert dies nicht mehr.

Eigenschaften

Artikel-ID: 867600 - Geändert am: Dienstag, 8. Mai 2007 - Version: 1.4
Die Informationen in diesem Artikel beziehen sich auf:
  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
Keywords: 
kbmt kbdocfix kbdocerr KB867600 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 867600
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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