こんにちは。サイオステクノロジーの川田です。
PHPを始めてみよう!触ってみよう!と考えている方向けへのPHP超入門をお届けしております。
今回は第6回になります。
アジェンダ
-
-
- 環境構築 – Visual Studio Code × Docker –
- 文字列の出力 – Hello World! –
- 条件分岐 – if文・switch文 –
- 繰り返し処理 – while文・for文・foreach文 –
- 関数 – function –
- イマココ☞ HTTP/HTTPS – GET・POST –
-
使用するツールはこちらです。
環境の詳細についてはアジェンダの「1.環境構築」へ(/・ω・)/
-
Visual Studio Code
拡張機能:Remote Development - Docker
HTTPについて
HTTPとはHyperText Transfer Protocolの略です。
ブラウザにURLを入力すると表示したいWebページが表示されますよね。
HTTPとはWebページを表示する際に使う通信プロトコルです。
アドレスバーに「https://…」はHTTP通信していることになります。
HTTPSについて
HTTPSとはHyperText Transfer Protocol Secureの略です。
HTTPリクエストやレスポンスの内容が暗号化されます。
HTTPに「S」がつきました。そうです。Secureの「S」です。
Secureを調べてみると「安全」と出てきます。HTTPに比べてセキュアな通信というわけですね。
具体的にHTTPとHTTPSの違いはなにか!?見ていきましょう。
HTPPとHTTPSの違い
違いは通信が暗号化されているかということになります。
SSLが導入されているサイトは送信データが暗号化され、ブラウザに「鍵マーク」が表示されます。
HTTPSは安全なの?
「暗号化されているなら安全じゃん!」と思いますよね?
HTTPよりは安全というだけで、100%安全というわけではありません。
どういうことなのか!!!
もしあなたがアクセスしたWebサイトが偽物だったら、、、、、、?
よくニュースで詐欺サイトという単語を耳にしたことはありませんか?
②「カード情報を確認しよう」とURLをクリックします。
③偽サイトと気づかず、IDとPasswordを入力してログインをしてしまいます。
④ログイン情報が盗まれてしまいました><
「えー騙されるかな?」と思うかもしれません。
例えば本物のURL「https://www.xxxx.com/」
偽物は「https://www.xxxx-xyz.com/」
偽物には「xyz」がついています。本物のURLと微妙に違うこと多いので注意が必要です!
またWebサイトも本物そっくりに作られています。
未納料金の請求やアカウントロックなどについてメールが来ると焦って確認しようと思いますよね><
まずは本物かどうかURLをしっかり確認することが大事ですね!
話が逸れてしまいました。以上がHTTPやHTTPSの簡単な説明でした。
GETとPOSTについて
Webサイトからの要求には「GET」と「POST」というメソッドがあります。
用途によってGETやPOSTを使い分ける必要があります。
この2つを説明していきます。
GET
今皆さんがWebサイトを閲覧するとき、検索するときもGetを利用してサーバーにリクエスト送信しています。
Google検索もGetを用いられています。
送信データはURLの最後に「?[パラメーター名]=値」と記述します。
値が複数ある場合は「&」で繋げることができます。
例:/xxx.php?[パラメーター名1]=値1&[パラメーター名2]=値2
Getを扱う際に注意点があります。
- 他人がURLを見ると送信データが丸見え
例えばパラメーターにパスワードを指定した場合、情報が丸見えになってしまいます。
例:/xxx.php?password=123456
重要な情報はPOST送信にしましょう。
- urldecode() 関数を介して渡される
引数のエンコード文字「 %##」 をデコードします。 (プラス記号 (‘+’) は、スペース文字にデコードします。)
GET送信してみよう!
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>入力フォーム</title> </head> <body> <h1>入力フォーム</h1> <form action="/index.php" method="get"> <p>お名前:<input type="text" name="name"></p> <p>メールアドレス:<input type="text" name="mail"></p> <input type="submit"> </form> </body> </html>
methodをgetにするとGET送信になります。
- indexphp
<?php var_dump(htmlspecialchars($_GET['name']));
データを受け取る場合はスーパーグローバル変数「☞$_GET」を使います。
XSS対策のためhtmlspecialcharsを使用しています。XSSについて分からない方は☞こちらをクリック
では入力フォームに入力してみます。
名前:山田太郎
メールアドレス:xxxxxxxx.com
「送信」ボタンをクリックします。
nameの値が出力され、URLが&繋ぎで表示されていることがわかります。
https://localhost:8080/index.php?name=山田太郎&mail=xxxxxxxx.com
URLを直接叩いても画面は同じ出力結果になります。
POST
- パラメータが見えづらい
わざと調べない限りパラメータの内容は見えません。
- 文字数制限がない
文字数制限を気にせず使用することができます。
GETはブラウザによって変わりますが、使える文字数が制限されております。
全部POSTではだめなの?
「だったら全部POSTでも良いのでは!?」と思う方もいると思います。
例えば「https://wwww.xxxx.com/archives/id=2333」という記事のIDをパラメータとして渡しています。
GETで受け取っているため「id=2333」の記事IDを直接表示できますし、複数人に共有することもできます。
これがPOSTになったらどうでしょう?
ページトップにいって、一から記事を探さなくてはなりません。
それってすごーーーくめんどくさくないですか?
記事をブックマークや共有できるのもGETのおかげということですね。
どういうときにPOSTを使うのか、GETを使うのか使い分けはとても重要です!
POST送信してみよう!
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>入力フォーム</title> </head> <body> <h1>入力フォーム</h1> <form action="/index.php" method="post"> <p>お名前:<input type="text" name="name"></p> <p>メールアドレス:<input type="text" name="mail"></p> <input type="submit"> </form> </body> </html>
9行目のmethodをget⇒postに修正しただけです。
- indexphp
<?php var_dump(htmlspecialchars($_POST['name']));
データを受け取る場合はスーパーグローバル変数「☞$_POST」を使います。
では先ほどと同様入力フォームに入力してみます。
名前:山田太郎
メールアドレス:xxxxxxxx.com
「送信」ボタンをクリックします。
GETとの違い分かりましたか?
出力内容は変わりませんが、URLに注目です!パラメータがついていませんよね。
文字数が多いような項目、画像データや重要な情報はPOSTが適しています。
まとめ
今回はHTTPとHTTPSの違いやGET、POST送信についてご説明しました。