>  기사  >  백엔드 개발  >  PHP에서 필터 기능을 사용하여 입력 유효성 검사

PHP에서 필터 기능을 사용하여 입력 유효성 검사

WBOY
WBOY원래의
2016-07-25 09:10:27939검색
  1. if (isset($_GET["value"])) {
  2. $value = $_GET["value"];
  3. }
  4. else {
  5. $value = false;
  6. }
  7. if (is_numeric($value) && ($value >= 15 && $value <= 20)) {
  8. // 코드 실행
  9. }
  10. else {
  11. // 문제 처리
  12. }
코드 복사

이것은 내가 보고 싶은 더 많은 줄을 작성한 매우 기본적인 예입니다. 첫째, $_GET이 무엇으로 설정되어 있는지 확인할 수 없기 때문에 코드는 스크립트가 넘어지지 않도록 적절한 검사를 수행합니다. 두 번째는 USD 값이 $_GET 값에서 직접 지정되었기 때문에 이제 "더러운" 변수라는 사실입니다. 문제가 발생할 경우를 대비하여 코드의 다른 곳에서 달러 값을 사용하지 않도록 주의해야 합니다. 그러면 16.0에서는 다양한 모달 파티클 때문에 is_numeric() 함수가 유효하다는 문제가 있습니다. 마지막으로, 명령문을 입 밖으로 꺼내면 코드 추적을 통해 작업할 때 추가 논리가 전달된다는 사실을 처리해야 합니다. 이제 위의 예를 비교해 보세요.

  1. $value = filter_input(INPUT_GET, "값", FILTER_VALIDATE_INT,
  2. 배열("옵션" => 배열 ("min_range" => 15, "max_range" => 20)));
  3. if ($value) {
  4. // 코드 실행
  5. }
  6. else {
  7. / /문제 처리
  8. }
코드 복사

따뜻하고 포근한 느낌이 들지 않나요? filter_input()에서 처리하는 $_GET 값은 설정되지 않으므로 스크립트가 올바른 정보를 받고 있는지 여부에 대해 강조할 필요가 없습니다. 또한 할당되기 전에 확인되었으므로 달러 가치가 더러워지는 것에 대해 걱정할 필요가 없습니다. 현재 버전 16.0은 더 이상 유효하지 않습니다. 마지막으로 우리의 논리는 더 이상 복잡하지 않습니다. 이것은 진실한 값을 빠르게 확인하는 것입니다. (filter_input()은 유효성 검사에 실패하면 false를 반환하고 $_GET["value"]가 설정되지 않으면 null을 반환합니다. 분명히 실제 환경에서는 구성 파일에 저장된 변수 배열을 어딘가에 추출하여 비즈니스 로직에 들어가지 않고도 변경할 내용을 얻을 수 있다는 점은 분명합니다. 아주 멋진! 이제 간단한 스크립트에서 몇 개의 $_GET 또는 $_POST 변수를 가져오는 것이 유용할 것이라고 생각할 수도 있지만 내부적으로 함수나 클래스를 사용하는 것은 어떻습니까? 다행히 filter_var()가 있습니다. filter_var() 함수는 filter_input()과 동일한 작업을 수행하기 위해 도입되었습니다.

  1. /p>

  2. //그건 멍청한 짓이군요.

  3. function emailUser($email) {
  4. mail($email, "Here is my email", "Some Content");
  5. }

코드 복사
여기서 위험은 이메일을 보내려는 시도가 없으며 말 그대로 모든 값이 stopmail() 함수 $email에 저장될 수 있다는 것입니다. 이로 인해 이메일을 보낼 수 없거나 최악의 경우 악의적인 기능이 사용될 수 있습니다. 내가 본 것은 mail() 의 결과를 확인하는 것인데, 함수가 성공적으로 완료되었는지 확인하는 것은 좋지만, 반환되는 시간 값이 해를 끼치는 것은 사실입니다. 이와 같은 것이 훨씬 더 제정신입니다.

  1. // 이것은 샘플 함수이므로 실제로 이메일을 보내는 데 사용하지 마세요.
  2. // 그건 어리석은 일입니다. .
  3. function emailUser($email) {
  4. $email = filter_var($email, FILTER_VALIDATE_EMAIL);
  5. if ($email !== false) {
  6. mail($email, "여기 내 내용이 있습니다. email", "Some Content");
  7. }
  8. else {
  9. // 잘못된 이메일 주소 문제 처리
  10. }
  11. }
코드 복사

위의 질문을 포함하여 많은 예가 사용되었으며 이는 기본입니다. filter_var() 또는 filter_input()을 기본 검사 이외의 용도로 사용할 수 없다고 생각할 수도 있습니다. 그리고 FILTER_CALLBACK이라는 함수에 필터를 전달할 수 있습니다. FILTER_CALLBACK을 사용하면 필터링되는 변수를 허용하는 생성한 변수를 전달할 수 있습니다. 여기에서 시작할 수 있습니다. 왜냐하면 많은 즐거움을 누리기 위해 자신만의 비즈니스 논리를 필터링에 적용하기 시작할 수 있기 때문입니다. 몇 가지 잠재적인 함정 이러한 기능은 정말 훌륭하며 코드의 보안과 안정성을 향상시키는 데 도움이 될 수 있는 매우 강력한 필터링을 수행할 수 있게 해줍니다. 하지만 몇 가지 잠재적인 단점이 있는데, 이를 지적하지 않으면 아쉬운 느낌이 들 것입니다. 주요 결함은 필터가 해당 기능에 적용되는 한입니다. 이메일 검증을 사용한 마지막 예 - 5.2.14와 5.3.3 FILTER_VALIDATE_EMAIL 사이에서 변경되는 이메일 주소를 처리하는 방법, 동일한 버전의 PHP를 실행하는 모든 애플리케이션이 기술적으로 유효한 이메일 주소를 가지고 있다고 가정하더라도 아마도 원하지 않을 것입니다. 어떤 필터를 사용하고 있는지 확인하세요. 두 번째 함정은 사람들이 필터를 넣으면 코드가 안전하다고 생각한다는 것입니다. 필터링된 변수는 도움이 되지만 코드를 남용으로부터 100% 안전하게 만들 수는 없습니다. 이에 대해 이야기하고 싶지만 이는 이 기사의 범위를 벗어나며 내 단어 수가 이미 상당히 많습니다! 요약: 코드에서 하나의 함수만 만들고 다른 데이터 유형과 다른 값을 전달하면 어떤 일이 발생하는지 확인한다고 생각합니다. 그런 다음 여기에 설명된 필터링 방법 중 일부를 적용하여 코드 성능에 차이가 있는지 확인하시기 바랍니다. 귀하의 의견에 대해 어떻게 생각하시는지 알고 싶습니다.



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.