일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 어린궁기
- 미국주식
- 북천황의감옥
- 바람의나라
- 타라옷
- 페이트그랜드오더
- 폭선우의무덤
- 일본패치
- Eminem
- 돌림판이벤트
- 아이유
- 2차승급
- 나스닥
- 막피범
- 걸스데이
- 매드클라운
- 레어닉
- 수지
- 체마1등
- 페그오
- 영어단어
- 매일영어단어
- 피렌체
- 에미넴
- 바람의나라연
- 2차신수
- 보물수호
- 주작의용천제일검
- 모바일바람의나라
- 매일영어단어외우기
- Today
- Total
티스의 이야기
PHP-메일전송 폼을 작성하고 싶을때 본문
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 |