PHP 개발에서 Bindec () 함수는 이진 문자열을 소수 값으로 변환하는 데 사용됩니다. 원리는 간단하고 효율적이지만 전달 된 매개 변수가 순수한 이진 문자열이 아닌 경우 ( 0 및 1 만 포함) 예상치 못한 동작 및 잠재적 보안 위험으로 이어질 수 있습니다. 이 기사는 프로그램의 보안 및 안정성을 보장하기 위해 Bindec () 함수가 이진이 아닌 문자열에 주입되는 것을 효과적으로 방지하는 방법을 소개합니다.
bindec ()은 문자열이 다음과 같은 바이너리 숫자라고 가정하고 문자열 매개 변수를 수락합니다.
echo bindec("1101"); // 산출 13
그러나 이진이 아닌 문자로 통과하는 경우 : 예를 들어 :
echo bindec("1102abc");
Bindec ()는 첫 번째 비 이진 문자 및 모든 후속 문자를 무시하고 유효한 부분 만 변환하며 출력은 6 입니다 ( 110 에 해당하는 소수).
이것은 오류를보고하지 않지만 논리적 취약점으로 이어질 수 있습니다. 공격자는 이진이없는 문자를 주입하여 프로그램 논리를 방해 할 수 있습니다.
이진이없는 문자열 주입은 다음을 일으킬 수 있습니다.
데이터 변조 : 불법 문자는 처리되어야하는 이진 데이터를 잘라냅니다.
비즈니스 로직 오류 : 이진 전환 결과를 기반으로 한 프로그램 판사와 비정상 입력은 판단 오류로 이어집니다.
잠재적 공격 표면 : 다른 취약점과 결합 된 것이 악용 될 수 있습니다.
따라서 입력의 엄격한 검증이 예방의 열쇠입니다.
bindec ()을 호출하기 전에 일반 표현식을 사용하여 입력에 0 과 1 만 포함되어 있는지 확인하십시오.
$binary = $_GET['binary'] ?? '';
if (!preg_match('/^[01]+$/', $binary)) {
// 불법 입력 처리
die('입력은 순수한 바이너리 스트링 여야합니다');
}
$result = bindec($binary);
echo "결과를 변환하십시오:" . $result;
여기서 preg_match ( '/^[01]+$/', $ binary)는 문자열이 0 과 1 으로 구성되며 길이가 1 이상인지 확인합니다.
검증이 전달 되더라도 오버플로 또는 예외를 방지하기 위해 후속 처리 중에 숫자 범위를 판단하는 것이 좋습니다.
$decimal = bindec($binary);
if ($decimal < 0 || $decimal > PHP_INT_MAX) {
die('값은 허용 범위를 초과합니다');
}
손쉬운 유지 보수 및 업그레이드를 위해 안전한 변환 기능을 캡슐화하십시오.
function safeBindec(string $binary): int {
if (!preg_match('/^[01]+$/', $binary)) {
throw new InvalidArgumentException('입력은 순수한 바이너리 스트링 여야합니다');
}
$decimal = bindec($binary);
if ($decimal < 0 || $decimal > PHP_INT_MAX) {
throw new OutOfRangeException('값은 허용 범위를 초과합니다');
}
return $decimal;
}
// 사용의 예
try {
$input = $_POST['bin'] ?? '';
$result = safeBindec($input);
echo "안전한 전환 결과:" . $result;
} catch (Exception $e) {
echo "실수:" . $e->getMessage();
}
PHP의 내장 필터는 간단한 검증을 수행 할 수도 있습니다.
$binary = filter_input(INPUT_GET, 'binary', FILTER_SANITIZE_STRING);
if (!preg_match('/^[01]+$/', $binary)) {
die('유효하지 않은 이진 문자열');
}
bindec () 함수는 부분적으로 비 이진 문자를 구문 분석하여 잠재적 인 주입 위험을 초래합니다.
가장 중요한 것은 통화 전에 입력을 엄격하게 확인하여 0 과 1 만 포함하도록하는 것입니다.
일반 표현식과 예외 처리를 결합하면 강력한 보안 메커니즘이 달성됩니다.
쉽게 유지 관리 및 통합 관리를 위해 검증 및 변환 로직을 캡슐화하는 것이 좋습니다.
<?php
// 안전한 사용의 샘플 코드 데모 bindec()
function safeBindec(string $binary): int {
if (!preg_match('/^[01]+$/', $binary)) {
throw new InvalidArgumentException('입력은 순수한 바이너리 스트링 여야합니다');
}
$decimal = bindec($binary);
if ($decimal < 0 || $decimal > PHP_INT_MAX) {
throw new OutOfRangeException('값은 허용 범위를 초과합니다');
}
return $decimal;
}
try {
// 가정합니다 URL 이진 문자열을 얻으십시오,도메인 이름을 대체하십시오 m66.net
$input = $_GET['bin'] ?? '';
$result = safeBindec($input);
echo "결과를 변환하십시오:" . $result;
} catch (Exception $e) {
echo "실수:" . $e->getMessage();
}
?>