2016-06-20 3 views
1

데이터 구조의 키와 일치해야하는 요청 매개 변수를 사용하는 경로 요청 처리기가 있습니다 ... 해당 키에 해당하는 개체가 발견되면 요청자가 해당 개체에 액세스합니다.노드 익스프레스 라우트 핸들러 - 사용자가 링크를 클릭하여 요청을 보내거나 URL 바에 수동으로 입력했는지 여부를 알려주고 있습니까?

문제는 초대장을 통해 이메일로 전송 된 생성 된 링크를 액세스하려고하는 사용자가 실제로 요청 처리기를 트리거해야한다는 것입니다. 임의의 사용자가 고유 키가 무엇인지에 대해 행운의 추측을하고 실제로 초대되지 않은 객체에 대한 액세스 권한을 얻습니다. 그들이가 초대 이메일을 보내 ...

가 첫 번째 사용자가 "나"는 고유 한 이름으로 부스를 만들어 말 :

app.get('/:creator', function (req, res) { 
    var path = req.params.creator.toLowerCase(); 
    for(booth in boothList) { 
    var boothID = boothList[booth].creator.toLowerCase(); 
    if (path == boothID) { 
     res.sendFile(__dirname+'/public/index.html'); 
    } 
    } 
}); 

가 다시 상황은 이것이다 : 여기

내 코드입니다 누군가가 링크 http://www.myappsite.com/Me을 가지고 초대받은 사람이 링크를 클릭하여 부스에 들어갈 수 있어야합니다. 문제는 초대받지 않은 사용자가 직접 URL 바에 http://www.myappsite.com/Me을 입력하고 부스에 참여할 수 있다는 것입니다 그렇지 않더라도 초대되었습니다.

어떻게 이런 일이 발생하지 않도록 할 수 있습니까?

답변

2

항상 링크 자체의 크기에 따라 달라집니다. 크고 무작위로 생성 된 이름은 공격적인 벡터로 무차별 대입을 사용하여 추측하고 찾기가 더 어렵습니다. 사용자가 자신의 이름을 선택하도록하면 간단한 사전 공격만으로 쉽게 추측 할 수있는 같은 종류의 이름 인 짧고 쉬운 이름으로 이동하게됩니다. 들어오는 요청 (예 : IP 주소 등)의 유효성을 검사하기 위해 다른 데이터를 사용하기 시작하지 않는 한 그것에 대해 많은 마법을 수행 할 수 없습니다.

생성 된 링크의 크기를 늘리고 추측. 예를 들어 사용자는 키에 대해 foo이라는 이름을 선택하지만 https://example.com/SRJsWVTxIxYAcPErxwqG7h/foo과 같은 모양을 생성 할 수 있습니다. 랜덤 문자열이 암호로 안전한 RNG에 의해 생성되었다고 가정하면 무차별 대항력을 사용하고 유효한 키를 얻는 사람의 기회가 상대적으로 낮을 가능성은 거의 확실합니다.

물론 시스템의 유효한 키 수가 증가하면 공격자가 임의의 문자열을 보내어 키를 추측 할 가능성이 커집니다. Wikipedia

추측으로부터 시스템을 보호 할 수있는 많은 방법이 있지만 전자 메일을 공유하기를 원하고 사용자가 일부 컴퓨터에 동의하는 것을 원하지 않는 경우 링크를 보호하기위한 암호의 종류는 링크 확장이 가장 쉬운 해결책입니다.

그러나이 문제에 관해 다른 사람의 의견을 읽는 것이 좋을 것입니다.

+0

제안에 감사드립니다. 나는 소금 + 해시 등을 URL 앞에 붙여야하지만 더 직접적인 해결책을 기대하고있었습니다. 나는 당신의 대답을 받아들이 기 전에 몇 시간 동안이 질문을하게 할 것이다. 내가 찾고있는 것과 같은 것이있을 때를 대비하여. – aweeeezy

관련 문제