웹 응용 프로그램 보안 개선: 위협 및 대책을: 수정 및 메모

기술 자료 번역 기술 자료 번역
기술 자료: 867600 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

이 문서에서는 메모, 수정, 및 Microsoft 패턴 및 구현 방법 책 관련된 알려진된 오류에 대한 정보를 포함합니다.웹 응용 프로그램 보안 향상: 위협 및 대책, ISBN 0-7356-1842-9

우리는 오류를 찾고 있는 책의 웹 버전은 업데이트됩니다. 웹 버전의 MSDN 책에서 이미 해결된 여러 또는 모든 아래 오류 찾을 수 있습니다.

다음 항목은 다룹니다.
  • 보안 ASP.NET 페이지 및 컨트롤 빌드, 페이지 273, 10장: 섹션의: 데이터 바인딩 컨트롤, 구역 완료
  • 페이지 441, 장 16: 웹 서버 보안, 섹션의: NetBIOS 및 SMB 없음

추가 정보

페이지 273, 10장: 보안 ASP.NET 페이지 및 컨트롤 빌드, 섹션의: 데이터 바인딩 컨트롤, 구역 완료
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

변경:

데이터 바인딩 웹 컨트롤은 출력을 인코딩하지 않습니다. 여러 줄로 된 수 TextMode 속성을 설정할 때 출력을 인코딩하는 유일한 TextBox 컨트롤을 컨트롤입니다. 악의적인 XSS 코드가 있는 데이터에 다른 컨트롤을 바인딩하면 코드가 클라이언트에서가 실행됩니다. 따라서 데이터베이스에서 데이터를 검색하는 특정 있는 수 없는 경우 데이터가 유효한지 (아마도 다른 응용 프로그램과 공유되는 데이터베이스 때문에), 클라이언트로 다시 전달하기 전에 데이터를 인코딩합니다.

To:

데이터 바인딩된 컨트롤은 데이터 구성 요소를 통해 상속된 공용 바인딩할 수 있는 웹 컨트롤입니다 ‘ DataSource ’ 속성. 몇 언급하지 DataGrid, 목록 상자 및 DropDownList 자주 사용되는 찾아 됩니다. 모든 데이터 바인딩된 컨트롤에 데이터를 표시할 때 인코딩을 수행할 바인딩된 데이터 구성 요소에서 검색할 따라서 사용자가 직접 신뢰할 수 없는 데이터 구성 요소를 XSS 공격을 방지하기 위해 인코딩을 수행할 수 있습니다. 예를 들어, 데이터 구성 요소는 다른 응용 프로그램을 단일 데이터베이스를 공유할 위치를 시나리오에서 신뢰할 수 없습니다. 공격자는 악의적인 XSS 코드가 (취약점을 한 응용 프로그램, 예를 들어 abusing 의해) 데이터베이스에 삽입할 수 있는 경우, 바인딩된 인코딩이 아닌 웹 컨트롤을 사용하여 모든 응용 프로그램이 취약한 해제됩니다. 경우에만 특정 데이터 구성 요소의 출력 항상 유효한 것으로 지정할 수 있는 경우에는 인코딩을 사용하지 않습니다.

인코딩을 수행하는 데이터 바인딩된 컨트롤을 DataGrid, DataList, RadioButtonList 및 CheckBoxList 예입니다. 바운드 컨트롤을 위해 데이터를 인코딩하는 수행하는 각 특정 컨트롤에 따라 달라질 수 있습니다. 예를 들어, DataGrid에 대한 제어, 다음 옵션을 사용할 수 있습니다.
  • 모든 열을 템플릿으로 켜고 수동으로 DataBinder.Eval 호출할 때마다 HtmlEncode()/UrlEncode() 사용
  • OnDatabinding 또는 OnItemDataBound 같은 데이터 바인딩 메서드를 재정의하고 해당 항목에 대한 인코딩을 수행할. 해당 항목을 사용하거나 인코딩하는 데 DataGrid 컨트롤의 OnItemDataBound 메서드를 재정의하는 방법을 보여 주는 예제입니다 HtmlEncode() 또는 UrlEncode() 필요할 때 사용:

...
[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, 장 16: 웹 서버 보안, 섹션의: NetBIOS 및 SMB 해제
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

다음 노트 추가된:

참고: 프로덕션 환경에서 구현하기 전에 변경 내용을 테스트. 해제를 공유 또는 NetBIOS 시나리오에 맞는 관리 효율성 부정적인 영향을 줄 수 있습니다. 예를 들어, IIS에 대한 NetBIOS 다릅니다 NetUserChangePassword API를 사용합니다. 사용자가 IIS를 통해 암호를 변경할 수 있도록 허용할 경우, 이것은 더 이상 작동하지 않습니다.

속성

기술 자료: 867600 - 마지막 검토: 2007년 5월 8일 화요일 - 수정: 1.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
키워드:?
kbmt kbdocfix kbdocerr KB867600 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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