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

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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를 통해 암호를 변경할 수 있도록 허용할 경우, 이것은 더 이상 작동하지 않습니다.

0-7356-1842-9 0735618429 웹 응용 프로그램 보안

Warning: This article has been translated automatically

속성

문서 ID: 867600 - 마지막 검토: 01/11/2015 06:17:49 - 수정: 1.4

  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
  • kbnosurvey kbarchive kbmt kbdocfix kbdocerr KB867600 KbMtko
피드백