2013-06-08 2 views
0

다음은 내 코드의 요약입니다.숨겨진 입력에 ID (DB에 삽입 됨)를 두는 것이 안전합니까?

내 웹 사이트는 기본적으로 특정 테이블의 모든 행 내용을 반복합니다. 그러나 때로는 특정 행에서 개별 ID를 얻어야합니다. 숨겨진 입력이 효과가 있지만 보안에 큰 부담이된다는 것을 알고 있습니다. 숨겨진 입력에서 ID를 얻은 후에 다른 테이블에 ID를 삽입해야합니다. 해커는 단순히 숨겨진 입력 값을 변경하고 시스템을 해킹 할 수 있습니다. 나는 서버 쪽에서 그것을 검증 할 방법을 찾을 수 없다. 암호화가 도움이 될 수 있지만 해커가 항상 해독 방법을 찾을 수 있다고 생각합니다. 누구나 이것을 더 안전하게 만드는 방법에 대한 아이디어가 있습니까?

업데이트 : 내 웹 사이트의 내용이 다소 모호한 점에 대해 사과드립니다. 기본적으로 페이스 북과 비슷한 싫어하는 시스템 일뿐입니다. 내 테이블의 구조는 : id, user_that_liked_id, post_id입니다. 사용자가 게시물을 좋아하면 게시물의 ID가 post_id에 삽입되고 게시물을 좋아하는 사용자의 ID가 user_that_liked_id에 삽입됩니다. 사용자가 숨겨진 입력의 ID를 변경하기 만하면 모든 종류의 불필요한 내용을 삽입 할 수 있기 때문에 여기에 보안 문제가 있습니다. 아래 코드를 참조하십시오.

HTML (요약) : 클라이언트에 제공하는 경우

<div class="thumbsup mini_thumbs" name="mini_thumbs"> 


<input type="hidden" value="<?php echo $row->id; ?>" id="post_id"/> 


<input class="up" name="thumbsup_vote" type="submit" value="1" title="Vote up" onclick = "liked(this)" /> 


<input class="down" name="thumbsup_vote" type="submit" value="0" title="Vote down" onclick = "disliked(this)" /> 
</div> 

자바 스크립트/jQuery를 (요약)

function liked(e) { 
var post_id = $(e).siblings("#post_id").val(); 
alert(post_id); 
} 

답변

1

, 다음 사용자가 변경할 수 있습니다.

양식을 제출할 때 클라이언트에게 전달하는 것을 피할 수없는 경우 사용자가 (예 :)으로 인증되었는지 (즉, 암호를 입력했는지 확인해야합니다.) 및 (즉, 요청이 요청하는 모든 작업을 수행 할 수 있습니다).

권한을 결정하는 방법은 전적으로 귀하가 당사에 설명하지 않은 비즈니스 규칙에 따라 결정됩니다. 이는 다음과 같을 수 있습니다.

IF the id belongs to an entry created by the user 
OR IF the user is an admin 

이렇게하면 명백히 사용자가 어떤 항목을 작성했는지 또는 어떤 사용자가 관리자인지 기록하는 것이 필요합니다.

여기에 보안 문제가 있습니다. 사용자가 숨겨진 입력의 ID를 변경하기 만하면 모든 종류의 의미가 삽입 될 수 있기 때문입니다.

내가 생각할 수있는 유일한 종류의 게시물은 여러 번 게시물을 좋아하는 것 또는 사용자가 볼 수없는 게시물을 좋아하는 것입니다. 이것은 단지 승인으로 돌아옵니다. 요청이 중복되거나 사용자가 투표하려는 게시물을 볼 수없는 경우 요청을 거부합니다.

+0

업데이트를 확인하십시오. :) –

+0

문제는 서버 쪽에서 확인할 방법이 없다는 것입니다. 선택한 ID가 올바른 것인지 실제로 확인할 수는 없습니다. –

+2

* right *인지 확인 할 필요는 없습니다. * 허용 *인지 여부 만 확인하면됩니다. 그들이 ID를 다른 ID로 변경하면 아무 것도 선택하지 않아도된다. – Gareth

0

html에 ID 값을 표시하는 것이 좋습니다. 서버 측에서 인증 및 유효성 검증을 잘했다고 가정합니다.

예를 들어, 귀하의 코드가 블로그 또는 비슷한 게시물을 업데이트하는 것으로 가정합니다. 업데이트 할 때 사용자가 로그인해야합니까? 현재 로그인 한 사용자가 해당 특정 게시물 (사용자가 속한 사용자 그룹에 게시물을 편집하거나 모든 게시물을 편집 할 수있는 권한을 설정하거나 게시자가 로그인 한 사용자임을 설정하여 IE를 업데이트 할 수있는 권한이 있는지 확인합니다).

세션에서 레코드 ID를 저장하여 사용자로부터 숨길 수 있지만 해커는 세션 하이재킹을 시도 할 수 있습니다.

모든 것이 백엔드 보안에 관한 것입니다.

+0

업데이트를 확인하십시오. :) –

+0

문제는 서버 쪽에서 확인할 방법이 없다는 것입니다. 선택한 ID가 올바른 것인지 실제로 확인할 수는 없습니다. –

관련 문제