PHP에서 입력 삭제

Shraddha Paghdar 2023년1월30일
PHP
  1. PHP에서 htmlentities()를 사용한 HTML 입력 삭제
  2. PHP에서 filter_var()를 사용한 HTML 입력 삭제
  3. PHP의 SQL 쿼리 삭제
PHP에서 입력 삭제

사용자 데이터는 데이터베이스에 저장해야 하지만 데이터베이스에 저장하기 전에 잘못된 형식의 데이터가 전달되지 않도록 해야 합니다. 그렇지 않으면 DB를 망칠 것입니다. 이렇게 하면 데이터 무결성이 보호됩니다. 사용자는 종종 위생 처리와 유효성 검사를 혼동합니다. 그들 사이의 유일한 차이점은 유효성 검사를 통해 데이터가 올바른 형식인지 확인하고 나중에 데이터에 잘못된 문자가 없는지 확인한다는 것입니다. 오늘 포스트에서는 PHP에서 입력 데이터를 데이터베이스(RDBMS/NoSQL)에 전달하기 전에 삭제하는 방법에 대해 알아보겠습니다.

삭제해야 하는 가장 일반적인 입력은 HTML, SQL 쿼리를 통한 입력, 사용자 프로필 정보입니다.

PHP에서 htmlentities()를 사용한 HTML 입력 삭제

모든 문자를 HTML 엔티티로 변환하는 PHP에서 제공하는 내장 기능입니다. htmlspecialchars()를 사용할 수도 있습니다. 이 두 함수의 유일한 차이점은 htmlspecialchars()는 특수 문자를 HTML 엔터티로 변환하는 반면 htmlentities()는 모든 문자를 변환한다는 것입니다.

PHP에서 htmlentities() 구문

htmlentities(string $string, $flags, $characterSet, boolean $doubleEncode);

매개변수

  • $string: 변환을 수행해야 하는 입력 데이터를 가져오는 필수 매개변수입니다.
  • $flags: 유효하지 않은 인코딩, 인용 부호 및 사용된 문서 유형을 처리하는 방법을 지정하는 선택적 매개변수입니다. 일부 플래그는 ENT_COMPAT, ENT_IGNORE, ENT_HTML5, ENT_NOQUOTES 등입니다.
  • $characterSet: 사용할 문자 집합을 지정하는 선택적 매개 변수입니다. 일부 문자 세트는 UTF-8, ISO-8859-1 등입니다.
  • doubleEncode: 기존 HTML 엔터티를 인코딩할지 여부를 지정하는 선택적 매개 변수입니다. 기본값은 true이며 모든 것을 변환합니다.

반환 값

위 함수의 출력에는 변환된 문자열이 포함됩니다. ENT_IGNORE 또는 ENT_SUBSTITUTE와 같이 플래그가 설정되지 않은 경우 문자열 매개변수에 잘못된 인코딩이 포함된 경우 빈 문자열을 반환합니다.

예제 코드:

<?php
    $str = '<a href="https://www.google.com">Go to google.com</a>';
    echo htmlentities($str);
?>

출력:

&lt;a href=&quot;https://www.google.com&quot;&gt;Go to google.com&lt;/a&gt;

PHP에서 filter_var()를 사용한 HTML 입력 삭제

PHP에서 제공하는 내장 기능으로 입력 데이터에 대해 유효성 검사 및 위생 처리를 수행합니다.

PHP에서 filter_var()의 구문

filter_var($inputValue, $filterType);

매개변수

  • $inputValue: 필터 검사를 적용할 입력 데이터를 가져오는 필수 매개변수입니다.
  • $filterType: 입력 데이터에 대해 수행할 필터 검사를 지정하는 필수 매개변수입니다. 지원되는 값은 다음과 같습니다.
    • FILTER_VALIDATE_INT: 입력 데이터가 유효한 정수인지 여부.
    • FILTER_SANITIZE_STRING: 입력 데이터가 유효한 문자열인지 여부와 입력 문자열에서 모든 HTML 태그를 제거합니다.
    • FILTER_VALIDATE_IP: 입력 데이터가 유효한 IP 주소인지 여부.
    • FILTER_SANITIZE_EMAIL: 입력 데이터가 유효한 이메일 주소인지 여부. 필터 var는 먼저 잘못된 문자를 제거한 다음 유효성 검사를 수행합니다.

반환 값

성공적으로 통과되면 필터링된 값을 반환합니다.

예제 코드:

<?php
    $inputString = "<p>Hello World! Welcome to PHP tutorial</p>";
    $newstr = filter_var($inputString, FILTER_SANITIZE_STRING);
    echo $newstr. "\n";
?>

출력:

Hello World! Welcome to PHP tutorial

PHP의 SQL 쿼리 삭제

SQL 주입을 방지하기 위해 개발자는 항상 PDO/MySQLi를 사용해야 합니다. PDO는 데이터베이스 추상화 계층입니다. PDO는 외부 데이터를 삭제하고 SQL 쿼리에 안전하게 삽입하여 문제 유형을 방지합니다. DB에 데이터를 보내기 전에 filter_var()를 사용하여 데이터를 처리합니다.

예제 코드:

<?php
    $servername = "hostname";
    $username = "username";
    $password = "password";
    $dbname = "databaseName";
    $lastname = "doe";

    $connection = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $statement = $connection->prepare("SELECT id, email, firstname, lastname FROM Users WHERE lastname=:lastname");
    $statement->execute(['lastname' => $lastname]);

    $resultOuput = $statement->setFetchMode(PDO::FETCH_ASSOC);
?>
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn