PHP는 역동적이고 대화식 웹 사이트를 만드는 데 가장 인기있는 백엔드 웹 프로그래밍 언어 중 하나입니다. 그러나 PHP 코드는 다양한 보안 취약점에 취약 할 수 있습니다. 웹 애플리케이션을 보호하는 데 보안 모범 사례를 구현하는 것이 필수적입니다.
입력 유효성 검사는 SQL 주입 및 기타 악성 입력을 방지하는 데 중요한 단계입니다. PHP는 Filter_var () 및 preg_match ()와 같은 기능을 제공하여 입력 필터링을 수행합니다.
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
출력 정화는 크로스 사이트 스크립팅 (XSS) 공격을 방지하여 사용자 입력을 안전한 형식으로 변환합니다. HtmlSpecialchars ()를 사용하여 특수 문자를 효과적으로 탈출하십시오.
echo htmlspecialchars($comment);
세션은 사용자 데이터를 안전하게 저장하는 방법을 제공합니다. PHP는 session_start ()를 사용하여 세션을 시작하고 $ _session 배열을 통해 데이터를 관리합니다.
session_start();
$_SESSION['userID'] = 123;
크로스 사이트 요청 위조 (CSRF) 공격은 사용자의 지식없이 악의적 인 행동을 수행 할 수 있습니다. 임의의 토큰을 생성하여 CSRF를 방지 할 수 있습니다.
$csrfToken = bin2hex(openssl_random_pseudo_bytes(16));
$_SESSION['csrfToken'] = $csrfToken;
데이터베이스 연결은 SQL 주입 공격에 취약합니다. PDO를 사용하여 데이터베이스 작업을 안전하게 처리하십시오.
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$username = 'root';
$password = 'secret';
$db = new PDO($dsn, $username, $password);
비밀번호와 민감한 데이터는 강력한 암호화 알고리즘 (예 : BCrypt 또는 Argon2)을 사용해야합니다. php는 암호화 및 확인을위한 password_hash () 및 password_verify () 함수를 제공합니다.
$hashedPassword = password_hash('myPassword', PASSWORD_BCRYPT);
PHP 및 타사 라이브러리에 대한 정기적 인 업데이트는 보안 취약점을 수정하고 웹 사이트 보안을 보장 할 수 있습니다.
보안 웹 서버 (예 : Nginx 또는 Apache)를 선택하고 올바르게 구성하면 일반적인 공격을 방지하기 위해 추가 보안 보호 계층을 추가 할 수 있습니다.
다음 예는 모범 사례를 결합하여 로그인 양식을 보호하는 방법을 보여줍니다.
<?php
session_start();
// 확인을 입력하십시오
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
// 출력 정화
$username = htmlspecialchars($username);
$password = htmlspecialchars($password);
// 예방하다 CSRF 공격
$csrfToken = $_POST['csrfToken'];
if (!isset($csrfToken) || $csrfToken !== $_SESSION['csrfToken']) {
die('유효하지 않은 CSRF 토큰!');
}
unset($_SESSION['csrfToken']);
// 데이터베이스 연결 및 쿼리
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$username = 'root';
$password = 'secret';
$db = new PDO($dsn, $username, $password);
$stmt = $db->prepare('SELECT * FROM users WHERE username = ?');
$stmt->execute([$username]);
// 인증 및 세션 관리
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user && password_verify($password, $user['password'])) {
$_SESSION['userID'] = $user['id'];
$_SESSION['username'] = $user['username'];
header('Location: dashboard.php');
} else {
echo '로그인이 실패했습니다!';
}
?>
위의 방법을 통해 PHP 응용 프로그램의 보안을 효과적으로 개선 할 수 있으며 웹 사이트는 일반적인 공격 위협으로부터 보호 될 수 있습니다.