2013-08-27 5 views
0

HTML 속성에 데이터베이스에서 추출한 데이터의 행 ID를 저장하는 많은 웹 사이트 (SO 및 내 웹 사이트 포함)를 보았습니다. 클라이언트 쪽에서 사용자가 편집 할 수 있으며 서버 측에 데이터를 업데이트하도록 보낼 수 있음을 알고 있습니다. 예를 들어이 쿼리를 가지고 기억, 그것은 upvoting 코멘트입니다 :데이터 업데이트 안전 유지

<td data-commentid="<?php echo $row['comment_id']; ?>"><?php echo $row['comment']; ?></td>

출력 :

<td data-commentid="1">+1, beat me to it.</td> 
<td data-commentid="2">Damn! What is this?</td> 
... 

SELECT comment_id, comment FROM comments

이 정상적인 사람이이 같은 인쇄를 할 것입니다

일부 해커 유형의 사용자에게 표시 될 때, 그는 다음과 같은 형식으로 commentid를 편집하려고합니다. 어떤 방법이 있나요

: (250)와 버튼을 upvote에 클릭하고 우리의 죄 스크립트는 그것을 받아 들일 것이고,이 ID를 1 또는 2

질문과 의견에 대한 시각적 있었지만 ID (250)와 다른 의견을 upvote에합니다 이걸 없애기 위해? 콘솔을 켜고 중요한 정보를 주석으로 변경하기 위해 속성 참조를 변경할 때 DB를 업데이트 된 속성의 ID로 업데이트하는 것처럼 보일 수도 있습니다.

+1

인증? 사용자가 # 250 댓글을 게시하지 않은 경우 사용자는 수정하기 위해 서버 측에서 액세스하지 않아야합니다. – ceejayoz

+0

누군가가 클라이언트 측 도구를 사용하여 자신의 컴퓨터에있는 브라우저에 저장된 데이터를 조작하지 못하게 할 수 없습니다. 와일드 와일드 웹 (Wild Wild Web)입니다. 클라이언트에서 오는 어떤 것도 신뢰하지 않습니다. 댓글 # 250을 upvoted하는 것을 원하지 않으면 댓글 # 250을 upvotable해야하는 페이지에 사용자가없는 경우 upvotes를 허용하지 마십시오. –

+0

사용자가 선택할 수있는 방법은 주석 키에 GUID 또는 기타 증분이 아닌 데이터 유형을 사용하거나 제출 된 값에 보안 검사를 구현하는 것입니다. 이는 익명 사용자에게는 불가능할 수 있습니다. – Grax

답변

7

실제로 공격이 아닙니다.

"해킹"을 수행하고 실제로 # 250 댓글을 보면서 upvoting하는 것과 차이가 없습니다.

사용자가 ID 나 동작을 허용되지 않는 것으로 변경하면 서버 측 권한 부여/액세스 제어를 사용하여 요청을 거부해야합니다.

한마디로

:

는 클라이언트가 제공하는 정보를 신뢰하지 마십시오.

입력 내용이 의미가 있고 사용자가 조치를 취할 수 있는지 항상 확인하십시오.

+0

절대 신뢰하지 않는다는 논리적 인 결과는 ** 모든 것을 검증합니다 **. – tadman

관련 문제