2014-02-25 2 views
3

웹 클라이언트에서 REST API로 사용되며 향후 모바일 클라이언트가 될 수있는 익스프레스 앱을 개발 중입니다. 두 클라이언트 모두 Oauth 2.0 토큰 인증을 사용하고 있습니다. 이것은 CSRF에 대한 많은 보안을 제공합니다. 내가 알고 싶습니다 XSS에 대한 보안을 제공하는 방법.익스프레스 앱에서 XSS 보호

* 클라이언트가 refresh_tokens 및 access_tokens에 대한 다른 클라이언트 세부 정보를 요청할 필요가있는 토큰 유효 기간을 매우 적게 만들었습니다. 이것은 조금 안전하지만 전적으로 * 아닙니다.

client_id와 client_secret은 프론트 엔드 자바 스크립트 코드로 현재으로 도용되어 다른 클라이언트가 유효성을 검사하는 데 사용 중이므로 걱정됩니다. 클라이언트 인증에 대해 JWT를 사용하려고 생각합니다. 도움이 될까요?

데이터 Sanitisation은 내가 혼란스러워하는 또 하나입니다. 정규식 검증을 제공하는 validator, express-validator과 같은 모듈이 있습니다. 이에 따르면 blog post JSON 스키마 검증이 빠릅니다. REST에서 Api JSON이 데이터 교환에 사용되므로 왜 tv4 또는 다른 JSON 스키마 검사기와 같은 모듈을 데이터 유효성 검사에 사용할 수 없습니까? 나는 무엇을 사용할 지에 대한 제안을 요구하고 있지 않다. XSS 보호 및 sanitisation 관점에서 특별히 제공되는 유효성 확인의 종류에있어서 기본 차이점을 알고 싶다..

+0

클라이언트 보안을 브라우저에 노출하는 이유가 무엇입니까? 서버에만 보관해야합니다. – Erlend

+0

서버에만 보관되는 경우 .... 클라이언트가이 클라이언트가 상호 작용할 수 있는지 여부를 확인하기 위해 서버가 서버에 서버를 어떻게 보냅니 까? –

+0

클라이언트 비밀번호가 OAuth 클라이언트 비밀번호 인 경우 사이트에 액세스하는 모든 사용자가 해당 비밀번호를 훔칠 수 있습니다. 그게 니가 원하는거야? – Erlend

답변

0

나는 웹, 모바일과 같은 여러 클라이언트에 유연한 인증 시스템을 제공하기 위해 NodeJS, MongoDB, ExpressJS와 같은 귀하의 사례와 같은 편안한 인증 시스템을 개발했습니다. 중요한 요점을 요약 해 드리겠습니다.

로그인 양식을 사용하여 처음 로그인 한 후 사용자 토큰을 유지하기 위해 html5 localstorage를 사용했습니다. 사용자가 로그인 버튼을 클릭하면 서버에 전송 된 사용자 이름과 암호가 유효화됩니다. 성공적인 검증 후, 고유 한 액세스 토큰은 클라이언트에게 전송되어 로컬 sotrage에서 처리됩니다. 클라이언트 응용 프로그램에 취약성이있는 경우 누구나 액세스 토큰을 가져 와서 토큰을 사용하여 요청할 수 있습니다. 이를 방지하려면 앱에 ssl 연결을 사용해야합니다. 이 문제는 안부 전용 인증 시스템에만 존재하는 것이 아니라 서버 측 세션 저장소에서 발생할 수 있습니다. 내가 설명 할께. 세션에 PHP를 사용하고 있습니다. 사용자가 로그인하면 사용자 세션이 서버의 임시 파일에 저장되고 해당 세션 ID가 클라이언트 브라우저로 전송됩니다. 어떻게 든, 그 id를 얻을 수 있다면, 누군가의 세션 id가 들어있는 header로 요청할 수 있습니다. 당신이 비교할 때, 편안한 정식은 나에게 더 유연하게 보인다. 나는 너에게 제안한다.

  1. 를 사용하여 SSL 연결
  2. 는 강력한 암호화 방법 (SHA-256)와 액세스 토큰
  3. 이 작은 토큰을위한 미들웨어를 구현 더 나은
  4. 을 access_token이 시간 만료를 생성 도난 될로부터 access_token이 방지 백엔드 서비스 사용에 대한 유효성 검사. 나는 당신의 요청을 좋아하는 것입니다; 사용자 정의 헤더

    /사용/업데이트/{사용자 ID}

