2012-01-23 8 views
0

정확하게 CakePHP 프레임 워크 2.0을 사용하기 시작했습니다. 대부분의 문서와 예제를 읽고 블로그 자습서를 보았습니다.CakePHP 숨김 편집 필드

http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html#editing-posts 자습서의 "게시물 편집"섹션에서 나는 그들이 게시물 ID를 기억하기 위해 숨겨진 필드를 사용하고있는 것을 보았습니다. 클라이언트 측 수정으로 인해 나쁜 행동이 아닌가?

내가 처리 한 방법은 숨겨진 필드를 제거하는 것입니다. 양식을 제출하면 저장하고 유효성을 검사하기 전에 POST 데이터에 POST ID를 추가하십시오. 이 작업을 수행하는 올바른 방법입니까?

+2

어떤 게시물 ID를 사용할 지 어떻게 압니까? – JJJ

+0

글쎄, 게시물 대신 사용자를 편집하는 예제를 사용했습니다. 따라서 Auth 구성 요소에서 로그인 한 사용자의 ID를 얻습니다. $ this-> Auth-> user ('id'); –

+0

사용자가 데이터베이스에서 하나의 레코드 만 편집 할 수있는 권한을 부여 받았을 때 가장 좋은 방법이지만, 둘 이상의 레코드를 편집 할 수 있다면 어떨까요? – JJJ

답변

1

예, 데이터를 변경하는 것에 대해 우려하는 경우 올바른 방법입니다. 레코드가 특정 사용자에게 속한 경우이 사용자가 다른 사용자의 레코드 중 하나로 id를 바꿀 수 없는지 확인해야합니다. 보안 구성 요소가 여기에서 도움이되지 않습니다 (적어도 일부 영역에서는).

여기에 대한 자세한 내용 : http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

+0

SecurityComponent는 클라이언트가 숨겨진 필드를 변경할 수 없도록합니다. – Wylie

+0

좋습니다. 2.0에 대한 설명서는 새로운 동작을 설명합니다. – mark

+0

보안 구성 요소를 사용하고 싶지 않거나 (예 : 아약스 할 수없는 경우) 숨겨진 필드를 사용하지 않고 id 인 전달 된 첫 번째 매개 변수를 사용하여 위의 방법을 사용할 수도 있습니다. 그렇지 않으면 나는 wylie의 대답을 추천 할 것이다. – mark

0

클라이언트가 숨겨진 필드를 변경하지 못하게하려면 SecurityComponent를 AppController :: $ components 변수에 추가하기 만하면됩니다.

+2

이것은 진실한 진술이지만, 더 중요한 요점을 놓치고 있습니다. OP는 클라이언트 측 데이터를 신뢰하지 않는 것이 옳습니다. 컨트롤러의 모든 작업은 사용자가 영향을받는 데이터에 대해 해당 작업을 수행 할 수있는 권한을 가지고 있는지 유효성을 검사해야합니다. 사용자가 데이터를 소유하지 않거나 이에 대한 조치를 수행 할 수 없으면 요청을 거부하십시오. – Cheekysoft

1

SecurityComponent 숨겨진 필드와 함께 도움이 될 것입니다. 숨겨진 입력을 통해 변조 된 요청은 블랙 홀링되지만 드롭 다운 입력에는 아무 것도 수행하지 않습니다. 당신이 불을 지르고에서 열려 일부 ADDUSER 양식을 균열 및 추가 옵션 할 수 있습니다

<option value="superadmin">SuperAdmin</option> 

을 "역할"드롭 다운에, 양식을 선택하고 제출시, CakePHP의 새로운 최고 관리자를 생성합니다. 따라서 최상의 정책은 여전히 ​​클라이언트를 신뢰하지 않는 것입니다. 클라이언트는 timberwolves 팩이며 서버는 토끼 토끼의 클러치입니다. 그 둘을 분리해서 보관하십시오.