이것은 아마도 반복되는 질문이지만 실제로 답변을 찾을 수 없습니다. $ _GET을 사용하여 URL에서 사용자 이메일 주소를 가져 오는 잊어 버린 비밀번호 스크립트가 있습니다. 그런 다음 스크립트는 $ _GET에서 오류 메시지를 확인한 다음 mysql을 통해 사용자 ID가 같은지 확인합니다. 사용자 ID는 정수 여야합니까?
지금 스크립트 자체는 잘하지만 사용자 ID는 문자열 대신 위해서 var_dump의 정수()으로 돌아옵니다. 나는 그것을 풀어 놓을 예정 이었지만 사용자 ID가 $ _GET 변수의 정수가 아니면 공격으로 이어질 수 있다는 것을 읽었습니다. num_rows 값을 int로 변경하려고 시도했지만 성공하지 못했습니다. num_rows가 배열을 반환하기 때문입니다. 사용자 ID를 확인하는 코드는 다음과 같습니다if (mysql_num_rows($result) == 1) {
// NEED TO TURN THIS ARRAY TO AN INT
list($userId) = mysql_fetch_array($result, MYSQL_NUM);
}
//elseif (mysql_num_rows($result) <= 0) {
else {
$wrong = '<p style="color: red">Something went wrong. Please try again</p>';
}
내가 스크립트 자체는 괜찮 전에, 그것은 물어 저를 이끌어가 내 머리에서 그것을 얻을 수없는 지금은 뭔가를 읽고 그냥 그리고 말했듯 너희들. Doe의 사용자 ID는 정수 여야합니다. 그렇지 않으면 문자열로 가져갈 수 있습니까?
편집 : 모든 여러분의 의견과 제안을 주셔서 감사합니다. PHP로 배우기에는 여전히 많은 것들이 있습니다. 다시 건배.
스크립트가 정수를 예상 할 경우 입력이 정수인지 확인해야합니다. '$ _GET'의 값은 문자열이지만,'is_numeric'을 사용하여 검사하고'(int)'를 사용하여 변환 할 수 있습니다. –
URL에서 가져 오는 것은 int 여야합니다. 문자열 인 경우 취약점입니다. 데이터베이스에서 ID를 검색 할 때 데이터베이스의 내용을 신뢰하는 한 값은 문자열 일 수 있습니다. – 11684
[** FILTER_VALIDATE_INT **] (http://php.net/manual/en/function.filter-var.php)를 사용하십시오. [_ 여기는 (int)가이 경우에는 바람직하지 않을 수있는 이유입니다.] (http://stackoverflow.com/questions/4789624/php-security-int-vs-filter-validate-int). 그리고 나서, [여기에 그것의 또 다른 예가있다] (http://codepad.org/kZGrkNuG) – itachi