문제

.NET PDB 파일을 실제 서버에 유지하는 보안 문제가 있습니까?

예외를 던지는 것이 조금 더 오래 걸릴 수 있지만 어쨌든 누가 정상 실행 중에 예외를 던지는 지 알고 있습니까? :-)

그러나 보안 관점에서? 문제가 있습니까?

도움이 되었습니까?

해결책

흠 - 나는 이것에 대한 보안주의의 측면에 의지 할 것입니다. PDB가 있어야하지만 프로덕션 서버에는 있어야한다고 생각합니다. 게다가, 당신은 모든 라이브 시스템에서 디버그를 끄려고해야합니다. 디버그는 불쾌하며 필요하지 않을 때는 원하지 않습니다.

에서 Scott Guthrie:

  1. ASP.NET 페이지의 컴파일은 더 오래 걸립니다 (일부 배치 최적화가 비활성화되므로)
  2. 코드는 더 느리게 실행할 수 있습니다 (일부 추가 디버그 경로가 활성화되어 있으므로)
  3. 런타임에 응용 프로그램 내에서 훨씬 더 많은 메모리가 사용됩니다.
  4. Webresources에서 다운로드 한 스크립트 및 이미지 AAXD 처리기는 캐시되지 않습니다.

배포 소매 설정 = Machine.config에서 true :

<configuration>
    <system.web>
          <deployment retail="true"/>
    </system.web>
</configuration>

이렇게하면 디버그, 오류 및 추적 설정을 무시하면 컴퓨터 자체 외부의 오류 공개를 방지 할 수 있습니다.

이제 디버그를 끄고 오류 또는 추적이 켜지지 않아 PDB를 제작 서버에 배포 하시겠습니까? 다른 곳, 아마도 개발 서버조차 저장하십시오. DEV에서 프로덕션으로의 코드 프로모션 스크립트는 PDB를 구체적으로 제외 할 수 있지만 프로덕션 디버깅을 수행 해야하는 경우 사용할 수 있도록 PDB를 구체적으로 제외 할 수 있습니다.

다른 팁

시스템이 PDB로 안전하지 않으면 PDB가 없으면 안전하지 않을 수 있습니다. 분명히, 그것은 더 나은 오류 보고서가 당신에게 얼마나 가치있는 지에 달려 있습니다. 개인적으로, 나는 그것을 많이 소중히 여기므로 PDB를 배치하는 경향이 있습니다.

공정한 주장도 그렇게 생각합니다 ~ 아니다 라이브 서버에 PDB를 남겨 두는 것이 위험합니다. 생산이 중단되고 개발자 또는 UAT에서 문제를 재현 할 수없는 경우 오류가 발생하는 위치를 진단하는 데 훨씬 더 많은 시간이 소요될 수 있습니다 (그리고 아마도 불가능).

최소한 배포 된 DLL과 일치하는 PDB 제작 서버 어딘가에 ZIP 파일에 있어야합니다. 그들은 당신이 도와주지 않을 경우를 대비하여 자신 이외의 사람들이 쉽게 찾아야합니다.

또한 참조하십시오 PDB 파일 : 모든 개발자가 알아야 할 사항 John Robbins에 의해.

웹 사이트에 .pdb 파일을 게시 할 때 발생할 수있는 유일한 문제는 예외가 발생한 시점이며 Web.config에서 CustomerRors 속성을 설정하는 것을 잊었습니다. 스택 추적은 파일 이름과 줄 번호로 표시되며 보안 문제 일 수 있습니다.

다른 위험이 있다고 생각하지 않습니다.

서버가 IIS 인 경우 no. 이 파일은 올바른 장소 (웹 사이트 bin)에 보관되면 대중에게 노출되지 않습니다. 때로는 웹 서버에서 중간 (OBJ 디렉토리) 파일을 찾았습니다. 이는 실수로 바이너리를 홍보하는 가장 좋아하는 방법 인 것 같습니다. PDB가 보이는 경우 DLL도 보이기 때문에 더 나쁩니다.

Activa에서 언급 한 바와 같이, 스택 추적은 줄 번호가 있거나없는 해커에게 매우 유용합니다. 비공개로 유지하십시오.

실제 서버 (서비스 등)에서 실행중인 다른 프로그램 등은 공개적으로 액세스 할 수 없다고 가정합니다.

최종 사용자에게 실패한 예외를 제시한다면 (일명 노란색 사망의 화면), 공격자가 시스템에 대한 더 나은 통찰력을 얻을 위험이있을 수 있습니다.

가능한 솔루션 중 하나 - 예외 처리 정책 저것:

  1. 원래 스택 추적, 추가 정보 및 고유 한 예외 ID (Guid)로 모든 예외를 기록합니다.
  2. 해고 된 예외를 예외 ID (참조 및 피드백) 만 포함하는 래퍼로 대체하고 폐기 된 스택 추적 정보가있는 소독 메시지 (예 : 연결 문자열 없음)를 포함합니다.

.NET의 오픈 소스 예외 처리 블록의 예 :

기본적으로 PDB는 Poking에 관해서는 소스 코드 바로 아래에 있으며 ASP.net/IIS는 다운로드를 중단하지 않습니다.

이제 사람들이 조립 이름을 추측해야 할 것이고, 그럴 가능성이 거의 없지만 왜 위험을 감수해야합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top