현재 위치: > 최신 기사 목록> XSS 공격 문자를 저장하지 않으려면 mysqli :: get_charset을 사용하십시오

XSS 공격 문자를 저장하지 않으려면 mysqli :: get_charset을 사용하십시오

M66 2025-05-18

스토리지 XSS (크로스 사이트 스크립팅 공격)는 공격자가 악의적 인 스크립트를 제출하여 악의적 인 스크립트를 데이터베이스에 저장할 수있는 일반적인 보안 취약점으로, 다른 사용자가 데이터에 액세스 할 때 실행할 수 있습니다. 이러한 종류의 공격의 주요 문제는 악의적 인 스크립트가 서버 측에 저장되고 이후 요청에서 실행되며 일반적으로 사용자 세션 정보를 훔치거나 다른 악성 작업을 수행하는 데 사용된다는 것입니다.

이 공격을 방지하기 위해 데이터베이스에서 문자 인코딩이 올바르게 처리되고 악의적 인 코드가 실행되지 않도록해야합니다. mysqli :: get_charset은 데이터베이스 연결의 문자 인코딩을 확인하는 데 도움이되는 PHP 기능입니다. 인코딩 설정이 올바른지 확인하는 것은 XSS 공격을 방지하기위한 단계입니다.

mysqli :: get_charset 란 무엇입니까?

mysqli :: get_charset 함수는 MySQLI Extension 라이브러리의 일부이며 현재 데이터베이스 연결의 문자 세트 (문자 인코딩)를 얻는 데 사용됩니다. 인코딩 불일치로 인한 잠재적 XSS 취약점은 문자 세트가 올바르게 설정되도록하여 불일치를 피할 수 있습니다.

문법:

 $charset = $mysqli->get_charset();

리턴 값은 현재 연결에서 사용하는 문자 세트에 대한 정보를 포함하는 객체입니다.

예:

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 현재 데이터베이스 연결의 문자 세트를 가져옵니다
$charset = $mysqli->get_charset();

// 현재 문자 세트 설정을 출력하십시오
echo "현재 문자 세트는입니다: " . $charset->charset;
?>

문자 인코딩 설정이 중요한 이유는 무엇입니까?

문자 인코딩 설정에 따라 데이터가 응용 프로그램에서 데이터베이스로 전송되는 방법과 데이터가 데이터베이스에서 응용 프로그램으로 반환되는 방법을 결정합니다. 문자 인코딩이 잘못된 경우, 특히 사용자 입력을 처리 할 때는 차량 또는 코드 주입 공격으로 이어질 수 있습니다. 특히 저장된 XSS 공격의 경우 일관성이없는 인코딩으로 인해 악의적 인 코드가 잘못 실행될 수 있습니다.

올바른 인코딩 설정을 사용하면 사용자 입력에서 데이터베이스 스토리지 및 사용자 측면으로의 출력에 이르기까지 모든 것이 조작되거나 실행 가능한 스크립트로 해석되지 않도록합니다.

스토리지 XSS 공격을 방지하는 방법은 무엇입니까?

스토리지 XSS 공격을 방지하기위한 가장 중요한 단계는 다음과 같습니다.

  1. 데이터베이스 연결이 올바른 문자 세트를 사용하는지 확인하십시오.
    데이터베이스에 연결할 때 올바른 문자 세트를 사용하는 것이 중요합니다. 문자 세트가 일치하지 않으면 악성 사용자 입력이 오류 처리되어 XSS 취약성을 유발할 수 있습니다. 현재 문자 세트 설정은 mysqli :: get_charset을 통해 확인할 수 있습니다.

  2. 사용자 입력의 적절한 필터링 및 탈출을 수행하십시오.
    컨텐츠 사용자 입력 유형에 관계없이 적절한 필터링 및 탈출을 수행해야합니다. 특히 HTML 및 JavaScript 코드의 경우 실행되지 않은지 확인하십시오. HTMLSpecialchars () 또는 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 입력을 피하십시오.

  3. HTTP 헤더 설정 :
    서버에서 반환 한 컨텐츠가 텍스트/HTML 과 같은 올바른 MIME 유형을 사용하는지 확인하십시오. 또한 브라우저가 문자를 올바르게 인코딩하는지 확인하려면 컨텐츠 유형을 UTF-8로 설정해야합니다.

  4. 매개 변수화 쿼리 사용 :
    SQL 주입 방지는 XSS 공격을 방지하는 또 다른 중요한 조치입니다. 준비된 명령문을 사용하여 악의적 인 SQL 코드를 실행하는 것을 방지 할 수 있습니다.

  5. 데이터를 확인하고 정리하십시오.
    사용자 입력을 데이터베이스에 저장하기 전에 확인하고 정리하는 것이 가장 좋습니다. 사용자 입력이 합법적인지 확인하고 잠재적 인 악성 코드를 정리하십시오.

예 : 인코딩 설정을 확인하고 MySQLI 로 XSS를 방지하십시오

다음은 인코딩이 올바르게 설정되고 XSS 공격을 방지하는 방법을 보여주는 완전한 예입니다.

 <?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "username", "password", "database");

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 현재 문자 세트 설정을 가져옵니다
$charset = $mysqli->get_charset();
echo "현재 문자 세트는입니다: " . $charset->charset . "<br>";

// 올바른 문자를 설정하십시오 utf8mb4
if (!$mysqli->set_charset("utf8mb4")) {
    die("문자 세트를 설정할 수 없습니다: " . $mysqli->error);
}

// 사용자 입력을 얻고 처리합니다
$user_input = $_POST['user_input'];  // 사용자 입력이 통과한다고 가정합니다 POST 옮기다

// 사용 htmlspecialchars() 예방하다 XSS
$safe_input = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

// 안전한 입력을 데이터베이스에 저장하십시오
$stmt = $mysqli->prepare("INSERT INTO users (user_input) VALUES (?)");
$stmt->bind_param("s", $safe_input);
$stmt->execute();

// 연결을 닫으십시오
$stmt->close();
$mysqli->close();
?>

이 예에서는 먼저 get_charset () 을 통해 현재 문자 세트 설정을 확인한 다음 UTF-8 인코딩이 SET_CHARSET ( "UTF8MB4")을 통해 데이터를 저장하고 표시하는 데 사용되는지 확인합니다. 한편, 사용자 입력을 처리 할 때는 htmlspecialchars ()를 사용하여 잠재적 XSS 공격을 방지합니다.

요약

mysqli :: get_charset 함수를 사용하여 데이터베이스 연결의 문자 세트 설정을 확인하고 올바른 인코딩이 사용되는지 확인하면 스토리지 XSS 공격을 효과적으로 방지 할 수 있습니다. 동시에 적절한 입력 검증, 탈출 및 스토리지 측정을 결합하면 웹 애플리케이션의 보안을 극대화하고 잠재적 인 공격 위험을 피할 수 있습니다.