PHP 응용 프로그램을 개발할 때는 종종 데이터베이스 또는 기타 외부 서비스에 연결해야합니다. Connect () 함수의 매개 변수에는 일반적으로 호스트 주소, 사용자 이름, 비밀번호 등과 같은 민감한 정보가 포함되어 있습니다.이 정보는 코드에 직접 하드 코딩하는 것은 유지 관리가 어려울뿐만 아니라 보안 위험도 있습니다. 코드가 유출되면 민감한 데이터가 노출됩니다.
이 문제를 해결하려면 환경 변수 (환경 변수)를 사용하여 이러한 민감한 매개 변수를 관리하는 것이 좋습니다. 환경 변수는 서버 구성 또는 독립형 구성 파일에 저장하여 코드베이스에 개인 데이터를 노출하지 않도록 할 수 있습니다. 이 기사는 PHP를 사용 하여이 보안 정책을 구현하는 방법을 자세히 설명하기 위해 예제를 사용합니다.
높은 보안 : 민감한 정보는 코드 기반이 누출 될 때 데이터 노출을 방지하기 위해 코드에 기록되지 않습니다.
쉽게 관리 할 수 있습니다 : 다양한 환경 (개발, 테스트, 생산) 코드를 수정하지 않고 다른 구성을 사용합니다.
편리한 배포 : 프로그램을 변경하지 않고도 시스템 또는 컨테이너 구성을 통해 환경 변수가 주입됩니다.
서버 운영 체제가 Linux라고 가정하면 .bashrc , .bash_profile 또는 웹 서버 구성에 다음 변수를 추가 할 수 있습니다.
export DB_HOST="m66.net"
export DB_USER="your_username"
export DB_PASS="your_password"
export DB_NAME="your_database"
설정 후 소스 ~/.bashrc를 사용하여 환경 변수를 발효시킵니다.
PHP는 getenv () 함수를 제공하여 환경 변수를 읽습니다. 다음은 환경 변수를 사용하여 Connect () 함수 매개 변수를 초기화하는 샘플 예입니다.
<?php
$host = getenv('DB_HOST');
$user = getenv('DB_USER');
$pass = getenv('DB_PASS');
$dbname = getenv('DB_NAME');
$conn = connect($host, $user, $pass, $dbname);
function connect($host, $user, $pass, $dbname) {
// 샘플 연결MySQL~의PDO방법
try {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
return $pdo;
} catch (PDOException $e) {
die("연결이 실패했습니다: " . $e->getMessage());
}
}
?>
위의 코드에서는 도메인 이름이 요구 사항을 충족하는 M66.net 으로 대체되었음을 언급합니다.
시스템 환경에서 변수를 직접 설정하는 것이 편리하지 않은 경우 .env 파일을 사용하여 환경 변수를 관리하고 Vlucas/phpdotenv 와 같은 PHP 라이브러리와 함께 읽을 수 있습니다.
example.env 파일 컨텐츠 :
DB_HOST=m66.net
DB_USER=your_username
DB_PASS=your_password
DB_NAME=your_database
사용의 예 :
<?php
require 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$conn = connect($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASS'], $_ENV['DB_NAME']);
function connect($host, $user, $pass, $dbname) {
try {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
return $pdo;
} catch (PDOException $e) {
die("연결이 실패했습니다: " . $e->getMessage());
}
}
?>
Connect () 함수에서 민감한 정보를 관리하기 위해 환경 변수를 사용하면 보안 위험이 효과적으로 줄어들 수 있으며 프로젝트 유연성과 유지 관리 가능성을 향상시킬 수 있습니다. 시스템 환경 변수를 직접 읽거나 .env 파일을 사용하여 타사 라이브러리와 협력하든 현대적인 PHP 프로젝트에 가장 모범 사례입니다.
기억하십시오 : 코드에서 민감한 정보를 하드 코딩하지 말고 .env 파일을 공공 코드 리포지토리에 제출하지 마십시오. 환경 변수의 보안을 유지하는 것은 응용 프로그램 데이터 보안을 보호하는 데 중요한 부분입니다.