2016-08-10 1 views
1

사용자가 URL (예 : GET 요청)을 수정하는 방법을 알아 내려고합니다. 아래의 코드는 들어오는 요청을 콜렉션에 넣는 내 익스프레스 라우터의 경로입니다. 콜렉션 "A"라는 인수로 말하면 그 콜렉션에서 몇 가지를 반환합니다. 사용자가 "B"에 프런트 엔드 자바 스크립트 코드의 URL에서 :collection 부분을 변경하는 경우REST URL의 사용자 조작 악용 방지

router.get("/word/:collection/:language/:amount", function(req, res) { 
     getItems(req, res); 
    } 

지금, 그는 컬렉션을 "B"를 얻을 것이다. 어떻게 이것을 막을 수 있습니까? userID를 보유하고있는 컬렉션과 같은 경우에는 req.user을 기반으로 액세스하지 못하도록 할 수 있지만이 경우 사용자가 컬렉션 A와 컬렉션 A에 모두 액세스해야하므로이 작업을 수행 할 수 없습니다. B, 나는 단지 잘못된 시간에 거기에 들어가는 것을 제한하고 싶습니다 (둘 다 다른 페이지에서 필요합니다).

답변

1

특정 사용자 만 정보가 포함 된 나머지 끝점은 보안이 필요할 수있는 액세스 권한이 있어야합니다. API, oAuth 토큰 또는 로그인 쿠키로 전달되는 API 토큰이 가장 일반적인 방법입니다. userA가 collectionB에 액세스하지 않아야하는 경우 해당 자원 내에서 검사를 수행하고 일부 유형의 오류 코드를 브라우저에 반환해야합니다.

대부분의 웹 사이트의 표준 오류는 401: Unauthorized입니다.

router.get("/word/:collection/:language/:amount", function(req, res) { 
    if (!hasAccess(req.params.userToken)) 
    { 
     return res.send(401, {success: false, message: 'no permission'}); 
    } 
    var collection = req.params.collection, 
    var language = req.params.language, 
    var amount = req.params.amount; 
    return getItems(req, res, collection, language, amount); 
} 

편집 : 다음은 간단한 예제 질문을 다시 읽어 후, 지금은 사용자가 한 지점 또는 다른에서 모두 컬렉션에 액세스 할 수 있어야합니다 것을 알고 있습니다. 이 경우 일부 서버 측 유효성 검사를 구현해야합니다. 다음 (퀴즈/답변) 또 다른 예입니다 :

router.get("/quiz/finish/:id", function(req, res) { 
    //Store that this user has taken this quiz 
    return recordQuizAnswers(req.params.userToken, req.params.quizAnswers); 
} 

router.get("/quiz/answers/:id", function(req, res) { 
    //Has this user taken this quiz? 
    if (!hasUserTakenQuiz(req.params.userToken)) 
    { 
     return res.send(401, {success: false, message: 'Trying to get the answers before taking the quiz? Cheater...'}); 
    } 
    return getQuizAnswers(req.params.id); 
} 

편집 2 : 당신의 코멘트를 본 후, 나는 당신이 사용할 수있는 또 다른 해결책으로 생각했습니다. 숫자가 자동으로 증가하는 대신에 ID는 UUID을 사용하십시오. 이렇게하면 사용자가 간단히 덧셈/뺄셈을하여 다른 퀴즈를 얻을 수 없습니다.

+0

감사합니다. 그게 내가하는 말은 아니지만 생각합니다. "특정 퀴즈에 대한 데이터를 얻고 여러 퀴즈를 사용자가 일반적으로 사용할 수 있어야하는 경우 어떻게해야합니까?"이렇게 보이는 .get은 "router.get ("/ quiz/: quizID/대답/", 기능 (req, res) ...."내가 "quizID"를 조작하면 잘못된 퀴즈에 대한 답을 얻을 것입니다. 사용자는이 두 퀴즈에 액세스 할 수 있습니다. URL을 잘못 입력하면 틀린 시간에 틀린 페이지가 나타납니다. –

+0

업데이트 된 답변보기 @DeanVaessen (편집 2) – FrankerZ

+0

흠.하지만 이것을 정확하게 이해한다면 페이지 A로 이동하면 악용 될 수 있습니다. 그 컬렉션을 위해 사용하고, 페이지 B로 이동하고, 자바 스크립트에서 UUID를 변경하고 페이지 A에 대한 콜렉션을 얻습니다. –