(ASP.NET) 보안의 전반적인 부분


Microsoft/ASP.NET 2010.10.28 16:15



 보안

 

shakeJ

1. 인증과 권한 부여

 

개념

회원제 웹사이트를 에를 든다면 회원에게만 공개되는 콘텐츠에 접근하기 위해서 반드시 아이디와 암호를 입력하는 로그인 과정을 거치는데 이를 인증이라고 합니다. 즉, 특정 사용자가 유효한 사용자인지를 판단하는 과정을 의미합니다.

 

한편, 인증을 받은 사용자와 인증을 받지않는 사용자는 콘텐츠에 접근 할 수 있는 자격에서 차이가 납니다. 또한 웹 사이트에 접근하는 모든 사용자들은 웹 사이트 정책에 따라 콘텐츠에 대한 접근이 구분되는데 이를 권한 부여라고 합니다.

 

asp.net의 인증 종류

인증방식

설명

윈도우 기반

이것은 운영체제의 권한 제어방식을 웹사이트에 그대로 적용한 인증 처리방식입니다. 하지만 불특정 다수가 접속하는 인터넷 환경에서는 모든 계정을 윈도우에서 관리할 수 없는 단점을 가지기에, 윈도우 기반은 주로 인트라넷에서 사용됩니다.

폼 기반

http쿠키와 html 폼을 이용하여 인증합니다. 폼 기반은 asp.net에서 제공하는 인증 관련 API를 사용 할 수 있기에 인증 처리를 쉽게 해주며, 2.0에서는 자동으로 해주는 멤버자격을 사용 할 수 있습니다.

Passport

마이크로소프트에서 제공하는 인증서비스로서 패스포트의 파트너로 등록된 사이트에서 사용자 프로필을 공유합니다. 상용서비스입니다.

사용자지정

인증과 관련된 프로세스를 개발자가 직접 구현합니다. 세세한 구현이 가능하지만 다른 인증 방식에 비해 많은 개발 시간을 필요로 합니다.

그림과 같이 손쉽게 로그인 부분을 구현 할 수 있다.

 

 

 

 

 

 

폼 기반 인증

폼 기반은 ASP.nET에서 제공하는 인증 관련 API를 사용해서 인증 처리를 하는 것입니다.

위와 같이 쿠키 존재 여부를 사용하여 인증과정을 거쳐 쿠키가 존재시 페이지 접근 권한여부를 묻고, 권한 부여시 요청 페이지에 접근하게 됩니다.

하지만 인증과정에서 인증 쿠키가 존재하지 않는다면, 로그인페이지로 이동하여 아이디와 암호를 입력, 인증과정을 거치게 됩니다.

 

asp.net에서는 폼기반인증을 사용하기 위해 Web.Config파일을 다음과 같이 수정해야 합니다,

 

<configuration>

    <location path="ipmain.aspx">

        <system.web>

            <authorization>

                <deny users="?"/>

            </authorization>

        </system.web>

</configuration>

위와 같이 적어주면 기본적으로 authentication 요소의 특성이 windows로 지정이 됩니다 . 이는 윈도우 기반인증이 기본인증이란 뜻이며, 수정하면 폼기반으로 변경 할 수 있습니다.

 

 

폼기반 인증 예제

Web.Config

<authentication mode="Forms">

<forms name=".ASPXAUTH" loginUrl="Ex01_Login.aspx" defaultUrl="Ex01_Default.aspx"></forms>

</authentication>

 

<authorization>

<deny users="?"/>

 

</authorization>

Default.aspx

<script runat="server">

protected void Page_Load(object sender, EventArgs e)

{

Label1.Text = User.Identity.Name + " 환영하쇼!.!!!";

}

 

protected void Button1_Click(object sender, EventArgs e)

{

FormsAuthentication.SignOut();

Response.Redirect("Ex01_Login.aspx");

}

</script>

 

Login.aspx

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)

{

if ((TextBox1.Text == "aaaa") && (TextBox2.Text == "aaaa"))

FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, CheckBox1.Checked);

else

Label1.Text = " 아이디 비번이 일치 X "

}

</script>

 

 

<authentication>요소 하위 속성에 대해서 알아보겠습니다(폼 기반인증의 세세한 제어)

특성

설명

cookieless

인증 쿠키의 사용여부 정의

UseCookies: 항상 쿠기사용

UseUrl: 쿠키말고 인증정보를 URL에 저장

