PHP 学び 問い合わせフォームの作成 part4
バリデーションの記述方法
全体コード
【input.php】
今回のバリデーション設定のために新たにvalidation.phpファイルを作成
【validation.php】
【追加(変更)したコード】
requireでvalidation.phpを呼び出せるように設定
if部分を追加し、確認画面に行くには確認ボタンのリクエストかつ、エラーが空だったら遷移できるように設定
エラー文を表示できるように設定。
if文を使い、エラーが入っていて、かつbtn_confirmの中身も入っている場合エラー文を表示できるように設定。
filter_varについて
詳しくはphp公式サイトで確認。PHP: filter_var - Manual
email、ホームページそれぞれの形式があっているかを確認する関数。
emailならFILTER_VALIDATE_EMAIL
ホームページならFILTER_VALIDATE_URL
そして以下のようなページになればOK
何も入力がない状態で確認を押す。
エラー文が表示される(ホームページに関しては空でもOKなのでバリデーションに引っかからない)
今日はバリデーションの記述でした!
PHP 学び 問い合わせフォームの作成 part3
HTML学び
htmlのtextareaにはvalue属性がなく、テキストエリアタグの中に書いたものがvalueになる
htmlのcheckboxのnameの後に「[ ]」をつけておくと、複数のチェック項目がある場合配列として表示できる。
↑はてなブログで[ ]を空白入れずに書くと表示されなかったので空白を入れているが、本来は入れなくてOK。
php学び
お問い合わせフォームの入力画面で、情報として0なら男性、1なら女性とした場合、値としては0か1になり、中身を見た時にすぐには分からない。なので、確認画面ではif文使い、男性、女性という表示をさせる(年齢も同じ要領)。
入力画面のコード
確認画面のコード
確認画面のinputの内容も追加
性別、年齢の表示が数字だけではなく文字表記されていればOK。
最初からラジオボタンや選択項目にチェックを入れておきたい場合
入力画面
性別(input)の場合、valueの後ろにchecked。
年齢(select)の場合、valueの後ろにselected。
下記のようになっていればOK。
↑の応用
入力画面で性別にチェックを入れて確認画面に進み、その後戻るボタンを押して入力画面に戻った際、チェックが入力した時の情報で反映される方法。
入力画面
if文を使い男性か女性かでチェックをどちらに入れるか判定する。
なお、emptyは0もtrueとしてしまうので、isset(空ではない状態ならtrue)をこの場合用いる。
女性でチェックを入れた後、戻るを押して女性のままチェックが残っていればOK
PHP 学び 問い合わせフォームの作成 part2
セキュリティ対策(XSS,クリックジャッキング,CSRF)
・XSS
クロスサイトスクリプティング(XSS)とは、Webサイトの脆弱性を利用し、記述言語であるHTMLに悪質なスクリプトを埋め込む攻撃です。クロスサイトスクリプティングの英語表記「Cross Site Scripting」の略称として「XSS」と表記する場合もあります。
アンケートサイトやサイト内検索、ブログ、掲示板などユーザーからの入力内容をもとにWebページを生成するサイトや、FacebookやTwitterのようなWebアプリケーションはクロスサイトスクリプティングの対象になりやすいです。サイトに設置されたフォームにユーザーが情報を入力・送信する際に、埋められた悪質なHTMLスクリプトが実行され、入力された情報に加えCookie情報なども攻撃者に送られます。
クロスサイトスクリプティング(XSS)とは?わかりやすく解説 | クラウド型WAF 攻撃遮断くん より引用
対策
htmlspecialcharsを使いサニタイズ(消毒)を行う
htmlspecialcharsを設定することで、<>などの文字が変換されるので、JavaScriptなどのコードを無効化することができる。
PHP: htmlspecialchars - Manual より引用
・クリックジャッキング
クリックジャッキングとは、Webブラウザを悪用して、ユーザーに不利益をもたらすセキュリティ上の攻撃手法の一つです。
具体的な特徴としては、ボタンやリンクなどを透明で見えない状態にして、通常のWebページの上にかぶせてしまうというもの。最近はこういった攻撃の一つ一つが巧妙化し、私たちコンピュータの利用者や企業、官公庁などにとって、脅威となっています。
Webブラウザはインターネットの閲覧に必ず使うものであり、利用者は世界中の老若男女となり非常に多くなります。そのため被害が発生した場合の影響が非常に大きいものとなるため、悪意を持つ者にとっては格好の標的となっています。
最も簡単なクリックジャッキングの手法として、下記のようにiframeで表示させたページを透過させるような形で、悪意あるサイトを見えないようにして、クリックさせる手口があります。
このように透明にしたサイトを重ねて表示させて、知らないうちにクリックさせるような手口になります。
具体的にクリックジャッキングに引っかかってしまうと、下記のようなことが起こってしまいます。
- Flashを利用し、Webカメラやマイクを作動させる
- ソーシャル・ネットワーキング・サービスのプロフィールの公開設定を変更させる
- Twitterで誰かをフォローさせる
- Facebookでリンクをシェアさせる
- 悪意あるサイトへのリンクをクリックさせられる
このようなことを起こさせ、マルウェアの感染によって、情報を搾取したりパソコンなどの端末を乗っ取るなどの攻撃を行います。
そのほかにも、例えばウィンドウ無限表示型と呼ばれるブラウザでWebページを開くと、無限にウィンドウが開き続けるものや、CD-ROMアタックのようなCD-ROMドライブの開閉を無限に行わせてハードウェアの損傷を招くもの、JavaScriptループ型のようにJavaScriptを無限ループとして実行させることでCPUやメモリリソースを食いつぶしてパソコンの動作を非常に遅くするものなどがあります。
クリックジャッキングとは?その攻撃の概要と対策方法を解説|サイバーセキュリティ.com から引用
対策
header(X-FRAME-OPTIONS: DENY)を使いサニタイズ(消毒)を行う
PHPファイルに直接記述する方法。
header関数でheader(X-FRAME-OPTIONS: DENY)
を指定してHTTPヘッダーに送る。そうすると重ねて表示することができなくなる。
このようにGoogleChromeなら検証→Network→Headresに表示されていたらOK。
・CSRF(シーサーフ)
CSRF(Cross-Site Request Forgeries、クロスサイトリクエストフォージェリーズ)は、Webシステムを悪用したサイバー攻撃の一種です。
CSRFの手口は、ユーザーが悪意のあるURLにアクセスしてしまった場合に、意図しないリクエストを特定のWebサービスに送られてしまうというものです。Webサイトのリンクやメールに記載されたリンクをクリックして、URLのアドレスにアクセスすることで特定のWebサービスへのリクエストが送られてしまいます。
特定のWebサービスへのリクエストは、Webサービスによって内容は変わるものの、Webサービスの設定変更や値の入力、操作の実行などに繋がります。また、WebサービスがSNSや掲示板の場合には、悪意のあるURLに設定した内容を投稿してしまうことになります。
ユーザーの意図しない情報・リクエストが送信されてしまうためリクエスト強要とも呼ばれます。ユーザー側は何が起きたのか気が付くことはなく、後から被害にあったことに気が付くのもその特徴です。
CSRFによる攻撃では、いくつかのパターンが確認されています。
一つはサービスにログインした状態のユーザーを狙った攻撃です。ログイン中の状態で、悪意あるURLにアクセスしてしまうと、サービスに対して任意の操作のリクエストを行うことができる場合があります。
例えばオンラインバンキングのサービスにログインした状態で、送金の操作を行うCSRFが行われ、それがサービス側で受理されてしまうことを想定するとその恐ろしさが分かります。
サービスにおける設定の変更(例えばパスワードの変更)のリクエストを行わせ、そこから攻撃を拡げるパターンも起き得るでしょう。
また、別の形のCSRFを利用した攻撃として、ユーザーの意図しない情報発信を行わせるものもあります。SNSや掲示板などに対するリクエストをCSRFにより行われることで、ユーザーの意図しない投稿が行われてしまいます。投稿の内容が問題のあるものであれば、ユーザーの被害に直結してしまいます。上記のログイン状態とも組み合わせて利用されることが想定されます。
CSRFの恐ろしいところは、リクエストを強要させられてしまうことです。サイバー犯罪者は、ユーザーのログインしている状態やサービスを利用しているかどうかの有無を区別せず、広い範囲で罠を作って置きます。複数の種類のオンラインサービスに対しての罠を作っておくことで、被害に遭うユーザーを拡げる手口がとられています。
また、罠が設置してあるWebページへの誘導では、不安を煽るような文言や言葉巧みな文章が利用されます。ユーザーを騙し、心理的不安にさせることで、リクエスト強要に誘導する傾向が見られます。
CSRF(クロスサイトリクエストフォージェリーズ)とは?被害と対策も | セキュリティ対策 | CyberSecurityTIMES から引用
対策
本来の正しいページからの情報なのかを見分けてから処理をする。
$_SESSIONを使った合言葉(トークン)のやり取りをする
合言葉の設定はrandom_bytesを使う(PHP: random_bytes - Manual 参照)
random_bytes — 暗号学的にセキュアな、ランダムなバイト列を生成する
関数の設定
入力画面の設定
確認画面の設定
送信完了画面
問い合わせフォーム全コード
ただ作って終わりじゃなくてその後のリスクのことも考えて作るのが大切ですね。
PHP 学び 問い合わせフォームの作成 part1
備忘録として残します。
今回はPHPを使った問い合わせフォームを作りました。
コメントアウトでメモ代わりにしているところもあり読みづらいですが、
入力画面、確認画面、送信完了画面それぞれが出るようになっています。
実際の画面遷移
【入力画面】
【確認画面】
【送信完了画面】
【戻るを押した場合も入力データが残るように設定】
valueにデータを表示するように記述
まだまだ初歩ですが今後も頑張っていきます!
ITエンジニア向け ショートカットキー
ITエンジニア向け 使えるショートカットキー
こちらの動画のショートカットキーまとめさせてもらいました!
プログラミング始めるなら必須のショートカットキー72選 #エンジニア #VSCode - YouTube
普段マウス操作が多かったけどこんなに便利だったとは...。
備忘録として残そうと思います。
ショートカットキー一覧 |
||
No. |
全ソフトウェア共通 |
|
1 |
コピー |
(Mac) command + C (Win) ctrl + C |
2 |
ペースト |
(Mac) command + Ⅴ (Win) ctrl + V |
3 |
切り取り |
(Mac) command + X (Win) ctrl + X |
4 |
全選択 |
(Mac) command + A (Win) ctrl + A |
5 |
新規ファイル |
(Mac) command + N (Win) ctrl + N |
6 |
保存 |
(Mac) command + S (Win) ctrl + S |
7 |
名前を付けて保存 |
(Mac) command + shift + S (Win) ctrl + shift + S |
8 |
ファイルを開く |
(Mac) command + O (Win) ctrl + O |
9 |
新規ウィンドウ |
(Mac) command + shift + N (Win) ctrl + shift + N |
10 |
アプリケーションを切り替え |
(Mac) command + Tab (Win) ctrl + Tab |
11 |
アプリケーションを閉じる |
(Mac) command + Q (Win) alt + F4 |
12 |
Spotlight/ファイル名を指定して実行 |
(Mac) command + space (Win) windowsキー + R |
13 |
言語入力の切り替え |
(Mac) ctrl + space (Win) windowsキー + space |
14 |
文字を大きくする |
(Mac) command + “+” (Win) ctrl + “+” |
15 |
文字を小さくする |
(Mac) command + “-” (Win) ctrl + “-” |
16 |
行の先頭に移動 |
(Mac) command + ← (Win) home |
17 |
行の後尾に移動 |
(Mac) command + → (Win) end |
18 |
ページの最前列へ移動 |
(Mac) command + ↑ (Win) pg + up |
19 |
ページの最後尾へ移動 |
(Mac) command + ↓ (Win) pg + down |
20 |
単語の先頭へ移動 |
(Mac) option + ← (Win) ctrl + ← |
21 |
単語の後尾へ移動 |
(Mac) option + → (Win) ctrl + → |
22 |
選択 |
(Mac) shift + ↑/↓/←/→ (Win) shift + ↑/↓/←/→ |
23 |
行を選択 |
(Mac) command + shift + ↑/↓/←/→ (Win) ctrl + home or shift + end |
24 |
単語を選択 |
(Mac) option + shift + ←/→ (Win) ctrl + shift + ←/→ |
25 |
単語を選択(マウス動作) |
(Mac) ダブルクリック (Win) ダブルクリック |
26 |
1つ前の状態に戻す |
(Mac) command + Z (Win) ctrl + Z |
27 |
1つ後の状態に戻す |
(Mac) command + shift + Z (Win) ctrl + shift + Z |
28 |
キャンセル |
(Mac) esc (Win) esc |
29 |
ファイル名の変更 |
(Mac) Enter (Win) Fn + F2 |
30 |
フォーカス(進む) ※フォームの入力欄で次にいきたいときなど |
(Mac) Tab (Win) Tab |
31 |
チェック ※チェックボックスにチェックを入れるとき |
(Mac) space (Win) space |
32 |
フォーカス(戻る) ※フォームの入力欄で前に戻りたいときなど |
(Mac) Tab + shift (Win) Tab + shift |
33 |
ページ内検索 |
(Mac) command + F (Win) ctrl + F |
34 |
ページ内検索でフォーカス(進む) |
(Mac) command + F → Enter (Win) ctrl + F → Enter |
35 |
ページ内検索でフォーカス(戻る) |
(Mac) command + F → shift + Enter (Win) ctrl + F → shift + Enter |
36 |
ダウンロードページを開く |
(Mac) command + shift + j (Win) ctrl + j |
37 |
履歴ページを開く |
(Mac) command + Y (Win) ctrl + H |
38 |
設定画面 |
(Mac) command + , (Win) ctrl + , |
39 |
新規タブ |
(Mac) command + T (Win) ctrl + T |
40 |
タブを閉じる |
(Mac) command + W (Win) ctrl + W |
41 |
タブの切り替え(戻る) |
(Mac) command + shift + Tab (Win) ctrl + shift + Tab |
42 |
タブの切り替え(進む) |
(Mac) ctrl + Tab (Win) ctrl + Tab |
43 |
リロード |
(Mac) command + R (Win) F5/ ctrl + R |
44 |
スーパーリロード |
(Mac) command + shift + R (Win) ctrl + F5 |
45 |
プリントアウト |
(Mac) command + P (Win) ctrl + P |
46 |
ウィンドウを最小化する |
(Mac) command + M (Win) alt + space → N |
47 |
ウィンドウを最大化する |
(Mac) なし (Win) alt + space → X |
48 |
不可視ファイルを表示 ※Winの場合の操作方法↓ (https://pc-karuma.net/windows-10-show-hidden-files-folders/) |
(Mac) command + shift + . (Win) なし |
49 |
スクリーンショットの撮影 |
(Mac) command + shift + 3/4/5 (Win) windowsキー + shift + S |
VSコードで使えるショートカットキー |
||
50 |
インデント(追加) |
(Mac) Tab (Win) Tab |
51 |
インデント(戻す) |
(Mac) Tab + shift (Win) Tab + shift |
52 |
コメントアウト/解除 |
(Mac) command + / (Win) ctrl + / |
53 |
複数選択1 |
(Mac) option + click(ドラッグ) (Win) alt + click(ドラッグ) |
54 |
複数選択2 |
(Mac) command + D (Win) ctrl + D |
55 |
複数選択スキップ |
(Mac) command + K (Win) ctrl + K |
56 |
サイドバーの切り替え |
(Mac) command + B (Win) ctrl + B |
57 |
クイックオープン(今開いているファイル内の検索) |
(Mac) command + P (Win) ctrl + P |
58 |
コマンドパレット |
(Mac) command + shift + P (Win) ctrl + shift + P |
59 |
ファイル内検索 |
(Mac) command + F (Win) ctrl + F |
60 |
ファイル検索 |
(Mac) command + shift + F (Win) ctrl + shift + F |
61 |
プロジェクト内置換 |
(Mac) command + shift + H (Win) ctrl + shift + H |
62 |
フォーマット整形 |
(Mac) shift + option + F (Win) shift + alt + F |
63 |
(Mac) command + J (Win) ctrl + J |
|
64 |
別タブで開く |
(Mac) command + ダブルclick (Win) ctrl + ダブルclick |
コマンドラインで使えるショートカットキー |
||
65 |
過去のコマンドを呼び出し |
(Mac) ↑/↓ (Win) ↑/↓ |
66 |
先頭に移動 |
(Mac) ctrl + A (Win) ctrl + A |
67 |
末尾に移動 |
(Mac) ctrl + E (Win) ctrl + E |
68 |
行を削除 |
(Mac) ctrl + U (Win) ctrl + U |
69 |
ログのクリア |
(Mac) ctrl + I (Win) Alt + F7 |
70 |
管理者権限 |
(Mac) sudo + 任意のコマンド (Win) 管理者権限で開く ctrl + shift + Enter |
71 |
パスをコピー |
(Mac) 任意のファイル/ディレクトリをドラッグ&ドロップ (Win) なし 代わりに以下の操作で近いことができる 任意のファイル/ディレクトリをshiftキー + 右クリック → パスのコピー |
72 |
キャンセル |
(Mac) ctrl + C (Win) ctrl + C |