특정 사용자 만 정보가 포함 된 나머지 끝점은 보안이 필요할 수있는 액세스 권한이 있어야합니다. 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을 사용하십시오. 이렇게하면 사용자가 간단히 덧셈/뺄셈을하여 다른 퀴즈를 얻을 수 없습니다.
감사합니다. 그게 내가하는 말은 아니지만 생각합니다. "특정 퀴즈에 대한 데이터를 얻고 여러 퀴즈를 사용자가 일반적으로 사용할 수 있어야하는 경우 어떻게해야합니까?"이렇게 보이는 .get은 "router.get ("/ quiz/: quizID/대답/", 기능 (req, res) ...."내가 "quizID"를 조작하면 잘못된 퀴즈에 대한 답을 얻을 것입니다. 사용자는이 두 퀴즈에 액세스 할 수 있습니다. URL을 잘못 입력하면 틀린 시간에 틀린 페이지가 나타납니다. –
업데이트 된 답변보기 @DeanVaessen (편집 2) – FrankerZ
흠.하지만 이것을 정확하게 이해한다면 페이지 A로 이동하면 악용 될 수 있습니다. 그 컬렉션을 위해 사용하고, 페이지 B로 이동하고, 자바 스크립트에서 UUID를 변경하고 페이지 A에 대한 콜렉션을 얻습니다. –