2013-02-02 3 views
4

이미지 업로드를 안전하게하는 방법을 알고 난 후 Bypassing forms input fields to upload unwanted files 나는 2 개의 파일 중 하나를 숨겨 놨습니다.숨겨진 필드가있는 입력 양식

SQL 표 (ID, 이름, JOD, 수)

CREATE TABLE `users` (
    `id` bigint(20) unsigned NOT NULL auto_increment, 
    `name` varchar(255) default '0', 
    `job` varchar(255) default NULL, 
    `number` varchar(255) default NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

양식 코드 (자신의 정보를 편집 할지지 부재)

<form action="send.php" method="post" name="send" id="send"> 
<input type="text" name="name" id="name" value="John"/> 
<input type="text" name="job" id="job" value="Plumber"/> 
<input type=hidden name="number" id="number" value="1234"/> 
<input type="Submit" name="Submit" value="Submit"/> 
</form> 

나중에이하던 파이어 폭스 확장 기능이 서버 측 바이 패싱 검사와 다른 입력을 우회하여 많은 피해를 입힐 수 있으므로 여기서 전체 프로세스를 중지하고 숨겨진 테이블의 값을 편집 할 수 있습니다. 을 value="1"과 같은 것으로 업데이트하면 회원의 업데이트 정보가 value number 1입니다.

enter image description here

즉 확장 다음과 같이 작동, 그것은 수는 서버 측에 전달하기 전에 데이터 가짜 입력.

enter image description here

PHP 코드 Send.php

if(isset($_POST['send'])){ 

$name = mysql_real_escape_string($_POST[name]); 
$job = mysql_real_escape_string($_POST[job]); 
$number = mysql_real_escape_string($_POST[number]); 

$sql= "update users SET name='$name',job='$job' WHERE number='$number'"; 
     mysql_query($sql) or die("query failed: $sql".mysql_error()); 

echo "Update Done"; 

} else { 
echo "Nothing to update"; 
} 

방법 다음과 같은 입력 폼에서 간단한 양식을 보호하는 질문? 이 해킹 될 :

+1

숫자로 바인딩하는 대신 PHP의 세션 ID와 같은 UNIQUE ID를 사용 하시겠습니까? – hjpotter92

+1

[** ** 구식 ** 데이터베이스 API] (http://stackoverflow.com/q/12859942/19068)를 사용하고 있으며 [현대 대체] (http://php.net/manual/ko/)를 사용해야합니다. mysqlinfo.api.choosing.php). – Quentin

답변

1

당신은 데이터 사람들이 서버에 제출하는 것을 통제 할 수없는 내 웹 사이트를 자유롭게 원인 ~ 감사합니다

이 문제는 정말 아프다.

사용자가 정보를 보거나 요청하는 변경 권한을 사용자에게 부여했는지 확인하려면 서버에서 확인해야합니다. 예를 들어

:

그러한에 숨겨진 테이블 번호의 값을 수정할 수

값 = 부재에 대한 "1"을 일으키는 업데이트 정보는 그 값 번호 1.

과정을

  1. 누군가이 필드를 편집 할 수 있습니까? 그렇다면 확인을 누릅니다.
  2. 요청이 인증 된 사용자로부터 왔습니까? 그렇지 않다면 오류 메시지와 로그인 양식을 반환하십시오.
  3. id = 1 인 사용자로부터 요청이 왔습니까? 그렇다면 확인한 다음
  4. 관리자 권한을 가진 사용자의 요청 인 경우? 오류 메시지가 나타나는 경우
  5. 오류 메시지를 반환합니다.
1

양식과 값을 편집 할 사용자가있는 경우이 문제가 발생합니다. 더 나은 접근 방법은 사용자를 인증하는 것입니다.계정으로 로그인 한 사용자 만 해당 계정을 변경할 수 있습니다.

또한 mysql_query 또는 mysql_ *과 같은 것을 사용하지 마십시오. php5에서는 불안정하고 가치가 떨어집니다.

2

사용자 인증이 원인의 옵션이 아닌 경우, 다음과 같은 방법을 시도 할 수 :

  • 는 숨겨진 설정 다른 정보
  • 와 소금에 절인 수의 해시와 숨겨진 필드를 설정합니다 암호화 된 숫자가있는 필드

물론 양식 HTML을 보내고 게시 정보를 확인할 때 추가 단계가 추가되지만 공격자 가짜 일수록 훨씬 어려울 것입니다. 버지니아 주 게시물의 뚜껑 번호. 숨겨진 필드가있는 소금에 절인 정보가 현명하게 사용되지 않으면 공격자가 다른 사용자의 암호화 된/해시 된 번호를 알고있는 경우 사용자를 저장하지는 못합니다.

관련 문제