은 사용자 토큰이 포함되어 있습니다.

  1. 디자인 5 시도가 백엔드에서 실패했습니다.사용자가 5 번 시도에서 성공할 수 없다면 이는 누군가 시스템에 들어가기 위해 임의의 토큰을 보내려고한다는 것을 의미합니다. 해당 IP 검색 및 차단
  2. 브라우저 클라이언트 이외의 요청도 거부 할 수 있습니다.

이들은 프로젝트를 구현하는 동안 내가 배웠던 정보입니다.

+0

내 앱 및 모바일 클라이언트의 브라우저 클라이언트 만 연결할 수 있는지 확인하려면 어떻게해야합니까? –

+0

문제가되지 않습니다. 유효하거나 아닌 경우에만 토큰을 확인하십시오. 유효한 토큰 인 경우 사용자가 전달합니다. 모범 사례로, 헤더, 모바일 또는 웹 브라우저가 다른 클라이언트는 거부 할 수 있습니다. 웹 서버 수준에서 해당 클라이언트를 허용하지 않을 수 있습니다. 그래서, 당신은 잘못된 고객에 대한 유치를 막을 수 있습니다. 예를 들어, 나는 baidu (chinese crawler)와 같은 일부 크롤러가 내 사이트를 크롤링하는 것을 원하지 않기 때문에 그러한 보호를 수행하고 있습니다. 나는 머리글을 검사하여 그들을 부인한다. –

2

그래서 당신은 여기에 별도의 세 가지 질문이 :

1) XSS를 방지하는 방법 :만큼 클라이언트 & 서버간에 데이터를 공유 및 인코딩/디코딩 표준 라이브러리/방법을 사용하여 JSON을 사용할 때 JSON, 대부분 보호 받고 있습니다. 이 후에는 보호하기가 더 어려운 DOM 기반 XSS에 대해서만 걱정할 필요가 있습니다. 그러나 기본적으로 사용자가 의도 한 "문자열"이외의 것으로 해석 될 수있는 사용자 입력을 사용하지 않도록 조심해야합니다. (자세한 내용은 https://www.owasp.org/index.php/DOM_Based_XSS을 방문하십시오)

2) client_id 및 client_secret 도난 당 : 이것은 필요한 방식으로 가능하지 않습니다. 귀하의 시나리오 (클라이언트 코드 & 비밀 번호를 javascript 코드로 배포)에서는 요청이 클라이언트 또는 가짜 클라이언트에서 온 것인지를 서버 측에서 알 수 없습니다.

3) 데이터 Sanitisation : 도서관에서 2 단계의 산성화를 볼 수 있습니다. & 블로그 게시물에 언급되어 있습니다. validator 또는 express-validator는 주로 개별 데이터 필드의 유효성을 검사하는 데 사용됩니다. 반면 다른 사람들은 "validator"가하는 것 이외에 JSON 객체 구조를 검증 할 수 있습니다. 교환 된 모든 데이터가 JSON 형식 (XSS 보호를 위해 제안 된대로) 인 경우, tv4와 같은 json 객체 유효성 검사기를 사용할 수 있습니다. (tv4의 유일한 단점은 최신 json 사양을 허용하는 것 같습니다.)

BTW : 클라이언트 응용 프로그램을 클라이언트 측 자바 스크립트 (angularjs)로 지정한 경우 더 쉬울 것입니다. 내가이 정보를 주석에서 찾을 때까지 나는 당신의 질문을 이해할 수 없었다.