2011-03-04 3 views
0

사용자 편집을위한 양식이 있습니다. 양식이 서버에 다시 게시 될 때 업데이트 할 사용자를 알 수 있도록 사용자 ID가 숨겨진 필드의 클라이언트로 전달됩니다. 내 질문은, 어떻게 사용자가 DOM에서 ID를 변경하는 것을 막을 수 있으며, 따라서 액세스 권한이없는 레코드를 업데이트 할 수 있습니까? 내가 생각할 수있는이 PHP 서식을 보호하는 방법

유일한 방법은 다음과 같습니다

  1. 저장 세션에서 사용자 ID. (아픈).
  2. 사용자 ID (및 다른 양식 요소)에 소금에 절인 해시를 실행하고 숨겨진 양식 요소로도 포함하십시오. (특히 안전하지 않습니까?)

다른 접근 방법이 있습니까?

감사합니다.

편집 : 안녕하세요, 대단한 반응이 있습니다. 로그인 한 사용자와 편집중인 사용자는 서로 다른 두 명의 사용자가 될 수 있습니다. 관리자가 직원 기록을 편집 중입니다.

+8

세션에서 사용자 ID를 저장하는 것이 유일한 정당한 선택입니다. 왜 고통 스러울까요? 세션에 이미 저장하고있는 정보가 아닌가요? –

+0

귀하의 경우 소금에 절인 해시도 매우 안전합니다. – Ivan

답변

3

가장 좋은 방법은 사용자가 해당 사용자를 수정할 수있는 권한을 가지고 있는지 확인한 후 제출하는 것입니다.

사용자가 동일한 페이지를 여러 번 열 때와 같이 지저분해질 수 있으므로이 데이터로 세션을 오염시키지 마십시오.

0

사용자가 수정할 수있는 조건에 따라 다소 다릅니다.

  1. 사용자가 사용자를 인증 그 변화

을 할 권한이있는 경우 사용자에게

  • 확인 인증 보통의 경우이다 : 그것의 핵심은

    , 그것은 아래로 온다 "사용자 이름과 암호가 일치합니까?" 또는 "로그인 한 사용자와 연결된 활성 세션이 있습니까?"

    인증은 비즈니스 로직에 따라 다릅니다. "로그인 한 사용자가 편집중인 사용자와 같습니까?" 또는 "편집중인 사용자에게 로그인 한 사용자의 ID가 포함 된 관리자 필드가 있습니까?" 등등.

    첫 번째 경우 세션에서 사용자 ID를 저장하는 것이 고통스럽지 않아야합니다. 두 번째 경우에는 스크립트에서 수행하는 첫 번째 작업 중 하나로 데이터베이스 조회를 수행하면됩니다.

  • 0

    업데이트 할 레코드를 알기 위해 숨겨진 필드를 사용하는 이유는 무엇입니까? 사용자가 로그인 한 경우 세션의 사용자 ID가 이미 있어야합니다. 어떤 사용자가 로그인했는지 확인하여 업데이트 할 레코드를 찾을 수 있습니다.

    +0

    질문에서 함축하는 점은 한 사용자가 다른 사용자 (자신이 아닌 다른 사용자)를 편집 할 수 있다는 것입니다 (모든 사용자가 아님). – Quentin

    +0

    이 경우에는 숨겨진 필드에 user_id가 있지만 벌써 서버에서 확인해야 할 다른 보안 검사를 수행하는 것이 좋습니다 로그인 한 사용자가 양식에서 제출 한 user_id를 편집 할 수있는 권한이 있음 – guru

    -1

    앞서 언급했듯이 세션을 정렬하는 가장 빠르고 고통스러운 방법은 세션에서 USER_ID를 붙이는 것입니다.

    그 정보로 세션을 "오염"시킨다는 말은 명백하게 무식합니다. 무시하십시오.

    다른 의견은 사용자가 항목을 편집 할 수있는 권한이 있는지 확인한다는 것입니다. 이는 어떤 종류의 계층 적 시스템이 제 위치에 있다는 것을 의미합니다. 이는 사실이 아닌 것처럼 보입니다.

    세션 저장소 대신, 숨겨진 필드의 USER_ID 값을 어떻게 든 난처하게 할 수 있습니다. 암호화하거나 정수 ID 대신 GUID를 사용할 수도 있지만 그 자체의 의미가 있습니다. 즉, 누군가가 올바른 GUID를 추측하여 레코드를 엉망으로 만드는 것을 믿을 수 없을 정도로 어렵게 만듭니다.

    관련 문제