見出し画像

【 PHP学習 #17 】 セキュリティ 「クリックジャッキング対策」 FIREへの旅路 ♯467

セキュリティの第2段は、「クリックジャンキング」です。


【 クリックジャッキング 】

クリックジャッキングは、ウェブページの利用者に対し悪意をもって使用される技術の一種で、リンクやボタンなどの要素を隠蔽・偽装してクリックを誘い、利用者の意図しない動作をさせようとする手法である。たとえば、別の機能を実行するボタンに見せかけるなどして、埋め込まれたコードを利用者に気づかれないように実行する。

ウィキペディア(Wikipedia)

問い合わせフォームの「送信」ボタンの上に、透明なボタンを設置して、ユーザーがクリックすると、意図しないWEBサイトへリンクされてしまうなどの攻撃が予想されます。


▶︎ 対策

サーバーに書く場合
Header set X-Frame-Options "DENY" 

PHPファイルに書く場合
header('X-FRAME-OPTIONS:DENY')


クリックジャッキングは、IframeというHTMLの機能を使って行われます。

X-FRAME-OPTIONSを含めることで、そのウェブページを他のサイトのページのiframeに呼び出さないようにウェブブラウザに指示することができます。

iframe

iframeは外部サイトのWebページを高さと幅を調整しつつ、自身のサイトに埋め込むことができます。 SNSの使用が盛んになっている近年では活用することが多いタグですが、外部サイトのWebページをサイトに埋め込むため、セキュリティ面も気をつけなくてはなりません。

https://big-mac.jp/column/embed-external-content-iframe-tags/

▶︎ 書き方

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

このコードは、ヘッダー関数と呼ばれます。

ヘッダー関数は、ファイルの一番上(ヘッダー)に書きます。

<?php

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

//スーパーグローバル変数
//if ( !empty( $_POST ) ) {
//
//  echo '<pre>';
//
//  var_dump( $_POST );
//
//  echo '</pre>';
//
//}


function h($str){
	return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}


//入力=0、確認=1、完了=2 
//表示する内容を切り替える条件を設定する

$pageFlag = 0;

if(!empty($_POST['btn_confirm'])){
	$pageFlag = 1;
}

if(!empty($_POST['btn_submit'])){
	$pageFlag = 2;
}


?>

<!DOCTYPE html>
<meta charset="utf-8">
<head>
</head>
<body>
	
	
<!--入力画面-->
<?php if($pageFlag === 0) : ?>
		
<form method="POST" action="input.php">
	氏名
	<input type="text" name="your_name" value="<?php if(!empty($_POST['your_name'])) {echo h($_POST['your_name']);} ?>">
	
	<br>
	
	メールアドレス
	<input type="text" name="email" value="<?php if(!empty($_POST['email'])) {echo h($_POST['email']);} ?>">	
	<br>
	
	<input type="submit" name="btn_confirm" value="確認する">
</form>
	
<?php endif; ?>
	
	
	
	
<!--確認画面-->
<?php if($pageFlag === 1) : ?>
	
<form method="POST" action="input.php">
	氏名
	<?php echo h($_POST['your_name']);?>

	<br>
	
	メールアドレス
	<?php echo h($_POST['email']);?>

	<br>
	
	<!--戻るボタン-->
	<input type="submit" name="back" value="戻る">
	
	<!--送信ボタン-->
	<input type="submit" name="btn_submit" value="送信する">
	<input type="hidden" name="your_name" value="<?php echo h($_POST['your_name']);?>" >
	<input type="hidden" name="email" value="<?php echo h($_POST['email']);?>" >
</form>
	
<?php endif; ?>
	
	
	
	
<!--完了画面-->
<?php if($pageFlag === 2) : ?>
	送信が完了しました
<?php endif; ?>
	
	
	
	
	

</body>
</html>


これだけで完了です!!

【 まとめ 】

クリックジャッキング対策について学びました。

これはもう書き加えると覚えておいた方がいいでしょう!!


この記事が気に入ったらサポートをしてみませんか?