PHP 학습 노트: 보안 및 방어 조치
소개:
오늘날의 인터넷 세계에서 보안은 매우 중요하며, 특히 웹 애플리케이션의 경우 더욱 그렇습니다. 일반적으로 사용되는 서버 측 스크립팅 언어로서 PHP 보안은 항상 개발자가 주의해야 하는 측면이었습니다. 이 기사에서는 PHP의 몇 가지 일반적인 보안 문제를 소개하고 몇 가지 방어 조치에 대한 샘플 코드를 제공합니다.
1. 입력 유효성 검사
입력 유효성 검사는 웹 애플리케이션의 보안을 보호하기 위한 첫 번째 방어선입니다. PHP에서는 일반적으로 사용자가 입력한 데이터가 합법적이고 안전한지 확인하기 위해 필터링 및 유효성 검사 기술을 사용합니다.
filter_var() 함수 사용과 같은 필터링 및 확인 기능을 통해 입력 데이터 처리:
코드 예:
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
사용자 이름 및 비밀번호의 길이 범위 지정과 같은 사용자 입력에 대한 엄격한 제한:
코드 예:
if (strlen($username) < 6 || strlen($username) > 20) { echo "用户名长度必须在6到20之间"; }
2. XSS 공격 방어
교차 사이트 스크립팅 공격(XSS)은 웹 애플리케이션이 사용자 입력 데이터를 잘못 처리하여 사용자 브라우저에서 악성 스크립트를 실행하는 일반적인 공격 방법입니다. XSS 공격을 방어하는 몇 가지 방법은 다음과 같습니다.
htmlspecialchars() 함수를 사용하여 출력을 이스케이프합니다.
코드 예:
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
콘텐츠 보안 정책(CSP)을 사용하여 외부 리소스 로드를 제한하고 방지합니다. 악성 스크립트 인젝션:
코드 샘플:
header("Content-Security-Policy: script-src 'self'");
3. SQL 인젝션 방어
SQL 인젝션은 공격자가 악의적으로 구성된 문자 시퀀스를 통해 데이터베이스 쿼리 문을 변조하여 웹 애플리케이션에서 악의적인 작업을 수행하는 것을 말합니다. 다음은 SQL 주입을 방어하는 몇 가지 방법입니다.
준비된 문(Prepared 문)을 사용하여 매개변수 바인딩:
코드 예:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username"); $stmt->bindParam(':username', $username); $stmt->execute();
PDO의 quote() 함수를 사용하여 매개변수 이스케이프:
코드 예:
$username = $pdo->quote($_POST['username']); $query = "SELECT * FROM users WHERE username = $username";
4. 파일 업로드 보안
파일 업로드 기능은 웹 애플리케이션에서 흔히 사용되는 기능입니다. 그러나 악의적인 사용자는 악의적인 스크립트가 포함된 파일을 업로드할 수 있습니다. 다음은 파일 업로드 보안 문제를 방어할 수 있는 여러 가지 방법입니다.
업로드된 파일의 접미사 이름 확인:
코드 예:
$allowedExtensions = ['jpg', 'png', 'gif']; $filename = $_FILES['file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!in_array($ext, $allowedExtensions)) { echo "文件类型不允许"; }
업로드된 파일을 사용자 업로드에 대한 직접 액세스를 방지하기 위해 격리된 디렉터리에 저장합니다. 파일:
코드 샘플:
$filename = uniqid().'.'.$ext; move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$filename);
5. 세션 관리 보안
세션 관리는 웹 애플리케이션의 중요한 부분입니다. 다음은 몇 가지 세션 관리 보안 조치입니다.
악성 스크립트에 의해 획득되지 않도록 HttpOnly 쿠키에 세션 ID를 저장하십시오.
코드 예:
session_set_cookie_params(['httponly' => true]); session_start();
세션 하이재킹을 방지하려면 정기적으로 세션 ID를 업데이트하십시오.
코드 예:
session_start(); if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) { session_regenerate_id(true); } $_SESSION['LAST_ACTIVITY'] = time();
요약:
위에 언급된 여러 보안 문제와 방어 조치를 통해 PHP 웹 애플리케이션의 보안을 강화할 수 있습니다. 그러나 보안은 지속적인 프로세스이므로 개발자는 진화하고 변화하는 보안 위협에 대응하기 위해 지식을 계속 배우고 업데이트해야 합니다. 동시에 웹 애플리케이션의 보안을 향상하려면 공식 PHP 문서의 보안 모범 사례 권장 사항에도 주의를 기울여야 합니다.
위 내용은 PHP 연구 노트: 보안 및 방어 조치의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!