클라이언트 측 웹 애플리케이션에 비밀 데이터를 안전하게 저장


11

모든 클라이언트 측 기술 (HTML, CSS, JavaScript / AngularJS 등)이 될 웹 응용 프로그램이 있습니다. 이 웹 애플리케이션은 데이터에 액세스하고 수정하기 위해 REST API와 상호 작용할 것입니다. 지금은 REST API가 사용할 인증 시스템 유형을 결정하지 않았습니다.

내 이해에서 모든 유형의 API 인증 시스템 (API 키, OAuth 1/2 등 ...)에는 비밀로 유지 해야하는 특정 데이터가 있어야합니다. 그렇지 않으면 액세스가 손상 될 수 있습니다. API 키의 경우 키 자체는 비밀이 필요합니다. OAuth 2의 경우 클라이언트 비밀 / 액세스 토큰 / 갱신 토큰을 비밀로 유지해야합니다. OAuth 1과 관련된 4 개의 키 중 몇 개는 비밀로 유지해야합니다. OAuth에 대한 경험이 너무 많음 1). 서버 측에 중간 계층이없는 순수한 클라이언트 측 웹 응용 프로그램 에이 비밀 항목을 저장하는 방법이 있는지 생각하려고했습니다.

나는 이것에 대해 생각하고 있었고 그것을 할 곳을 생각할 수 없다. 누구나 소스를 보거나 콘솔을 열고 데이터를 얻을 수 있기 때문에 자바 스크립트로 저장할 수 없습니다. localStorage의 보안 수준과 사용자가 해당 데이터에 액세스 / 수정할 수 있는지 100 % 확신하지 못합니다. 로컬 스토리지가 안전하더라도 데이터를 가져 오는 두 가지 방법은 안전하지 않습니다. 한 가지 방법은 자바 스크립트 소스 코드에 데이터를 저장하는 것입니다.이 코드는 내가 생각할 수있는 가장 안전하지 않은 것입니다. 이제 나머지 API 자체가 나에게 토큰을 제공하는 OAuth 2와 같은 것을 사용하는 경우 해당 토큰은 일반 사용자가 볼 수있는 일반 텍스트로 반환되므로 여전히 안전하지 않습니다 (첫 번째 옵션보다 낫습니다) 컴퓨터가 요청을 볼 수 있습니다.

클라이언트 측을 완전히 실행하는 응용 프로그램이 서버 측에 중간 계층이 없어도 비밀 데이터를 안전하게 저장할 수있는 방법이 있습니까?



로컬 저장소는 브라우저마다 다르지만 Windows에서 Opera를 예로 들어 사용자 프로필 폴더의 일부 디스크 파일이므로 기본적으로 보호되지 않습니다.
로스 패터슨

한 가지 방법은 서버의 비밀을 db로 유지하고 application_id 만 클라이언트에 유지하는 것입니다. 그런 다음 서버에서 oauth 쿼리를 수행하면 일종의 프록시 접근 방식입니다.
Simon Polak

답변:


9

아니요, 완전히 안전 할 수는 없습니다. 사용자가 하드웨어를 제어하고 있으며 손에 물건을 두려고하지 않습니다. 궁극적으로 그들은 어떤 방법 으로든 그것을 얻을 수 있습니다. 자바 스크립트로 작업하고 있기 때문에 사용자가 하드웨어를 제어 할뿐만 아니라 실행중인 샌드 박스를 제어하기 때문에 일반적인 컴퓨터 응용 프로그램보다 위치가 훨씬 나쁩니다.

물건을 숨기고 물건을 얻기가 어려울 수 있지만, 결국 충분히 노력하면 물건을 꺼낼 수 있습니다.


4
^ 이것. 비밀 데이터는 "비밀"이며 실제로 얼마나 많은 시간과 돈이이를 보호하고 있습니까? "산업 표준"노력이 충분할 수 있습니다.
DaveE

+1 우수 답변. 자바 스크립트 디버거와 함께, 나는 중간 값을 보려면, 응용 프로그램을 변경할 수있는 내가 정보를 원하는 경우에, 나는 그것을 얻을 것이다.
Ross Patterson

2

보안 시스템을 설계 할 때는 항상 위협 모델을 고려해야합니다. " 보안 유지 "는 실행 불가능하거나 검증 할 수없는 어리석은 요구 사항입니다. " 사용자가 응용 프로그램에서 액세스 토큰을 추출하지 못하도록 방지 "는 훨씬 우수하며 솔루션의 경계를 정의합니다. " 다른 사용자가 사용자의 액세스 토큰을 얻지 못하도록 방지 "기능이 더 우수하며 완전히 다른 솔루션 공간을 정의합니다. 하나의 솔루션이 반드시 다른 솔루션을 해결할 필요는 없습니다 ( 예를 들어 WiFi가 포함 된 경우 후자는 SSL을 절대적으로 요구하지만 이전에는 전혀 영향을 미치지 않습니다).


0

하나의 옵션은 REST API가 사용자 로그인을 기반으로 액세스 권한을 부여하거나 부여하지 않는 것입니다. 액세스를 인증하기 위해 다른 REST API 호출로 전달 될 수있는 세션 기반 토큰 (guid, hashed string 등 원하는대로)을 리턴 할 수 있습니다.

클라이언트 컴퓨터에 사용자 로그인 정보를 저장하는 것이 걱정된다면, 그렇지 않은 경우, 사용자는 매번 계정과 암호 정보를 입력해야합니다

OAuth 등에 익숙하지는 않지만 인증 정보를 영구적으로 저장 해야하는 이유는 없습니다.


이유는 항상 "편안함"이 있으며, 이는 "보안"과 "안전성"의 핵심적 의미입니다.
henon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.