728x90

HTTP Request를 던지면 Response 헤더에 서버 정보가 따라오는데요.

보안 점검 사항에서 불필요한 서버 정보를 노출하지 말라고 하여 수정할 필요성이 있었습니다.

 

서버 정보를 지우기 위해 찾아본 내용으로 크게 두 방법이 있었습니다.

1. URL Rewrite 2.0

2. web.config 수정

 

1번은 IIS에서 응답하는 헤더를 재작성해 전달하는 방식으로 수정합니다.

예를 들어 서버 헤더가 기존에 IIS 10.0으로 응답했다면 서버 헤더로 나가는 값을

전부 *이나 ''처럼 빈값으로 변경해 응답하는 방식입니다.

 

2번은 web.config의 웹서버 보안 부분에 필터링을 넣어 아예 서버 헤더가 응답되지 않습니다.

저는 IIS 10.0을 사용 중이며 해당 방법을 사용했습니다.

그런데 IIS 8.5 버전을 사용하는 경우 에러가 발생할 수 있다니 확인이 필요할 것 같습니다.

아래는 2번 방법의 링크입니다.

https://serverfault.com/questions/991045/remove-modify-iis-10-server-header-which-discloses-iis-version

 

 

728x90

'C#' 카테고리의 다른 글

[.NET] SmtpClient  (0) 2022.12.02
[.NET] MailMessage  (0) 2022.12.01
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30
[ASP.NET] View 단에 데이터 전달하기  (0) 2022.11.27
728x90

SmtpClient Class

  • 애플리케이션에서 SMTP를 사용하여 이메일을 보낼 수 있도록 합니다.
  • 하지만 많은 최신 프로토콜들이 SmtpClient를 지원하지 않으므로 새 개발에는 대신 MailKit 또는 다른 라이브러리를 사용하는 것이 좋습니다.
  • 사용하기 위해서는 아래의 속성을 지정해야 합니다.
    • Host: SMTP 호스트 서버
    • Credentials:인증서 -> 필요한 경우에만 설정
    • 보내는 사람
    • 받는 사람
    • 메세지 내용
public static void Main(string[] args)
    {
        // SmtpClient 인스턴스를 생성합니다.
        SmtpClient client = new SmtpClient(args[0]);
        // 보내는 사람의 메일 주소를 생성합니다.
        MailAddress from = new MailAddress("jane@contoso.com",
            "Jane " + (char)0xD8+ " Clayton",
        System.Text.Encoding.UTF8);
        // 받는 사람의 메일 주소를 생성합니다.
        MailAddress to = new MailAddress("ben@contoso.com");
        // 메일 메시지를 생성합니다.
        MailMessage message = new MailMessage(from, to);
        message.Body = "This is a test email message sent by an application. ";

        client.Send(message);

        message.Dispose();

    }

Ref

  • MailKit
    • https://github.com/jstedfast/MailKit
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] MailMessage  (0) 2022.12.01
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30
[ASP.NET] View 단에 데이터 전달하기  (0) 2022.11.27
728x90

MailMessage Class

  • SmtpClient 클래스를 사용하여 보낼 수 있는 이메일 메시지를 나타냅니다.
  • MailMessage 인스턴스는 SmtpClient를 사용하여 SMTP 서버로 전송되는 메일 메시지를 생성하는데 사용됩니다.
  • 메일의 보낸 사람, 받는 사람, 제목 및 본문을 초기화, 설정할 수 있습니다.
  • 속성
속성                    설명
Attachments             첨부파일
Bcc                     숨은 참조
CC                      참조
BodyEncoding            콘텐츠 형식
HeadersEncoding         사용자 지정 헤더 인코딩
Body                    메시지 본문
Priority                우선 순위
To                      받는 사람
ReplyToList             메일의 회신 주소 목록
From                    보낸 사람
Subject                 주제 
... 
  • 생성자

    • MailMessage()
    • MailMessage(MailAddress, MailAddress)
    • MailMessage(String from, String to)
    • MailMessage(String from, String to, String? subject, String? body)
  • 예시

