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 だいたい分かったら、次へ

「理解できた」はいつでも取り消せます。記録せずに次へ進んでも大丈夫です。