ASP.NET 세션 쿠키에서 보안 플래그를 설정하는 방법


146

HTTPS를 통해서만 전송되고 일반 HTTP를 통해 전송되지 않도록 ASP.NET 세션 쿠키에서 보안 플래그를 설정하는 방법은 무엇입니까?

답변:


127

이 두 가지, 하나 개 httpCookies에서이 요소를 web.config켜 할 수 requireSSL있는 단지 만도 폼 인증 내부 SSL의 세션을 포함하여 모든 쿠키를 전송할 수는 있지만, httpcookies에 SSL을 켜면 내부의 형태도 구성에 당신은 또한 그것을 설정해야합니다.

명확성을 위해 편집하십시오 : 이것을 넣으십시오.<system.web>

<httpCookies requireSSL="true" />

13
+1 명확히하기 위해, 이것은 인증 쿠키의 보안 플래그를 true로 설정하기 위해 web.config에 추가해야하는 것입니다<httpCookies requireSSL="true" />
Tr1stan

8
이것은 (서버 수준) 구성에 따라 다릅니다. "응용 프로그램이 보안 쿠키를 발행하도록 구성되었습니다.이 쿠키는 브라우저가 SSL (https 프로토콜)을 통해 요청을 발행해야합니다. 그러나 현재 요청은 SSL을 사용하지 않습니다."라는 오류로 테스트 영역이 다운되었습니다. 이는 리버스 프록시가 있고 브라우저가 SSL을 통해 프록시에 연결되었지만 IIS 서버에 대한 리버스 프록시가 포트 80을 통해 이루어 졌기 때문에 애플리케이션이 보안되지 않았다고 생각했기 때문입니다.
mlhDev

4
@Bargitta 우리는 Application_PreSendRequestHeaders 이벤트를 처리했으며 특정 응용 프로그램 설정이 true이면 모든 쿠키를 보안으로 설정 합니다 . 이 앱 설정은 HTTPS 외부 사이트에만 설정되어 있습니다.
mlhDev

알겠습니다. 모든 외부 사이트에서 HTTPS를 사용합니다.
Bargitta

IIS7 system.web이 system.webserver로 대체 된 후에 다른 곳 에서이 설정을 시도했습니다. IIS 8.5에서는 구성 오류가 발생했지만 system.web 섹션을 구성 파일에 추가하고 설정을 넣은 경우 모두 작동했습니다.
Eborbob

181

에서 <system.web>요소, 다음과 같은 요소를 추가 :

<httpCookies requireSSL="true" />

그러나 블록에 <forms>요소가 있으면 system.web\authentication의 설정이 재정의 httpCookies되어 기본값으로 다시 설정됩니다 false.

이 경우 requireSSL="true"양식 요소에도 속성을 추가해야합니다 .

따라서 다음과 같이 끝납니다.

<system.web>
    <authentication mode="Forms">
        <forms requireSSL="true">
            <!-- forms content -->
        </forms>
    </authentication>
</system.web>

이러한 요소에 대한 MSDN 설명서는 여기여기 를 참조 하십시오 .


2
'lockItem'속성을 포함하여 <httpCookies requireSSL = "true"/> 설정을 재정의하는 다른 web.config 설정을 피할 수 있습니다. <httpCookies requireSSL = "true"lockItem = "true"/>와 같습니다. 자세한 정보는 여기 dotnetnoob.com/2010/11/how-to-secure-aspnet-cookies.html
JTech

1
또한 roleManager요소 가 있으면 해당 속성 cookieRequireSSL="true"도 true로 설정해야합니다. 참조 msdn.microsoft.com/en-us/library/…
Jeff Mergler

관련 파일에 위의 변경 사항을 추가하면 응용 프로그램에서 세션 객체가 작동하지 않고 null이됩니다. 이 문제를 어떻게 해결할 수 있습니까?
satya

앱에 HTTP 또는 HTTPS를 사용하고 있습니까? 여기서 설정하는 "보안"플래그는 쿠키가 암호화되지 않은 (예 : HTTP) 연결을 통해 전송되는 것을 방지합니다.
Martin Eden

21

엔터프라이즈 환경에서 체크인 된 코드에 대해 이야기하면 문제가 빨리 발생합니다. 우리는 가장 좋은 방법은 web.Release.config 에 다음을 포함시키는 것입니다.

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
  <authentication>
      <forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
  </authentication>
</system.web>

이렇게하면 개발자는 영향을받지 않으며 (디버그에서 실행) 릴리스 빌드를받는 서버 만 쿠키를 SSL로 요구합니다.


^^^이 ^^^는 방법입니다. 추가 정보 : Web.Config 변환 : go.microsoft.com/fwlink/?LinkId=125889
Jeff Mergler

0

secure-이 속성은 요청이 HTTPS와 같은 보안 채널을 통해 전송되는 경우에만 쿠키를 보내도록 브라우저에 지시합니다. 이는 쿠키가 암호화되지 않은 요청을 통과하지 못하도록 보호합니다. HTTP 및 HTTPS를 통해 애플리케이션에 액세스 할 수있는 경우 쿠키를 일반 텍스트로 보낼 수 있습니다.


0

@ Mark D의 대답을 바탕으로 web.config 변환을 사용하여 다양한 쿠키를 모두 보안으로 설정합니다. 이 설정을 포함 anonymousIdentification cookieRequireSSL하고를 httpCookies requireSSL.

이를 위해 web.Release.config를 다음과 같이 설정하십시오.

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
  </system.web>
</configuration>

ASP.NET Membership Provider(내가 알고있는 고대) 역할 및 양식 인증을 사용하는 경우 roleManager cookieRequireSSLforms requireSSL속성도 안전한 것으로 설정하려고합니다 . 그렇다면 web.release.config는 다음과 같습니다 (위에 멤버십 API의 새 태그와 함께 포함됨).

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
    <roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
    <authentication>
        <forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    </authentication>
  </system.web>
</configuration>

web.config의 배경이 여기에서 변환됩니다. http://go.microsoft.com/fwlink/?LinkId=125889

분명히 이것은 OP의 원래 질문을 넘어서는 것이지만 모두 보안으로 설정하지 않으면 보안 검색 도구가 표시되고 보고서에 빨간색 플래그가 표시 될 것으로 기대할 수 있습니다. 내가 어떻게 알아? :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.