public static void CreateMessageWithAttachment(string server)
{
    // 현재 디렉토리에 있는 data.xls 첨부파일
    string file = "data.xls";
    // 생성자로 보낸 사람, 받는 사람, 제목, 메시지 설정
    MailMessage message = new MailMessage(
        "jane@contoso.com",
        "ben@contoso.com",
        "Quarterly data report.",
        "See the attached spreadsheet.");

    // 첨부 파일 생성.
    Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
    // 해당 파일의 타임스탬프 생성.
    ContentDisposition disposition = data.ContentDisposition;
    disposition.CreationDate = System.IO.File.GetCreationTime(file);
    disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
    disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
    // 파일 메시지에 첨부파일 추가.
    message.Attachments.Add(data);

    SmtpClient client = new SmtpClient(server);
    // 인증서 필요하면 인증서 추가.
    client.Credentials = CredentialCache.DefaultNetworkCredentials;

    try
    {
        // 메일 전송
        client.Send(message);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception caught in CreateMessageWithAttachment(): {0}",
            ex.ToString());
    }

    data.Dispose();
}
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] SmtpClient  (0) 2022.12.02
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30
[ASP.NET] View 단에 데이터 전달하기  (0) 2022.11.27
728x90

System.Data.DataTable

  • 메모리 내 데이터의 한 테이블을 나타냅니다.
  • 생성자
    • DataTable()
    • DataTable(SerializationInfo, Streaming Context)
    • DataTable(String)
    • DataTable(String, String)
  • DataTable(String)
    • 지정된 테이블 이름을 사용하여 새 인스턴스를 초기화합니다.
    • 개체에 액세스할 때는 조건부로 대/소문자를 구분합니다.
    • DataTable 이름이 'mydatatable'과 'Mydatatable'이 존재하는 경우에는 테이블 중 하나를 검색하는데 문자열 대/소문자를 구분합니다.
    • 하지만 'Mydatatable' 하나만 존재할 경우 문자열 대/소문자를 구분하지 않습니다.
  • Ref
    • https://learn.microsoft.com/ko-kr/dotnet/api/system.data.datatable?view=net-7.0

System.Data.DataColumn

  • DataTable에 있는 열의 스키마를 나타냅니다.

    private void MakeTable()
    {
      // Create a DataTable.
      // Product라는 이름의 테이블 생성
      DataTable table = new DataTable("Product");
    
      // Create a DataColumn and set various properties.
      DataColumn column = new DataColumn();
      // 열의 데이터 타입 설정
      column.DataType = System.Type.GetType("System.Decimal");
      // 해당 열에 Null값이 허용되는지 여부 True:허용, False:불가 기본값 True
      column.AllowDBNull = false;
      column.Caption = "Price";
      column.ColumnName = "Price";
      // 기본값 설정
      column.DefaultValue = 25;
    
      // Add the column to the table.
      table.Columns.Add(column);
    
      // Add 10 rows and set values.
      DataRow row;
      for(int i = 0; i < 10; i++)
      {
          row = table.NewRow();
          row["Price"] = i + 1;
    
          // Be sure to add the new row to the
          // DataRowCollection.
          table.Rows.Add(row);
      }
    }
  • Ref

    • https://learn.microsoft.com/ko-kr/dotnet/api/system.data.datacolumn?view=net-7.0

System.Data.DataRow

  • DataTable의 데이터 행을 나타냅니다.

    private void CreateNewDataRow()
    {
      // Use the MakeTable function below to create a new table.
      // MakeNamesTable은 id,fname,lname의 열을 가진 table을 생성
      DataTable table;
      table = MakeNamesTable();
    
      // Once a table has been created, use the
      // NewRow to create a DataRow.
      DataRow row;
      row = table.NewRow();
    
      // Then add the new row to the collection.
      row["fName"] = "John";
      row["lName"] = "Smith";
      table.Rows.Add(row);
    }
  • Ref

    • https://learn.microsoft.com/ko-kr/dotnet/api/system.data.datarow?view=net-7.0
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] SmtpClient  (0) 2022.12.02
[.NET] MailMessage  (0) 2022.12.01
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30
[ASP.NET] View 단에 데이터 전달하기  (0) 2022.11.27
728x90

web.config 파일의 보안 설정 구성

FormsAuthentication 방식

<authentication mode="Forms">
    <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
        protection="All" path="/" timeout="30" />
</authentication>
  • 인증된 사용자의 자격 증명을 쿠키 또는 URL에서 관리
  • authentication<location path="">로 감싸면 path에 설정된 디렉토리에 한정된 권한 설정
  • loginUrl
    • 등록한 주소를 통해 사용자 인증을 진행
    • 인증 만료시 해당 로케이션으로 리디렉션 됨
  • defaultUrl
    • 요청에 반환 URL이 포함되지 않은 경우 해당 경로로 이동
  • timeout
    • 인증 티켓의 만료 시간
  • slidingExpiration 상대 만료를 사용하는지 여부
    • 인증 만료 시간이 경과하다 요청이 들어오면 인증 만료 시간을 재설정