AutoDetect: 브라우저에서 쿠키를 지원하면 쿠키를 사용하고 그렇지 않으면 사용 안함

dafaultUrl

인증 후 리디렉션 할 기본 URL을 지정한다. 기본값 Defualt.aspx

Domain

쿠키를 공유할 수 있는 도메인을 지정

protection

쿠키에 사용되는 암호화 유형을 지정한다.

Validation 쿠키 전송 시 데이터 변경 여부 체크, 데이터 유효성을 유지하도록 지정한다.

None : 쿠키를 암호화지만(3DES이용)유효성 검사는 수행하지 않는다.

Encryption: 개인설정정보를 제공할 경우에만 쿠키를 사용하고 보안 요구 사항이 낮은 사이트에선 암호화 유효성 검사를 해제

All : 응용 프로그램이 데이터 유효성 검사 및 암호화를 모두 사용해 쿠키를 보호하도록 지정한다.

timeout

쿠키가 만료될 때까지의 시간을 정수 단위로 지정한다.

 

권한부여

폼 기반 인증에서 권한 부여는 Web.config 파일의 authorization 요소에서 지정한다.

 

<location path="ipmain.aspx">

        <system.web>

            <authorization>

                <deny users="?"/>

            </authorization>

        </system.web>

 

<deny users="?"/> ?- 익명 사용자들을 모두 차단

<deny users="*"/> *- 모든 이들을 차단(익명 사용자포함)

 

<allow users="?"/>

<allow users="*"/>

 

 

2. 로그인 컨트롤 사용하기

 

멤버자격(MemberShip)

멤버 자격은 ASP.NET 2.0에서 제공하는 로그인 컨트롤, 멤버자격 API, 멤버 자격 공급자가 서로 유기적으로 동작하여 보안 프로세스와 관련된 작업을 자동으로 처리해 주는 기능을 말한다.

 

ASP.NET은 기본적으로 SqlMembershipProvider를 사용합니다.

기본적으로 정의되어 있는 멤버 자격 공급자는 Machine.config 파일에서 확인 할 수 있습니다.

<coneectionStrings>

<add name="LocalSqlServer2" connectionString="datasource=JCH07\SQLEXPRESS;IntergratedSecurity=SSPI;AttachDBfilename=|DataDirectory|aspnetdb.mdf;User Instance=true"

providerName="System.Data.SqlClient" />

</coneectionStrings>

 

<membership defaultProvider="MyAspNetSqlMembershipProvider">

<providers>

<add name="MyAspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="4" minRequiredNonalphanumericCharacters="0" />

</providers>

</membership>

멤버자격 공급자의 속성

type

추상 기본 클래스 구현 형식 지정

enablePasswordRetrieval

멤버자격에서 암호찾기를 지원하는지 여부

True, False(기본값)

enablePasswordReset

멤버자격에서 암호수정을 지원하는지 여부

기본 SQL공급자 True, AD공급자 False

requiresQuestionAndAnswer

멤버 자격에서 암호 다시 설정 및 찾기위한 보안 대답이 필요한지 여부 지정

기본 SQL공급자 True, AD공급자 False

requiresUnizueEmail

전자메일의 유일성을 체크

기본 SQL공급자 True, AD공급자 False

passwordFormat

저장될 암호의 형식을 지정

Clear : 암호가 암호화 되지 않음

Encrypted:암호화설정 사용 암호화

Hashed<기본값>:SHA1해시 알고리즘을 사용하여 단방향으로 암호화

maxInvalidPasswordAttempts

허용되는 잘못된 암호 또는 보안 대답 시도 횟수

횟수 초과시 자동적으로 계쩡 차단

mainRequiredPasswordLength

암호에 필요한 최소 문자수를 지정. 기본값 1

0~128

 

멤버공급자에서 밑과 같을 때

<add name="IPConnectionString1" connectionString="Data Source=JCH07\SQLEXPRESS;Initial Catalog=IP;User ID=a;password=b"

providerName="System.Data.SqlClient" /

IPConnectioNString1이라는 접속은 JCH07\SQlEXPRESS라는 서버에 접속하여서 IP라는 데이터 베이스를 받는데, 이때 아이디와 패스워드는 어떤 걸로 접속을 하라라는 뜻이다.

 

 

질문이나 정보 공유는 댓글로 ^^

신고

WRITTEN BY
ShakeJ

0 ,