웹 개발에서 보안은 항상 개발자에게 핵심 문제입니다. 공격 방법의 지속적인 에스컬레이션으로 XSS (크로스 사이트 스크립팅 공격) 및 CSRF (크로스 사이트 요청 위조)는 가장 일반적인 두 가지 형태의 공격이되었습니다. 따라서 합리적인 보안 구성은 이러한 공격을 방지하는 핵심입니다. PHP는 널리 사용되는 프로그래밍 언어로서 보안을 설정하는 풍부한 방법을 제공합니다. 이 기사는 INT 기능의 보안 구성을 통해 XSS 및 CSRF 공격을 효과적으로 방지하는 방법을 살펴 봅니다.
XSS는 공격자가 악의적 인 JavaScript 코드를 웹 페이지에 삽입하여 사용자가 이러한 악성 코드를 실행하도록 유도하여 사용자의 민감한 정보 (쿠키, 세션 데이터 등)를 훔칩니다. XSS 공격은 무단 사용자 브라우저에서 악의적 인 스크립트를 실행하여 정보 유출 및 남용을 유발할 수 있습니다.
CSRF 공격은 공격자가 로그인 사용자가 악성 웹 사이트에 액세스하도록 유도하여 사용자의 지식없이 무단 요청을 시작할 때입니다. 이런 식으로 공격자는 피해자의 신원을 사용하여 다양한 작업 (예 : 암호 변경, 돈 전송 등)을 수행 할 수 있습니다.
PHP에서는 INT 기능에서 글로벌 보안 설정을 만들어 XSS 및 CSRF 공격을 효과적으로 방지 할 수 있습니다. INT 기능은 일반적으로 응용 프로그램 초기화 중에 실행되며 응용 프로그램 구성을 설정하고 글로벌 보안 측정을 처리하기에 이상적인 장소입니다.
출력 인코딩 :
사용자의 모든 데이터 입력은 페이지로 출력 할 때 HTML로 인코딩되어야합니다. 이로 인해 사용자가 입력 한 악성 JavaScript 코드가 브라우저에서 실행되는 것을 방지합니다.
function init() {
// 기본 출력 인코딩을 설정하십시오,예방하다 XSS 공격
ini_set('html_errors', 0);
}
// 사용자 데이터를 출력 할 때 수행하십시오 HTML 엔티티 인코딩
function safeOutput($data) {
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// 예:사용자의 출력 컨텐츠 입력
echo safeOutput($_GET['user_input']);
위의 코드에서 HTMLSpecialchars 함수는 사용자 입력에서 HTML 엔티티로 특수 문자 (예 : < , > , & 등)를 빠져 나와 브라우저가 HTML 또는 JavaScript 코드로 구문 분석하는 것을 피합니다.
인라인 JavaScript 비활성화 :
일부 브라우저는 사용자의 입력이 피해졌지만 인라인 JavaScript 코드를 실행할 수 있습니다. 따라서 보호를 더욱 강화하기 위해 HTTP 헤더를 통해 인라인 스크립트 실행을 방지 할 수 있습니다.
function init() {
// 설정 Content Security Policy(CSP)헤더 정보,스크립트 소스를 제한합니다
header("Content-Security-Policy: script-src 'self' https://gitbox.net;");
}
위의 코드에서는 Content-Security-Policy 헤더 정보를 설정하여 스크립트 소스를 제한하며 외부 악성 스크립트의로드를 피하기 위해 현재 도메인 이름 및 gitbox.net 에서 JavaScript 스크립트를로드 할 수 있습니다.
CSRF 토큰을 생성하고 확인하십시오.
CSRF 공격의 핵심은 요청을 위조하는 것입니다. CSRF 토큰을 사용함으로써 공격자는 위조기가 요청을하는 것을 효과적으로 방지 할 수 있습니다. 사용자가 페이지를 방문 할 때마다 서버는 고유 한 CSRF 토큰을 생성하여 양식에 포함시킵니다. 양식이 제출되면 서버는 토큰이 사용자 세션에서 토큰과 일치하는지 여부를 확인하여 요청의 정당성을 확인합니다.
function generateCSRFToken() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
function verifyCSRFToken($token) {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (empty($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
die('CSRF token validation failed');
}
}
형식으로 CSRF 토큰을 생성하여 숨겨진 필드로 제출하십시오.
// 생성하다 Token
$csrfToken = generateCSRFToken();
?>
<form method="POST" action="https://gitbox.net/submit_form.php">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<!-- 다른 형태의 필드 -->
<input type="submit" value="Submit">
</form>
양식이 제출되면 서버는 요청의 CSRF_Token이 요청의 정당성을 보장하기 위해 세션에 저장된 토큰과 일치하는지 여부를 확인합니다.
참조 헤더 확인 :
CSRF 공격은 일반적으로 로그인하는 동안 사용자에게 의존하여 로그인하는 동안 크로스 사이트 요청을 수행합니다. 요청에서 요청 이 신뢰할 수있는 페이지에서 오는지 확인하여 CSRF 공격의 위험을 더욱 줄일 수 있습니다.
function checkReferer() {
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (empty($referer) || strpos($referer, 'gitbox.net') === false) {
die('Invalid referer');
}
}
INT 기능에서 적절한 보안 구성을 통해 XSS 및 CSRF 공격을 효과적으로 방지 할 수 있습니다. 출력 인코딩, 컨텐츠 보안 정책 설정, CSRF 토큰 생성 및 확인 및 참조 상위 측정 점검은 이러한 공격으로부터 보호하는 효과적인 방법입니다. 이 기사에 제공된 예와 모범 사례가 잠재적 인 보안 위협으로부터 사용자를 보호하는보다 안전한 PHP 응용 프로그램을 구축하는 데 도움이되기를 바랍니다.