2012-11-21 4 views
0

메시지 시스템 (개인 메시징)을 구현 중이며 사용자가 텍스트 링크로 표시 한 메시지 목록을 표시하여 버튼을 열 필요가 없도록하고 싶습니다. message_id (데이터 베이 스의 고유 값)는 URL을 통해 전달됩니다. (www.example.com/message/view/16과 같은 것입니다.) 나는 사용자 ID의 세션이 메시지가 전송 된 사용자 ID와 일치하는지 확인합니다. 괜찮습니까? 더 안전하게 만들려면 난수를 추가하고이를 세션으로 설정 한 다음 볼 때 확인하십시오.대신 URL 또는 POST 변수를 통해 값을 전달 하시겠습니까?

이 아이디어를 잊어 버리고 메시지를 보려면 제출 버튼을 눌러야합니까?

답변

4

POST 요청은 GET 요청보다 안전성을 제공하지 않습니다. 절반 수준의 웹 디버깅 도구가 POST 요청을 위조 할 수 있습니다. 사용자 입력 데이터를 신뢰해서는 안됩니다. 항상 안전에 대한 승인을 다시 확인하십시오!

즉, GET request semantics match what you're trying to do here입니다.

HTTP 표준에 따르면 GET 요청은 단순한 결과없이 반복 가능해야한다고 나와 있습니다. 예를 들어, 은 GET 요청이있는 데이터를 표시하는 데 적합합니다 (카운터를 늘리는 것과 같은 작은 일은 매우 사소한 결과이므로). 실제로 GETHEAD은 "안전한"것으로 간주되는 두 가지 요청 방법입니다.

한편, POST 요청은 메시지를 보내거나 주문하는 것과 같이 중요한 결과를 가져올 것으로 예상됩니다. 우연히 두 번 수행하고 싶지 않은 내용. 요즘 대부분의 브라우저는 페이지를 다시로드 할 때 경고 메시지를 표시하여 POST 요청을 다시 수행하게됩니다. 사용자를 가정하면 로그인 상태를 유지하기 때문에

+0

나는 여전히 끝에 임의의 문자열을 추가해야 등이 북마크 메시지에 허용 것, 메시지를 볼 GET 값을 훨씬 더 생각하여, 설정 세션, 보고시 세션/문자열을 일치 시키시겠습니까? – user1104854

+0

@ user1104854, 세션 ID를 저장하기위한 쿠키를 제안합니다. 임의의 문자열은 사람들이 합법적으로 URL을 저장하지 못하게합니다. 정말로 원하는 것은 메시지를 읽는 사람이 메시지가 속한 사람인지 확인하는 것입니다. 사용자의 신원이 메시지의 수신자와 동일한 지 확인하여이를 수행해야하며, 브라우저가 전달한 데이터 (또한 _ 쿠키가 가짜 일 수 있음을 명심하십시오.) – zneak

+0

그게 정상적으로 작동 할 것 같습니다. 은행 계좌 정보를 저장하는 것과 다르므로 쿠키가 작업을 수행합니다. 감사! – user1104854

관련 문제