데이터베이스 ID 노출-보안 위험?
URL 등의 데이터베이스 ID를 노출하는 것이 보안이라고 들었지만 그 이유를 이해하는 데 어려움을 겪고 있습니다.
왜 위험하거나 왜 왜곡 지에 대한 의견이나 링크가 있습니까?
편집 : 물론 액세스 범위가 지정됩니다. 예를 들어 리소스 foo?id=123
를 볼 수있는 오류 페이지가 표시됩니다. 이름은 반드시 URL 자체가 비밀이어야합니다.
편집 : URL이 비밀 인 경우 수명이 제한되어 생성 된 토큰 (예 : 1 시간 동안 유효하며 한 번만 사용할 수 있음)이 포함됩니다.
편집 (몇 달 후) : 현재 선호되는 방법은 ID에 UUIDS를 사용하여 노출시키는 것입니다. 구성 번호 (일반적으로 일부 DB의 성능을 위해)를 사용하는 경우 각 항목에 대해 UUID 토큰을 대체 키로 생성하고 공개하는 것이 좋습니다.
적절한 조건이 주어지면 식별자를 노출하는 것이 보안 위험이 아닙니다. 그리고 실제로는 식별자를 노출하지 않고 웹 응용 프로그램을 디자인하는 것은 매우 부담이됩니다.
준수해야 할 몇 가지 규칙은 다음과 가변합니다.
- 역할 기반 보안을 사용하여 작업에 대한 액세스를 제어하십시오. 이 작업을 수행하는 방법은 선택한 플랫폼과 프레임 워크에 따라 다르지만, 대부분은 작업에 권한이 필요한 경우 브라우저를 인증 단계로 자동 리디렉션하는 선언적 보안 모델을 지원합니다.
- 프로그래밍 방식의 보안을 사용하여 개체에 대한 액세스를 제어하십시오. 프레임 워크 수준에서 수행하기가 더 어렵습니다. 더 자주, 그것은 당신의 코드에 작성해야하는 것 오류가 발생하기 시작합니다. 이 검사는 사용자에게 작업에 대한 권한이있을뿐 아니라 수정중인 특정 개체에 대한 필요한 권한이 있는지 확인하는 역할 기반 검사를 넘어서게됩니다. 이상으로 직원이 특정 관리자 부서에 있는지 확인해야합니다.
- 대부분의 데이터베이스 레코드에는 조건이 충분합니다. 그러나 예측할 수없는 ID가 추가되는 것은 약간의 추가 보험 또는 "심층 보안"으로 생각할 수 있습니다. 그러나 예측할 수없는 식별자가 필요한 한 곳은 세션 ID 또는 다른 인증 토큰으로, ID 자체가 요청을 인증합니다. 부담 암호화 RNG에 의해 생성되어야합니다.
ID의 의미에 따라 증가합니다.
경쟁적인 동영상 회원 수를 공개하고 싶지는 않지만 ID를 사용하면 URL에 http://some.domain.name/user?id=3933이 표시됩니다.
반면에 사용자의 로그인 이름을 대신 사용하는 경우 : http://some.domain.name/user?id=some 사용자가 아직 모르는 내용을 공개하지 않은 것입니다.
보안 데이터 위험은아니지만데이터 크기와 속도를 모두 노출하므로 비즈니스 SF 인텔리전스 보안 위험입니다. 나는 비즈니스가 이것에 의해 증가를 입는 것을 의미 고이 반 패턴에 깊이 글을 썼습니다. 실험이 아닌 사업이 아니라면 개인 신분을 공개하지 않는 것이 좋습니다. https://medium.com/lightrail/prevent-business-intelligence-leaks-by-using-uuids-instead-of-database-ids-on-urls-and-in-apis-17f15669fd2e
일반적인 생각은 다음과 가변합니다. "앱의 내부 작동에 대한 정보를 다른 사람에게 공개하지 않습니다."
데이터베이스 ID를 노출하면 일부 정보가 공개됩니다.
그 이유는 해커가 앱 내부 작업에 대한 정보를 사용하여 또는 사용자가 보지 않을 것입니다. URL을 사용할 수 있기 때문입니다.
데이터베이스 ID에는 GUID가 사용됩니다. 훨씬 덜 위험합니다.
db에서 정수 ID를 사용하는 경우 qs 변수를 변경하여 사용자가 자주 사용하는 데이터를 쉽게 볼 수 있습니다.
예를 들어 사용자는이 qs에서 id 매개 변수를 쉽게 변경하고 http : // someurl? id = 1 이면 안되는 데이터를 보거나 수 있습니다.
데이터베이스 ID를 클라이언트에 보내면 두 경우 모두 보안을 확인 해야 합니다. 웹 세션에서 ID를 유지하는 경우 원하는 것을 원할 선택할 수 있습니다. 이는 대규모의 처리량이 적다는 것을 의미합니다.
이는), 당신은 예약 할 수있는 액세스 제어에 일을 맡길 수 있습니다. 응용 프로그램의 경우가하지만 내 전체 경력에 같은 일관된 백엔드 시스템을 본 적이 없습니다. 대부분은 웹 이외의 용도로 사용되는 보안 모델을 가지고 있고 일부는 사후에 추가 역할을 추가하고 일부는 핵심 보안 모델 외부에 볼트로 고정되어 있습니다 (역할이 다른 운영 체제에 추가되어 있기 때문에). 웹 전에).
따라서 우리는 합성 세션 로컬 ID를 사용합니다.
정수가 아닌 키 필드의 문제도 나열되고 열거 된 값과 추천 경우 일 수 있습니다. 이 데이터를 삭제하려고 시도 할 수있는 작은 바비 드롭 테이블 처럼 될 가능성이 있습니다 .
참고 URL : https://stackoverflow.com/questions/396164/exposing-database-ids-security-risk
'IT' 카테고리의 다른 글
SLF4J / Logback에서 마커 사용에 대한 모범 사례 (0) | 2020.07.22 |
---|---|
String.valueOf () 대 Object.toString () (0) | 2020.07.22 |
DataFrame의 파티셔닝을 정의하는 방법은 무엇입니까? (0) | 2020.07.22 |
Java Enumeration과 Iterator의 차이점 (0) | 2020.07.22 |
메모장에서 컬러로 텍스트 복사하기 ++ (0) | 2020.07.22 |