티스의 이야기

PHP-메일전송 폼을 작성하고 싶을때 본문

프로그래밍

PHP-메일전송 폼을 작성하고 싶을때

밍딩이 2016. 6. 15. 16:59

PHP-메일전송 폼을 작성하고 싶을때



CSRF(Cross Site Request Forgeries)


CSRF는 공격용 홈페이지 등을 작성하여 홈페이지의 열람자 모르게 별도의 Web사이트에서 어떠한 조작 등을 실행하게 하는 공격 수법을 의미합니다. 이 레시피에서 작성하는 메일 전송 폼에서도 CSRF를 대비하지 않으면 다른 Web 사이트 등으로부터 전송이 조작될 가능성이 있습니다.



<?php

// h() 함수 레시피 218를 불러옵니다 레시피 041.

require_once '../../../../lib/h.php';


// 클릭재킹 (clickjacking) 대책 레시피 287을 마련합니다.

header('X-FRAME-OPTIONS: SAMEORIGIN');


// 세션을 시작합니다.

session_start();


// 고정 토큰 레시피 286을 생성해 세션 변수에 저장합니다.

// 폼의 Hidden 필드에서 출력합니다.

if (! isset($_SESSION['token'])) {

$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));

}

$token = $_SESSION['token'];

?>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>메일 전송 폼</title>

</head>

<body>

<div id="mailbox">

<h1>메일 전송 폼</h1>

<?php

// 오류가 발생하면 표시합니다.

if (isset($_SESSION['error'])) {

foreach ($_SESSION['error'] as $value) {

echo ' <span style="color:red;">' . h($value) . '</span><br>' . "\n";

}

}


// 3항 연산자 레시피 025를 사용하여 세션에 저장된 데이터가 있으면

// 변수에 대입합니다.

$name = isset($_SESSION['name'])     ? $_SESSION['name']      :  '';

$email  = isset($_SESSION['email'])     ? $_SESSION['email']      :  '';

$comment = isset($_SESSION['comment'])  ? $_SESSION['comment']  :  '';

?>


<p> * 표시는 필수 입력 항목입니다. 태그는 무효화합니다. </p>

<form action="mailform_confirm.php" method="post">

<dl>

<dt><label for="name">이름(*):</label></dt>

<dd><input type="text" name="name" id="name"

value="<?php echo h($name); ?>" maxlength="100" required></dd>

</dl>

<dl>

<dt><label for="email">메일 주소(*):</label></dt>

<dd><input type="email" name="email" id="email"

value="<?php echo h($email); ?>" maxlength="256" required></dd>

</dl>

<dl>

<dt><label for="comment">내용(*)(500문자 이내):</label></dt>

<dd><textarea rows="6" cols="30" id="comment" name="comment"

maxlength="500" required><?php echo h($comment); ?></textarea></dd>

</dl>

<input type="hidden" name="token" value="<?php echo h($token); ?>">

<input type="submit" name="submit" value="입력 내용 확인">

</form>

</div>

</body>

</html>



'프로그래밍' 카테고리의 다른 글

PHP-메일전송폼 2  (0) 2016.06.16
PHP-메일 전송 코드  (0) 2016.06.16
PHP-인증을 요구하고 싶은 페이지  (0) 2016.06.14
PHP-로그인 폼작성  (0) 2016.06.13
PHP-데이터베이스에서 선택 메뉴생성  (0) 2016.06.10
Comments