2011-05-07 3 views
3

다른 사이트에서 내 사이트의 json 데이터를 얻을 수 있도록 jsonp를 제공하고 싶습니다. 쿠키를 사용하여 사용자를 인증하면 브라우저가 모든 요청과 함께 쿠키를 내 사이트에 보내므로 악의적 인 페이지가 사용자의 요청에 대해 인증없이 요청할 수 있으므로 위험한 것임을 이해합니다.인증 헤더가 필요한 경우 jsonp를 제공하는 것이 안전합니까?

요청시 특수 헤더 (X-AG-AUTH)를 사용하여 서비스 요청을 인증해야합니다. 사용자를 식별하는 비밀 토큰이 해당 헤더에 설정되어야합니다.

비밀 토큰을 제공하지 않고도 악의적 인 사이트가 jsonp를 통해 내 서비스에서 데이터를 가져올 수 있습니까?

+1

악의적 인 사용자가 실제 사용자로부터 인증 키를 받고 알 수 없게 도용 할 수있는 문제가 있습니까? JSONp의 요점은 JS에서 사용할 수 있다는 것이고 JS는 100 % 공개 될 것입니다. 사용할 수있는 한 가지 기술 (사용자의 관점에서 보면 꽤 귀찮음)은 사용자가 아닌 도메인에 키를 연결하는 것입니다. 그런 다음 요청을 받으면 참조자를 확인할 수 있습니다. – sdleihssirhc

+0

요청에는 각 사용자에 대한 비밀이 있어야하므로 한 사용자가 다른 사용자의 데이터에 액세스 할 수 없습니다. 비밀은 반드시 사용자의 기본 비밀번호가 아니며 사이트/사용자 조합을 식별하는 일부 식별자입니다. 하지만 내 질문은 : 사용자가 사이트를주지 않는 경우 –

답변

0

jsonp 호출에 사용자 정의 헤더가 필요하면 호출자가 해당 헤더를 설정할 수 없으므로 다른 도메인에서 오는 요청에 대해 jsonp 호출을 쓸모 없게 만듭니다.

POST 요청에서 매개 변수로 CSRF-prevention-style token이 전달되어야합니다. 이렇게하려면이 토큰을 생성하는 논리와 엔드 포인트 호출을 허용하려는 각 사이트의 비밀 키를 공유해야합니다. 물론 원격 서버 측에서 이러한 키 중 하나가 손상된 경우 너무 늦을 때까지는 알 수 없습니다.

정말 오래된 브라우저를 사용하는 사람들을 위해 기꺼이 기능을 수행하려는 경우 크로스 사이트 스크립트 포함을 방지하기 위해 regular JSON over CORS*과 구문 분석 접두어를 함께 사용할 수 있습니다.

귀하의 데이터가 공개되기를 원하지 않는다고 가정합니다.이 경우 귀하는 또한 SSL이 필요한 것입니다.

+0

답변 주셔서 감사합니다. 호출자가 요청시 헤더를 설정할 수없는 이유는 무엇입니까? –

관련 문제