2011-08-28 3 views
2

HTML에서 PHP 코딩으로 이동 했으므로 뉴스 페이지 링크를 만들고 싶을 때 HREF를 사용하여 행의 ID를 링크로 사용하여 조각의 제목을 볼 수있는/클릭 가능한 링크 : 사람이 제목을 클릭하면정보를 확인 하시겠습니까? 정수입니다

echo "<a href=news.php?id=".$row{'id'}; 
echo ">"; 
echo ucwords(strtolower($row{'newstitle'})); 
echo "</a>"; 

그래서 기사로 리디렉션 및 주소 표시 줄이된다 (분명히 이것은 예입니다) : http://site.com/news.php?id=1

내가 확인할 수있는 방법 그 후 정보 ? id = int (숫자가 될 것입니다)이며 사이트를 손상시킬 수있는 일부 사용자 코드 또는 다른 입력이 아닙니까? 나는 코드를 Sanitizing/Validating하는 방법을 살펴 보았지만, 내가 발견 한 모든 예는 단순히 주소가 유효하다는 것을 보장하기보다는 주소에서 사용되는 양식에 정보를 입력하는 것과 관련이있다. 도움을 청합니다. 감사

답변

3

당신은 사용해야보십시오 filter module :

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); 
if ($id === false) { 
    // not an integer 
} 

또는 변수 만 진수로 구성되어 있는지 확인하는 ctype_digit()를 사용할 수 있습니다

if (ctype_digit($_GET['id'])) { 
    // it's an integer 
} else { 
    // not an integer 
} 

이하 :

ctype_digit($_GET['id']) or die("oops that's not an integer!"); 

그러나 die 또는 exit는 코드가 덜 검증 할 것입니다.


is_numeric

도 작동합니다,하지만 숫자뿐만 아니라 정수의 문자열 표현에 대해 true를 반환합니다. 당신이 당신의 정수 ID에 대한 유효한 숫자로 0를 제외한 경우

+0

이것은 입력이 정수의 유효한 표현임을 * 확인하지 * 않습니다. –

+0

이제 더플 대답을 은폐 할 수 있습니다. – adlawson

+0

나는 내 대답을 향상 시켰습니다. – arnaud576875

1

는이

<?php 
if (is_int($_GET["id"])) { 
echo "is integer\n"; 
} else { 
echo "is not an integer\n"; 
} 
?> 
+1

$ _GET "정수"실제로 문자열 값입니다. 대신에 ['is_numeric()'] (http://php.net/manual/en/function.is-numeric.php)를 사용하십시오. – adlawson

0

, 당신은 단순히 다음을 수행 할 수

캐스트의
$id = (int) $_GET['id']; 
if (!$id) { 
    # no number -or- 0 given 
} else { 
    # regardless what have been given, it has been converted at least to some integer. 
} 

. 이제 $id은 항상 정수이므로 사용하는 것이 더 안전합니다.

그러나, 대부분의 경우에는 숫자가 음이 아닌 것을뿐만 아니라 확인해야합니다

$id = max(0, $_GET['id']); 

max 함수는 정수로 $_GET['id'] 캐스팅 돌봐 않습니다. 제공된 값이 0보다 큰 경우 id가 0 이상이되도록합니다. 0 이하이면 0이 최대 값입니다. 그런 다음 실제로 더 엄격하게 입력의 유효성을 검사해야하는 경우

, 당신은 비교 이유로 다시 문자열로를 설정할 수 있습니다 :

if ("$id" === $_GET['id']) 
{ 
    # Input was done as a string representation of the integer value. 
}