入力画面に戻る、クロスサイトリクエストフォージェリとは、完了画面作成(ワンタイムチケットの発行、チェック、破棄、リダイレクト処理)
入力画面に戻る
form1.phpを以下のように編集する
<?php
session_start();
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['body'];
$name = htmlspecialchars($name,ENT_QUOTES);
$email = htmlspecialchars($email,ENT_QUOTES);
$subject = htmlspecialchars($subject,ENT_QUOTES);
$body = htmlspecialchars($body,ENT_QUOTES);
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
if(count($errors) === 0){
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['subject'] = $subject;
$_SESSION['body'] = $body;
header('Location:http://localhost/php_form/form2.php');
exit();
}
if(isset($_GET['action']) && $_GET['action'] === 'edit'){
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$subject = $_SESSION['subject'];
$body = $_SESSION['body'];
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<?php
echo"<ul>";
foreach($errors as $value){
echo"<li>";
echo $value;
echo "</li>";
}
echo"</ul>";
?>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email" value="<?php if(isset($email)){echo $email;}?>"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ" <?php if(isset($subject) && $subject === "お仕事に関するお問い合わせ") { echo "selected";} ?>>お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ" <?php if(isset($subject) && $subject === "その他のお問い合わせ") {echo "selected";} ?>> その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"><?php if(isset($body)){echo $body;}?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
form2.phpを以下のように編集する
<?php
session_start();
if(isset($_SESSION['name'])){
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$subject = $_SESSION['subject'];
$body = $_SESSION['body'];
}
?>
<!doctype html>
<html>
<htad>
<meta charset="utf-8">
<title>確認画面 - お問い合わせ</title>
</htad>
<body>
<form action="form3.php" method="post">
<table>
<tr>
<th>お名前</th><td><?php echo $name; ?></td>
</tr>
<tr>
<th>メールアドレス</th><td><?php echo $email; ?></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td><?php echo $subject; ?></td>
</tr>
<tr>
<th>お問い合わせ内容</th><td><?php echo nl2br($body); ?></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="送信する"></td>
</tr>
</table>
</form>
<p><a href="form1.php?action=edit">入力画面へ戻る</a></p>
</body>
</html>
<a href="form1.php?action=edit">はURLパラメータと呼ばれている
URLの後ろにデータをくっつけて、HTTPのGETメソッドでデータを送ることができる。
actionは変数名、editが変数の値で、どちらも任意の文字列です
URLパラメータを使うと別なページにデータを渡すことができる
URLパラメータの値は、$_GETというPHPが自動で生成する連想配列に自動で格納される。
form2.phpで、form1.php?action=editと記載しているので$_GETには、actionというキーができ、値はeditが格納されている
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
その後各項目に任意の文字を入力後確認ボタンへを押下
その後、入力画面へ戻るを押下し入力画面に戻ることができることを確認する。
クロスサイトリクエストフォージェリとは
ユーがーがあるサイトでログインをした状態で、他のサイトを閲覧すると
ユーザーが意図しない操作をユーザーの権限を利用して実行される
ECサイトでは、ログインをしていても、商品を購入するときは、再度ユーザ名とパスワードを入れるさいとがほとんどです。
これらはクロスサイトリクエストフォージェリ対策になっている。
完了画面作成
form2.phpを以下のように編集する
<?php
session_start();
if(isset($_SESSION['name'])){
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$subject = $_SESSION['subject'];
$body = $_SESSION['body'];
}
$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48));
$token = htmlspecialchars($_SESSION['token'],ENT_QUOTES);
?>
<!doctype html>
<html>
<htad>
<meta charset="utf-8">
<title>確認画面 - お問い合わせ</title>
</htad>
<body>
<form action="form3.php" method="post">
<input type="hidden"name="token"value="<?php echo $token ?>">
<table>
<tr>
<th>お名前</th><td><?php echo $name; ?></td>
</tr>
<tr>
<th>メールアドレス</th><td><?php echo $email; ?></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td><?php echo $subject; ?></td>
</tr>
<tr>
<th>お問い合わせ内容</th><td><?php echo nl2br($body); ?></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="送信する"></td>
</tr>
</table>
</form>
<p><a href="form1.php?action=edit">入力画面へ戻る</a></p>
</body>
</html>
form3.phpを新規に作成
<?php
session_start();
if(isset($_POST['token'],$_SESSION['token'])&& ($_POST['token'] === $_SESSION['token'])){
unset($_SESSION['token']);
echo "きちんとしたアクセスです";
}else{
header('Location:http://localhost/php_form/form1.php');
exit();
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>完了画面</title>
</head>
<body>
<p>お問い合わせありがとうございます。</p>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
その後各項目に任意の文字を入力後確認ボタンへを押下
また、そのまま更新ボタンを押下して入力画面に変更されていることを確認するこれでワンタイムチケットを破棄、またリダイレクト処理が実施されていることを確認
以上
Author And Source
この問題について(入力画面に戻る、クロスサイトリクエストフォージェリとは、完了画面作成(ワンタイムチケットの発行、チェック、破棄、リダイレクト処理)), 我々は、より多くの情報をここで見つけました https://qiita.com/jwpks313/items/cf7b38817f2c5feca2b5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .