2013-06-19 3 views
2

가정하자 내가 가지고있는 다음과 같은 URL 경로 :Express.js에서 동일한 출처 정책을 적용하는 방법은 무엇입니까?

app.post('upvote', function(req, res) { 
    // make a database a call to increase vote count 
}); 

내가 콘솔을 열고 www.mysite.com/upvote에 AJAX POST에게 요청을 보내는 다른 사람을 방지하기 위해 무엇을 할 수 있는가? 난 그저 www.mysite.com 그 POST 요청을 할 수 있도록하고 다른 사람이 허용하고 싶습니다.

답변

2

나는 bobince에 동의합니다. others은 매우 일반적인 용어입니다.

다른 사이트 (네트워크의 악의적 인 사이트)에 속한 사용자가있는 경우.

  • 익스프레스는 교차 사이트 요청 위조로부터 보호하기 위해 csrf 미들웨어를가집니다. 이러한 시나리오를 방지하기 위해 사용할 수 있습니다. API 문서 here을 참조하십시오. 다른 사람이 당신의 자신의 위치

    • 의 사용자라면

    는 그 인증 문제입니다. 모든 요청은 서비스/실행 전에 이어야합니다. 이 상황을 방지하려면 사용자 인증을 구현해야합니다. 내가 실제로 app.post 핸들러를 실행하기 전에 passport과 을 사용하여 사용자가 인증되는지 확인합니다.

+0

감사합니다. "기타"에 대해 더 분명히 했어야합니다. 내 사이트의 두 번째 사용자입니다. 인증은 없으며 공개도 가능하며 현재 REST API 서비스가 공개되어 있기 때문에 현재 상태입니다.IP 주소를 통해 응용 프로그램 논리와 제어 한계를 재고해야합니까? –

+0

두 번째 문제는 콘솔을 열고 콘솔을 통해 'POST'요청을 보내는 대신 사용자가 이미지를 클릭하면 'POST'요청이 실행되도록 어떻게 적용 할 수 있습니까? –

+1

IP가 변경 될 수 있기 때문에 IP 제한이 도움이되지 않습니다/사용자가 프록시를 사용할 수 없기 때문입니다. 당신이 그것을 열고 싶다면 그것을 놓아 둡시다. 두 번째 문제는 콘솔을 통해 페이지의 AJAX를 복제 할 수 있습니다. 그러나 세션/이전 AJAX 호출과 서버 유효성 검사를 사용하면 불가능하지는 않더라도 어렵게 만들 수 있습니다. – user568109

4

내가이 AJAX POST 요청 "다른 사람"입니다

을 콘솔을 열고 보내는 다른 사람을 방지하기 위해 무엇을 할 수 있는가?

다른 사용자가 사이트의 사용자 인 경우 ... JavaScript 콘솔이나 다른 방법을 사용하여 원하는 모든 요청을 보내는 것을 막을 수있는 방법은 없습니다. 클라이언트를 신뢰할 수 없으므로 서버 측 인증이 필요합니다. 사용자가 계정에 로그인해야하고 계정이 upvoted 등록을하면 다시 투표 할 수 없습니다.

다른 사이트 관리자 (사이트에 제출을 유발하는 스크립트를 사용자에게 제공함으로써) ... 다른 사이트의 JavaScript가 AJAX POST 요청을 일으킬 수 없거나 적어도 고의적으로 선택하지 않는 한 CORS을 사용하십시오. 하지만 주소를 가리키고 제출하는 것만으로도 POST를 발생시킬 수 있습니다. <form>.

이것은 고전적인 Cross Site Request Forgery입니다. XSRF 문제에 대한 널리 인정되는 해결책은 각 POST (양식 또는 AJAX) 제출에 매개 변수로 비밀 토큰을 포함시키는 것입니다. 이 비밀 토큰은 서버 측 세션에 저장되거나 클라이언트 측 쿠키로 복제 됨으로써 사용자의 로그인 상태와 연관됩니다. 어느 쪽이든 다른 사이트의 공격자는 로그인 한 사용자에게 유효한 토큰을 확보 할 수 없으므로 요청을 위조 할 수 없습니다.

모두 AJAX 또는 양식 기반 POST 여부에 관계없이 직접적인 영향을주는 작업이 XSRF 보호를 필요로합니다.

관련 문제