2017-10-28 7 views
1

프론트 엔드 UI를 제공하는 백엔드 HTTP API로 구성된 애플리케이션을 개발 중이라고 가정 해 보겠습니다. UI는 클라이언트의 브라우저에서 렌더링 될 때 백엔드로 특정 호출을해야합니다 (예 :보기 용 데이터 가져 오기). 그러나 이러한 모든 호출은 Chrome의 개발자 콘솔에서 확인할 수 있습니다. 이는 내 애플리케이션의 전체 로직 및 내부 API 엔드 포인트를 노출합니다.프론트 엔드 UI에서 사용되는 백엔드 API를 보안해야합니까?

웹 응용 프로그램의 경우이 문제가 있습니까? 다른 웹 사이트 (예 : Reddit)를 둘러 보았고 실제로 API 호출이 이루어 졌는지 확인할 수 있었으며 심지어 cURL을 통해이를 재현하여 동일한 응답을 되찾았습니다.

이 문제를 해결하기위한 첫 번째 아이디어는 모든 데이터를 암호화하여 프런트 엔드 앱에서 내부적으로 해독하는 것입니다. 그러나 개인용 키는 앱의 소스 코드에 하드 코딩되어야하므로 현대적인 브라우저에서도 확인할 수 있으므로 많은 보안을 제공하지는 않습니다. 게다가 이것은 응용 프로그램의 성능에 큰 영향을 줄 수 있습니다.

내가 생각할 수있는 가장 좋은 점은 어떻게 든 토큰 (JSON 웹 토큰, 아마도?)을 세션에 할당하는 것이 었습니다 (차례대로 사용자에게 할당 됨). 이 토큰은 API 호출을 수행하는 데 필요하며 짧은 만료 시간을 가질 수 있습니다. 그러나 토큰은 여전히 ​​HTTP 요청에서 볼 수 있습니다.

아이디어가 있으십니까?

+0

Fonsec - 동일한 문제에 대한 대안을 찾고 있는데 무엇을 마무리했는지 ​​알고 싶습니까? –

답변

0

동일한 의미로 내 평균 응용 프로그램에 bcrypts =>https://www.npmjs.com/package/bcryptjs + jsonwebtokens를 사용하고 있습니다. Bcryptjs는 서버 측에서 salt를 생성하고 암호화 된 토큰을 클라이언트에 전송합니다. 동일한 토큰이 API 호출에 사용됩니다. 이렇게하면 피싱 시도가 조금 더 어려워집니다.

대신 HTTPS를 사용하십시오. =>Are querystring parameters secure in HTTPS (HTTP + SSL)?

+1

제안 해 주셔서 감사합니다. 나는 실제로 HTTPS를 사용하고있다. :) 그러나 Elm에서 프론트 엔드를 만들고 있기 때문에 제안 된 패키지를 사용할 수 없다. 외부 JS 호출에 의존하고 싶지 않다. –