프론트 엔드 분리 전송에서 프론트 엔드는 일반적으로 데이터를 JSON 형식의 백엔드로 제출합니다. 데이터 무결성 및 보안을 보장하기 위해 백엔드는 이러한 필드가 예상 필드와 일치하는지 확인해야합니다. PHP의 array_diff_ukey () 함수는이를 우아하게 달성하는 데 도움이 될 수 있습니다.
이 기사는 간단한 예제를 사용하여 Array_diff_ukey ()를 사용하여 프론트 엔드에서 제출 한 필드와 백엔드가 허용하는 필드를 비교하여 불일치 한 주요 이름을 찾는 방법을 설명합니다.
Array_diff_ukey () 는 두 배열의 주요 이름을 비교하고 비교를 위해 사용자 정의 콜백 함수를 사용하는 PHP 내장 함수입니다. 첫 번째 배열에 나타나지 만 두 번째 배열에는 그렇지 않은 키 이름에 해당하는 값을 반환합니다.
기능 프로토 타입 :
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
백엔드가 다음 필드 만 받기를 원한다고 가정합니다.
$allowedFields = [
'username' => true,
'email' => true,
'age' => true,
];
프론트 엔드는 다음 데이터를 제출했습니다.
$submittedData = [
'username' => 'alice',
'email' => 'alice@example.com',
'age' => 25,
'is_admin' => true, // 불법 분야
];
우리는 "is_admin" 이 불법 분야라는 것을 감지해야합니다.
<?php
$allowedFields = [
'username' => true,
'email' => true,
'age' => true,
];
$submittedData = [
'username' => 'alice',
'email' => 'alice@example.com',
'age' => 25,
'is_admin' => true,
];
// 사용 array_diff_ukey 필드 비교를 수행하십시오
$invalidFields = array_diff_ukey(
$submittedData,
$allowedFields,
function($key1, $key2) {
return strcmp($key1, $key2);
}
);
if (!empty($invalidFields)) {
echo "检测到불법 분야:\n";
foreach ($invalidFields as $field => $value) {
echo "- $field: $value\n";
}
// 로그를 기록하거나 오류 메시지를 반환 할 수 있습니다.
// 샘플 로그 인터페이스 호출(의사 코드):
$logUrl = 'https://api.m66.net/logs/invalid-fields';
// sendToApi($logUrl, ['fields' => array_keys($invalidFields)]);
} else {
echo "필드 검증이 통과되었습니다。\n";
}
프론트 엔드 필드 이름이 백엔드 (예 : 낙타 vs 밑줄과 같은)와 일치하지 않으면 필드 매핑 테이블과 함께 사용할 수 있습니다.
$fieldMap = [
'userName' => 'username',
'emailAddress' => 'email',
'userAge' => 'age',
];
// 확인을 위해 맵 테이블을 뒤집습니다
$mappedKeys = array_flip($fieldMap);
// 시뮬레이션 제출
$submittedData = [
'userName' => 'alice',
'emailAddress' => 'alice@example.com',
'userAge' => 25,
'adminStatus' => true,
];
$invalidFields = array_diff_ukey(
$submittedData,
$mappedKeys,
'strcmp'
);
if (!empty($invalidFields)) {
echo "다음 필드는 매핑 테이블에 정의되어 있지 않습니다.:\n";
print_r(array_keys($invalidFields));
} else {
echo "필드 매핑 검증이 통과되었습니다。\n";
}
Array_diff_ukey ()를 사용하면 프론트 엔드가 전달한 불법 필드 또는 매핑 테이블에 정의되지 않은 필드를 빠르게 찾을 수 있습니다. 이것은 불법 데이터 주입을 방지 할뿐만 아니라 필드 검증 로직을 단순화합니다. 프로젝트의 유지 관리 및 보안을 향상시키기위한 일반적인 양식 검증 도구 방법으로 캡슐화하는 것이 좋습니다.