ハンドルネーム設定/解除の添削
noteにて筆をとるのは初めてになります。
ひさきさんに、パソコン知識や、プログラム勉強や、ゲーム作成を週1回くらいの頻度でお話させて頂いているKKです。
自己紹介(KK)
今年44歳になるベテランのシステムエンジニアです。ゲーム会社勤務しております。20歳からPG/SEとして働いていますので、23年間この世界に従事していることになります。あと、私はWEBサービスの作成は本業ではないので、間違った知識、古い知識が書かれていることがあれば、ご指摘くださるとありがたいです。
「ハンドルネーム設定/解除」の総評
ひさきさんが執筆した PHPでゲーム作成|ハンドルネーム設定/解除 では、今後に期待のできる完成度のプログラムができまして、この先が楽しみです。特にびっくりしたのは高い完成度のHTMLコーディングできていたことですね。レスポンシブを覚えたらとても強くなりそうです。
「ハンドルネーム設定/解除」の添削
添削とは「削ったり、加筆したりして、より良くすること」だそうです。
今回のプログラムを「より良くする」のは、
現コードの効率化(プログラムソースや、変数=メモリ関連など)
再利用できるようにする(関数化、クラス化)
PHPとHTMLとCSSを別ファイルにわける(担当の細分化時などに便利)
バグ解消
脆弱性対応(セキュリティ関連)
になるかなと思います。これくらいちゃんとやっておけば、クライアントに怒られることもなく、そこそこちゃんと報酬もらえるレベルにはなっていると思います。
添削の詳細内容
現コードの効率化
まず、Cookieの名前などが、各ファイルに点在しているのは良くないので、統一したいですね。もし名前を変更したいときに、常に3個とか4個とかのファイルを修正することになり、効率が悪いからです。
init.php というファイルを1つ作成して、その中に名称や自作関数などを入れるようにしましょう。このファイル内で、画面上に表示する文言も全部管理すれば、日本語版|英語版などで展開をする際に便利なのですが、今回はそこまでするほうが作業コストが高くなりそうなので、「ページ名」くらいの管理としましょう。
再利用できるようにする
今回はCookieを少し使っているだけですが、Cookieのセッターとゲッターを作っておきましょうか。
PHPとHTMLとCSSの分割
今は「name_input.php」だけに適用されている素敵なデザインを、ほかのページにも楽に適用できる形にしたいですね。init.phpに、サイトヘッダーとサイトフッターのゲッターを作りましょう。
バグ解消
バグってほどじゃないですが、Cookieの値がない時に警告が出ているようなので、それが出ないようにCookieのゲッターに入れておきましょう。あとはjavascriptで、入力画面の送信時に、空文字だった場合にエラーを出しておきましょうか。javascriptをOFFにされていたりして動作していない場合を想定して、完了画面でも同様のチェックを入れましょう。あとはすでにCookieに値がある場合は、入力画面のハンドルネームのテキストボックスに初期値として表示するようにしましょう。
脆弱性対応
とりあえず、XSS(クロスサイトスクリプティング)対応をしましょう。XSS対応とは、ユーザーが入力した文字が原因で、サイトデータが壊れたり、サイトを表示する人を攻撃できる脆弱性です。ハンドルネームの内容を表示する際の対応が必要となります。
ハンドルネームも最大文字数を決めちゃいましょうか。16文字くらいにしておきましょうか。
フォーム情報でハンドルネームだけ送信できる状態のままだと、ほかの偽物フォームを作成されてハンドルネームを送信されても上書きされてしまうので、入力画面のフォームにトークンを仕込んで、送信後にトークンが一致した場合のみCookieを更新するようにしておきましょう。これでF5攻撃などの対応にも有効です。
今回の場合、Cookieにデータを保存するだけなので「なりすまし」を防ぐことは難しいので、やめときましょう。
SQLインジェクションも、ディレクトリリバーサルもないだろうし、こんなもんでしょう。
修正プログラムの掲載
プログラムソースを掲載しますが。このプログラムソースを有料コンテンツとさせて頂きます。
ひさきさんの活動の応援したい!
そこそこちゃんとしたプログラムソースに興味がある
所詮ゲームエンジニアの書いたPHPなんて穴だらけだから指摘してやろう
という方は、ぜひ購入してください。
全部で6ファイルになりますが、すべて同じ階層に設置して下さい。動作環境としては、PHP7以上だなら動くと思います。あとはPHPのショートタグもONにしているので、ご容赦ください。(ショートタグ好きなんです)
ここから先は
¥ 500
この記事が気に入ったらサポートをしてみませんか?