LESSON 02 / 03 約5分
受け取った文章を、確かめる
まずは仕組みをつかもう。細かい書き方は覚えなくて大丈夫。
01 これは何?
フォームの値は、PHPで受け取って確かめます。GET*1はURLに条件を載せる方法、POST*2は本文として情報を送る方法です。受け取った文字をHTMLに出すときは、XSS*3を防ぐため文字として安全に表示します。
*1 GET:検索条件などを付けて情報を取りに行く方法。
*2 POST:投稿内容などを送る方法。暗号化を保証するものではありません。
*3 XSS:入力した内容を通じて、不正なプログラムを画面で動かす攻撃。
02 なぜ必要?
空の投稿や予想外の値をそのまま保存すると、不具合の原因になります。この例は受け取った文字を確認して表示する部分だけです。実際に保存する処理には、ログイン確認とCSRF*4対策も組み合わせます。
*4 CSRF:別のサイトなどから、本人が意図しない操作をさせる攻撃。
03 最小限のコード・図
<?php
// 学習用の確認表示です。保存はしません。
$message = $_POST['message'] ?? '';
if (!is_string($message) || trim($message) === ''
|| mb_strlen($message) > 280) {
http_response_code(422);
exit('1〜280文字で入力してください');
}
echo htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
04 ここだけ理解する
- 値があるかだけでなく、型・空白・長さも確認する。
- htmlspecialcharsでHTMLとして解釈される文字を変換する。
- 実際の保存には、本人確認と不正な送信への対策を追加する。
05 覚えなくていいこと
安全対策のコードの暗記は不要ですが、対策を省いてよいという意味ではありません。mb_strlenを使うにはmbstring機能が必要です。
ASK AI
06 AIに聞いてみよう
質問文をコピーして、ChatGPTやCodexなどに貼り付けてみましょう。
PHPでPOSTされた投稿本文を確認する処理を作ってください。文字列か、空白だけでないか、280文字以内かをサーバーで確認し、HTML出力はhtmlspecialcharsを使ってください。保存処理を付ける場合に必要なログイン確認とCSRFトークンの検証も説明してください。
07 AIの回答を見るポイント
- HTMLのrequiredだけに頼らず、PHPでも確かめるか。
- 入力された文章を、そのままHTMLへ出力していないか。
08 だいたい分かったら、次へ
「理解できた」はいつでも取り消せます。記録せずに次へ進んでも大丈夫です。
