상수 FILTER_SANITIZE_STRING이 더 이상 사용되지 않습니다.
저는 PHP 8.1을 설치했고 이전 프로젝트를 테스트하기 시작했습니다.▁filter다 필터를 사용해 왔습니다.FILTER_SANITIZE_STRING 예:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
이제 다음 오류가 발생했습니다.
사용되지 않음:상수 FILTER_SANITIZE_STRING이 더 이상 사용되지 않습니다.
사용할 때도 마찬가지입니다.FILTER_SANITIZE_STRIPPED:
사용되지 않음:상수 FILTER_SANITIZE_STRIPPED가 더 이상 사용되지 않습니다.
무엇으로 대체할 수 있습니까?
이 필터는 용도가 분명하지 않습니다.정확히 무엇을 달성하기 위한 것인지, 언제 사용해야 하는지 말하기 어렵습니다.또한 이름 때문에 기본 문자열 필터와 혼동되었습니다. 실제로는 기본 문자열 필터가 호출됩니다.FILTER_UNSAFE_RAWPHP 커뮤니티는 이 필터의 사용을 더 이상 지원하지 않기로 결정했습니다.
이 필터의 동작은 매우 직관적이지 않았습니다.그것은 사이의 모든 것을 제거했습니다.<의 끝이나 그고문의또다 번 까 지 음 는 끝 자 열 리 ▁the ▁and 번 까 지 ▁until>또한 모든 데이터를 제거했습니다.NUL바트입다니를 인코딩했습니다. 마침내, 암호화를 했습니다.'그리고."HTML 엔티티에 추가할 수 있습니다.
교체하려면 다음과 같은 몇 가지 옵션이 있습니다.
필터 사용 " " " 를 사용합니다.
FILTER_UNSAFE_RAW필터링을 하지 않습니다.만약 당신이 그 행동에 대해 전혀 몰랐다면 이것을 사용해야 합니다.FILTER_SANITIZE_STRING문자열 값을 제공하는 기본 필터를 사용하려고 합니다.XSS 취약성으로부터 보호하기 위해 이 필터를 사용한 경우 해당 필터의 사용을 로 바꿉니다. 입력 데이터에서 이 함수를 호출하지 마십시오.XSS로부터 보호하려면 출력을 인코딩해야 합니다!
필터가 어떤 역할을 하는지 정확히 알고 있고 폴리필을 만들려면 정규식을 사용하여 쉽게 만들 수 있습니다.
function filter_string_polyfill(string $string): string { $str = preg_replace('/\x00|<[^>]*>?/', '', $string); return str_replace(["'", '"'], [''', '"'], $str); }
안전한 html 문자열에서 변수를 변환하려는 경우 대신 사용할 수 있는 가장 가까운 상수는 FILTER_SANITIZE_FULL_SPECIAL_CHARS입니다.
설명서에서 다음으로 대체해야 합니다.htmlspecialchars().
필터_SANITIZE_STRING
태그 및 HTML-인코딩 이중 따옴표와 단일 따옴표, 선택적으로 특수 문자를 제거하거나 인코딩합니다.FILTER_FLAG_NO_ENCODE_QUOTES를 설정하여 따옴표 인코딩을 해제할 수 있습니다. (PHP 8.1.0에서 사용되지 않음, 대신 htmls special chares()를 사용합니다.)
필터_SANITIZE_STRIPPED
"string" 필터의 별칭입니다. (PHP 8.1.0에서 사용되지 않으며 대신 htmls special chars()를 사용합니다.)
이렇게 FILTER_SANITIZE_STRING 상수를 교체했습니다.이렇게 하면 플래그도 사용할 수 있습니다.
저는 몇 가지 PHP 백엔드 테스트를 받았는데, 이 방법으로 잘 작동합니다.개선해 주셔서 감사합니다.
/**
* @param string $value
* @param array $flags
* @return string
*/
private static function sanitizeFilterString($value, array $flags): string
{
$noQuotes = in_array(FILTER_FLAG_NO_ENCODE_QUOTES, $flags);
$options = ($noQuotes ? ENT_NOQUOTES : ENT_QUOTES) | ENT_SUBSTITUTE;
$optionsDecode = ($noQuotes ? ENT_QUOTES : ENT_NOQUOTES) | ENT_SUBSTITUTE;
// Strip the tags
$value = strip_tags($value);
// Run the replacement for FILTER_SANITIZE_STRING
$value = htmlspecialchars($value, $options);
// Fix that HTML entities are converted to entity numbers instead of entity name (e.g. ' -> " and not ' -> "e;)
// https://stackoverflow.com/questions/64083440/use-php-htmlentities-to-convert-special-characters-to-their-entity-number-rather
$value = str_replace([""", "'"], [""", "'"], $value);
// Decode all entities
return html_entity_decode($value, $optionsDecode);
}
다음과 같이 쉽게 대체할 수 있습니다.
FILTER_UNSAFE_RAW
언급URL : https://stackoverflow.com/questions/69207368/constant-filter-sanitize-string-is-deprecated
'programing' 카테고리의 다른 글
| 오류 "모듈 루트 폴더에 파일 Google-services.json이 없습니다.Google 서비스 플러그인이 없으면 작동할 수 없습니다." (0) | 2023.08.18 |
|---|---|
| Node.js 'require' 문의 대괄호(괄호)가 곱슬곱슬합니다. (0) | 2023.08.18 |
| 입력 필드에 텍스트 추가 (0) | 2023.08.18 |
| Javascript 요청에 대한 Rescue_from (0) | 2023.08.18 |
| jQuery 데이터 테이블을 다시 로드/새로 고침하는 방법은 무엇입니까? (0) | 2023.08.18 |