PHP 보안이란 모든 계층 — 입력 처리, 데이터베이스 접근, 출력, 인증, 설정 — 에서 흔한 웹 취약점(OWASP Top 10)을 방어하는 것입니다. PHP가 웹의 상당 부분을 구동하므로, 이 관행들은 결정적으로 중요합니다.
1. SQL 인젝션 방지 — 준비된 구문
->( . []);
= ->();
->([[]]);
PHP 보안이란 모든 계층 — 입력 처리, 데이터베이스 접근, 출력, 인증, 설정 — 에서 흔한 웹 취약점(OWASP Top 10)을 방어하는 것입니다. PHP가 웹의 상당 부분을 구동하므로, 이 관행들은 결정적으로 중요합니다.
->( . []);
= ->();
->([[]]);
// ❌ 원시 사용자 입력 출력 → XSS (주입된 스크립트가 브라우저에서 실행됨)
echo $_GET['name'];
// ✅ HTML 컨텍스트용으로 출력 이스케이프
echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
출력 시 사용자 제어 데이터를 이스케이프하여(htmlspecialchars) 주입된 HTML/JS가 실행될 수 없게 하세요. (Twig/Blade 같은 템플릿 엔진은 자동 이스케이프함.)
// ✅ password_hash 사용 (bcrypt/argon2) — 평문, MD5/SHA 절대 안 됨
$hash = password_hash($password, PASSWORD_DEFAULT);
// 검증:
if (password_verify($input, $hash)) { /* 비밀번호 정확 */ }
PHP의 내장 password_hash/password_verify는 강력하고 솔트가 적용된 느린 알고리즘을 사용합니다 — 비밀번호를 저장하는 올바른 방법입니다.
// 토큰 생성, 세션에 저장, 폼에 포함, 제출 시 검증
$_SESSION['csrf'] = bin2hex(random_bytes(32));
// POST 시 검증: hash_equals($_SESSION['csrf'], $_POST['csrf'])
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); // 검증
$id = (int) $_GET['id']; // 캐스트/화이트리스트
// $_GET/$_POST/$_COOKIE를 절대 신뢰하지 말 것 — 모든 것을 검증
✓ 프로덕션에서 display_errors=Off (스택 트레이스/내부 정보를 사용자에게 누출하지 말 것 — 대신 로그)
✓ 비밀을 환경 변수 / 웹 루트 밖 설정에 보관, 코드/git에는 안 됨
✓ HTTPS 사용; secure/httponly/samesite 쿠키 플래그 설정
✓ PHP와 의존성을 최신으로 유지 (취약한 패키지는 composer audit)
✓ 파일 업로드 검증(타입, 크기); 웹 루트 밖에 저장
✓ 유지보수되는 프레임워크(Laravel/Symfony) 사용 — 많은 보호를 기본 제공
보안은 PHP 애플리케이션에 결정적이며, 이 관행들을 이해하는 것은 필수적입니다 — PHP가 웹의 거대한 부분을 구동하므로 PHP 앱은 끊임없는 공격 대상이며, 보안 실패는 치명적일 수 있습니다(데이터 유출, 계정 탈취, 변조).
PHP는 가장 흔하고 위험한 웹 취약점을 다루지만, 일부 프레임워크와 달리 많은 부분이 개발자가 올바른 관행을 따르는 데 달려 있습니다.
타협 불가의 필수사항: 준비된 구문은 SQL 인젝션(가장 흔하고 파괴적인 공격 중 하나)을 방지하고, 출력 이스케이프(htmlspecialchars)는 XSS를 방지하며, **password_hash/password_verify**는 안전한 비밀번호 저장을 보장하고(평문/약한 해시 절대 안 됨), CSRF 토큰은 상태 변경 요청을 보호하며, 철저한 입력 검증($_GET/$_POST/$_COOKIE를 절대 신뢰하지 않음)이 토대입니다.
마찬가지로 중요한 것은 안전한 설정입니다. 프로덕션에서 오류 표시 끄기(오류는 공격자에게 민감한 정보를 누출), 비밀을 코드 밖에 보관, HTTPS와 안전한 쿠키 플래그 사용, 업로드 검증, PHP와 의존성을 최신으로 유지(취약한 패키지가 주요 공격 벡터이므로).
이 계층적인 심층 방어(defense-in-depth) 접근을 이해하는 것 — 그리고 단 하나의 간과된 계층(인젝션, 누출된 비밀, 이스케이프되지 않은 출력, 패치되지 않은 의존성)이 전체 시스템을 위협할 수 있음 — 은 모든 PHP 개발자에게 중요한 고위험 지식입니다.
현대 프레임워크(Laravel, Symfony)가 많은 보호를 기본 제공하지만, 근본 위협과 관행을 이해하는 것은 안전한 애플리케이션을 구축하는 필수적인 책임이며, 프로덕션 PHP에 결정적이고 자주 관련되는 주제입니다.