FormsAuthentication Class

Method

  • SetAuthCookie(String, Boolean)
    • 사용자 이름에 대한 인증 티켓을 만들어 응답의 쿠키나 URL에 추가
    • Boolean 브라우저 세션 전체에 저장되는 영구 쿠키를 만들려면 True
  • SignOut()
    • 브라우저에서 폼 인증 티켓 제거

ref

  • https://learn.microsoft.com/ko-kr/dotnet/api/system.web.security.formsauthentication?view=netframework-4.8
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] SmtpClient  (0) 2022.12.02
[.NET] MailMessage  (0) 2022.12.01
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[ASP.NET] View 단에 데이터 전달하기  (0) 2022.11.27
728x90

View에 데이터 전달하기

  1. viewModel
  2. viewData
  3. viewBag

ViewModel

  • view에 model의 형식을 지정한다.
  • controller에서 view에 model의 인스턴스를 전달한다.
  • viewModel을 사용시 컴파일 때 인스턴스 형식의 유효성 검사를 진행한다.
  • 사용법
// @model로 사용할 모델을 지정한다. 
@model WebApplication1.ViewModels.Address

<h2>Contact</h2>
<address>
    @Model.Street<br />
    @Model.City, @Model.State @Model.PostalCode<br />
    <abbr title="Phone">P:</abbr> 425.555.0100
</address>
public IActionResult Contact()
{
    ViewData["Message"] = "Your contact page.";

    var viewModel = new Address()
    {
        Name = "Microsoft",
        Street = "One Microsoft Way",
        City = "Redmond",
        State = "WA",
        PostalCode = "98052-6399"
    };

    return View(viewModel);
}

ViewData

  • string 키를 통해 액세스되는 ViewDataDictionary 개체입니다.
  • string을 제외하고 다른 개체 값을 추출할 때는 캐스트가 필요합니다.
  • 런타임에 동적으로 확인됩니다.
  • [viewData]라는 특성의 ViewDataAttribute를 사용할 수 있습니다.
@{ // Since Address isn't a string, it requires a cast. 
var address = ViewData["Address"] as Address; 
} 
@ViewData["Greeting"] World!

<address>
    @address.Name<br />
    @address.Street<br />
    @address.City, @address.State @address.PostalCode
</address>
public IActionResult SomeAction()
{
    ViewData["Greeting"] = "Hello";
    ViewData["Address"]  = new Address()
    {
        Name = "Steve",
        Street = "123 Main St",
        City = "Hudson",
        State = "OH",
        PostalCode = "44236"
    };

    return View();
}

ViewBag

  • ViewBag은 ViewData에 저장된 개체에 대한 동적 액세스를 제공
  • 캐스팅이 필요하지 않다.
@ViewBag.Greeting World!

<address>
    @ViewBag.Address.Name<br />
    @ViewBag.Address.Street<br />
    @ViewBag.Address.City, @ViewBag.Address.State @ViewBag.Address.PostalCode
</address>
public IActionResult SomeAction()
{
    ViewBag.Greeting = "Hello";
    ViewBag.Address  = new Address()
    {
        Name = "Steve",
        Street = "123 Main St",
        City = "Hudson",
        State = "OH",
        PostalCode = "44236"
    };

    return View();
}
  • ViewData와 ViewBag은 동일한 ViewData 컬렉션을 사용하므로 두 객체의 값을 읽고 쓸 때 혼합하여 사용할 수 있습니다.
@{ ViewBag.Title = "About Contoso"; // ViewBag 형식 }

<!DOCTYPE html>
<html lang="en">
    <head>
        // ViewData 형식
        <title>@ViewData["Title"]</title>
    </head>
</html>

ViewData와 ViewBag의 차이점

  • ViewData
    • 사전의 키는 문자열이므로 공백을 사용할 수 있습니다.
    • -> ViewData["Some Key With Whitespace"]
    • string 이외의 모든 형식을 캐스트 해야합니다.
  • ViewBag
    • 점 표기법을 사용하며 캐스팅이 필요하지 않습니다.
    • 간단하게 Null값을 확인할 수 있습니다.
    • -> @ViewBag.Person?.Name
728x90

'C#' 카테고리의 다른 글

IIS Server Header 제거하기  (0) 2023.05.12
[.NET] SmtpClient  (0) 2022.12.02
[.NET] MailMessage  (0) 2022.12.01
[.NET] System.Data.DataTable/DataRow/DataColumn  (0) 2022.11.30
[.NET] FormsAuthentication 폼 인증 설정  (0) 2022.11.30

+ Recent posts