値が入っているかチェック(パラメータ改ざんチェック)...
そうなると動画内では以下のような処理を書く必要があるということですよね。
if(!is_int((int)$currentPageNum) ){
しかしやはり同様な疑問なのですが、
intにキャストしてしまえばこのチェックの意味は無くなってしまうのではと思います。試しにulrのパラメータをいろいろな文字に変更してみましたが、intにキャストしているためチェックは通りません。
そこで,以下のように正規表現を使って書き換えてみたところ、数字や数値の形であれば問題なく、その他であればチェックに引っかかってくれます。
if(!preg_match('/^[0-9]+$/',$currentPageNum)){
もし考え方に間違いや不備などございましたらご指摘いただけたらと思います。
if(!is_int($currentPageNum) ){
となっており、int型にキャストはしていません。
よってint型以外が渡ってくると、エラー処理に入るようになっています。
ご提示された以下の処理でも問題はないですが、可読性を考えるとis_intを使用した処理を使用している場合が多いです。
if(!preg_match('/^[0-9]+$/',$currentPageNum)){
「誤;int型にキャストしたままで大丈夫です 」
と表示があったので意味を捉え間違えていたようです。
可読性のことも教えていただきありがとうございました。
勉強になりました。
部活の学習一覧
Lesson 01
「WEBサービスと必要な機能」
Lesson 02
「画面を設計しよう!」
Lesson 03
「テーブルを設計しよう!part1」
Lesson 04
「テーブルを設計しよう!part2」
Lesson 05
「テーブルを設計しよう!part3」
Lesson 06
「DB作成」
Lesson 07
「画面を作ろう!」
Lesson 08
「画面を作ろう!part2」
Lesson 09
「ユーザー登録機能を作ろう!」
Lesson 10
「ユーザー登録機能を作ろう!part2」
コーヒーブレイク
「投資の小話」
Lesson 11
「ログイン機能を作ろう!」
Lesson 12
「ログアウト機能を作ろう!」
Lesson 13
「退会機能を作ろう!」
Lesson 14
「プロフィール編集機能を作ろう!」
コーヒーブレイク
「書いて書いて書きまくれ!」
Lesson 15
「パスワード変更機能を作ろう!」
Lesson 16
「パスワードリマインダー機能を作ろう!」
Lesson 17
「商品登録機能を作ろう!」
Lesson 18
「商品登録機能を作ろう!part2」
Lesson 19
「商品登録機能を作ろう!part3」
Lesson 20
「商品一覧表示機能を作ろう!」
Lesson 21
「商品詳細画面を作ろう!」
Lesson 22
「商品検索機能を作ろう!」
Lesson 23
「連絡掲示板機能を作ろう!」
Lesson 24
「お気に入り機能を作ろう!」
Lesson 25
「マイページ機能を作ろう!」
コーヒーブレイク
「はたらくプログラミング 第5話」
ご意見箱
今回、26行目で
if(!is_int($currentPageNum)){
error_log('エラー発生:指定ページに不正な値が入りました');
header("Location:index.php"); //トップページへ
}
とありますが、今回GETパラメータはc_idとsortだけで、pは付与されていないため、$currentPageNumはint型の1が必ず入るようになるかと思います。
パラメータ改ざんとは、url部分をユーザー側がいじったりした際に必要になってくると認識しているのですが、そうであればこの処理は意味がないのではと考えました。
ここまでの認識が間違っていないのであれば、続けて以下の質問をさせてください。
①このページでパラメータ改ざんチェックを必要とするのなら、$categoryと$sortの中身をチェックするようになるのかと考え以下のように変更しました。
if(!is_int((int)$category) || !is_int((int)$sort) ){
error_log('エラー発生:指定ページに不正な値が入りました');
header("Location:index.php"); //トップページへ
}
通常の場合でも変数の値がstring型なのでintにキャストした上で、is_intで整数チェックかどうかを行うのは分かるのですが、
これで不正な値を入れられた時にもintにキャストしてしまえば引っかからないので意味がない気がするのですが、これ以上に方法が思いつきません。
②そもそも今回のパラメータの改ざんチェックに必要性があるのかもいまいち分からずにいます。
なぜなら、商品(<div class="panel-list">)をforeachで作成していく際に、$dbProductDataの中身を取り出していますが、getProductList関数で、DBの値と照合しています。
DBになければ、catchに入りエラーになるので、パラメータをおかしな値に改ざんされても十分なのかと思ってしまいます。
他の方の質問に目を通したり、GETパラメータ改ざんによる攻撃の種類などについても自分なりに調べるなどして考えたのですが、不十分な気がしてならないのでご教授いただけたらと思います。