2013-02-21 2 views
2

보안 관점에서 GUID를 사용하는 것과 관련하여 조언을 듣고 있습니다. ASP.Net 응용 프로그램을 개발했습니다. 웹 서버에없는 문서 및 사진과 같은 일부 자료에 대한 액세스 권한을 사용자에게 제공합니다. 이들은 파일 서버에 저장됩니다. 리소스의 ID를 사용하는 'GetResource.aspx'페이지가 있는데 System.IO.FileInfo를 사용하여 열면 응답 스트림에 쓰여지고 반환됩니다.URL을 통해 GUID를 전달할 때의 보안 위험

그래서 GetResource.aspx? id = 123은 사용자가 액세스 할 수있는 그림을 반환합니다. 물론, 사용자는 수동으로 URL을 GetResource.aspx? id = 456으로 입력 할 수 있습니다.이 경우 해당 ID가있는 그림/문서 등이 반환되며 액세스 권한이없는 것일 수 있습니다.

정수 ID를 사용하는 것이 적절하지 않습니다. ID로 GUID를 사용하면 사용자가 "GetResource.aspx-guid = {Guided guid}"를 수동으로 입력 할 수 없다고 가정하고 스크립트를 사용하는 경우를 포함하여 유효한 리소스에 액세스 할 것으로 예상 할 수있는 충분한 '임의성'을 제공합니까? 초당 많은 추측을 했습니까?

또는 Session 변수에서 사용자의 ID를 확인하고 실제로 요청한 리소스에 액세스 할 수 있는지 확인한 후이를 반환 할 수는 없습니까? (이 글을 쓰면 점점 더 확신 할 수 있습니다. 그런 경우입니다!). 사용자가이 내용을 보호되는 경우 맹목적를 제공하기 전에 권한이 있는지

감사

+0

[ID에 대한 GUID를 사용하면 ID를 예측할 수 있습니까?] (http://security.stackexchange.com/q/31126/17306) – Kobi

+0

감사합니다. Kobi, 나는 그것을 보지 못했으며 동의합니다. 비슷한. 대답 한 모두에게 감사드립니다. 매우 도움이되었습니다. – Kate

답변

4

사용자를 인증하고 리소스에 액세스 할 수있는 권한이 있는지 확인하는 것은 확실합니다. 여기서 제안하는 것은 사용자가 볼 수있는 권한이없는 문서의 유효한 ID를 실수로 또는 의도적으로 누르는 것을 어렵게 만드는 방법입니다.

GUID는 실제로 "우발적 인"유효 ID를 결코 얻지 못할 정도로 충분히 큽니다. 따라서 권한 확인없이 GUID를 만들면 아무도 적극적으로 시스템을 중단하려고 시도하지 않는 한 훌륭한 시스템입니다. 반면에 권한 부여 검사는 적극적인 공격자가있을 때에도 훌륭하게 작동하는 시스템입니다 (물론 이것은 공격자가 수행 할 수있는 작업에 달려 있습니다).

응용 프로그램의 성격에 따라 두 가지 방법 중 하나를 선택해야합니다 (공개되어 있습니까? 사용자는 자신의 행동에 대해 알고 있고 책임이 있습니까? "보안 침해"가 얼마나 나쁜가?).

+0

감사합니다 존, 이것은 우발적 인 것과 누군가 그것을 구하려고 적극적으로 구별하는 것을 포함하여 몇 가지 좋은 점을 제기하는 매우 균형 잡힌 대답입니다. – Kate

3

당신은 결정해야한다.

GUID는 어느 정도 도움이됩니다. 추측 URL이 더 어려워 지므로 GUID를 사용하는 것이 좋습니다. 그러나 URL은 여전히 ​​공유 될 수 있습니다 (실수로). 요청하는 사람과 관계없이 어쨌든 콘텐츠를 제공하려는 경우에는 실제 보호가 거의되지 않습니다.

+0

URL 공유에 대한 좋은 지적, 감사합니다. – Kate

0

콘텐츠가 제한되어 있고 개인 데이터가 있다고 생각되는 경우 사용자 이름과 암호를 사용해야합니다.