2016-09-22 3 views
0

프로필 사진을 업로드하고 변경하는 시스템이 있고 도 기본 사진으로 복원되는 링크가 있습니다. 콘솔 브라우저 (Chrome의 요소 검사)에서 ID 값을 변경하는 것을 볼 수 있습니다. 내가 업로드 할 이미지를 다른 사용자에게 할당 할 수 있습니다.이 이미지는 피할 수있는 것처럼 매우 나쁩니다.변경 입력 값 방지

index.php를

<form name="form" method="post" action="dashboard_reset_image.php"> 
<input type="hidden" name="id" value="'.$id.'"> 
<input type="submit" class="btn btn-danger btn-img-user" value="Reset"/> 
</form> 

이 마지막 코드를 만드는 것

$ID = $_POST['id']; 
$db = DB::getInstance(); 
$fields=array('img'=>'no-image.jpg'); 
$db->update('profile',$ID,$fields); 
Redirect::to("index.php?id=$ID"); 

가 기본 퍼팅 "프로필"테이블에서 "IMG"열을 업데이트하는 것입니다 dashboard_reset_image.php 이미지 (서버의 이미지를 지우지 않고 참조로 저장하지 않음).

HTML에서 생성 된 보안상의 오류를 계속 변경하고 있습니까?

답변

1

변경

$fields=array('img'=>'no-image.jpg'); 

$fields=array('img'=>$ID.'.jpg'); 

에 이미지 업데이트 파일 이름에 ID를 사용하는 것을 방지합니다.

누군가가 브라우저에서 ID를 변경하지 못하도록하려면 세션 저장소를 사용하여 서버에 ID를 저장 한 다음 제출 된 데이터가 동일한 ID인지 확인해야합니다.

session_start(); 
if (!isset($_SESSION['id']) && isset($_POST['id'])) { 
    $_SESSION['id'] = $_POST['id']; 
} 

지금처럼 HTML에서 ID를 채 웁니다 :

<input type="hidden" name="id" value="<?= $_SESSION['id'] ?>"> 

당신이 ID하는지 테스트하기 위해 클라이언트에서 데이터를받을 때이 같은

뭔가 게시 된 ID를 저장합니다 같으면 다음과 같이 사용하십시오.

if (isset($_SESSION['id'],$_POST['id'])) { 
    if ($_SESSION['id'] !== $_POST['id']) { 
     die('Ids do not match'); 
    } else { 
     echo 'Update the image here'; 
    } 
} 
+0

답변을 주셔서 감사합니다. 코드를보고 가장 편리한 시간이라고 생각합니다. 전자 ... 나는 의심의 여지가 ... 그것은 릴리스의 업데이 트의 끝에 세션을 파괴 수 있을까? – GePraxa