![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.3ベストアンサー
- 回答日時:
配列で不正なパラメータが送信された場合に想定外の処理が行われてしまう例
http://www.hackerschool.jp/hack/take46.php
(上記の問題はPOSTを使っていますが、FirefoxのLiveHTTPHeaders等のアドオンを利用することにより突破できます)
もちろんこんなコードを書くことは稀ですが、エラーログを保存するようにしている場合、このパラメータの送信を繰り返すだけで大量にエラーログ領域を圧迫する攻撃も成立してしまいますね。
この回答へのお礼
お礼日時:2013/12/14 22:36
回答ありがとうございます
突破できませんでしたorz
ですが、突破できてるひともいるようなので配列ははじくことにします
ありがとうございました
No.2
- 回答日時:
NULLと未定義の違い
http://qiita.com/mpyw/items/0a4ea0bc9a695da33f0c
今回のケースでは3項演算子を使って
$id = isset($_POST['id']) ? $_POST['id'] : '';
とするのがスマートでしょう。空文字列をNULLに変更しても問題ありませんので、より自然な挙動になる方をチョイスしてください。個人的には「echo $id;」のようにする場合は型変換が起こるのは避けたいと感じるので、空文字列の方がオススメですが。
なお、今回はPOSTなのでそれほど気にしなくてもいいですが、GETの場合は簡単にクエリを配列にすることが出来ます。そのようなケースを想定するならば
$id = isset($_GET['id']) && is_string($_GET['id']) ? $_GET['id'] : '';
として、「文字列」ではないもの、つまり「配列」として受け取ったものは受け取っていないとみなすのが正解です。もちろんPOSTでもFirefoxのアドオンを使えば容易に可能なので、POSTの場合にも行っておくのが最善ではありますが。
こういった作業を変数1つ1つに対して行うのがすごく面倒なので、少しでも楽にするために汎用的な関数を利用するという手もあります。私は高頻度で下記の関数を利用していますね。
filter_struct_utf8
http://qiita.com/mpyw/items/c39b9ee695a5c2e74627
・未定義時の初期化文字列またはNULL値の設定が可能
・(上記を利用しない場合) 自動トリミングフラグの設定が可能
・(上記を利用しない場合) 任意の「1次元」配列を許可するように設定可能
・定義する配列構造のネストに対応
・UTF-8として不正な文字列は未定義と見なす
といったように結構汎用性が高くて使いまわしが利きます。
この回答へのお礼
お礼日時:2013/12/14 10:59
回答ありがとうございます
getで変数で受け取りたいのに配列で不正にgetされた場合どんな不具合がおこるのでしょうか?
不正者のねらいがわかりません
No.1
- 回答日時:
>何も中身がない$idがechoのところで出現してもエラーにならないのですか?
undefined variables が表示されるかどうかは環境次第です。現行のxamppではエラーメッセージを吐きますが、レンタルサーバなどでは表示しないバージョンが多いかもしれません。
提示されたソースには意味がありません。これだとエラーの種類が変わっただけですね(直接 $_POST['id'] を使えば undefined index になる)。
普通は
if (!isset($_POST['id'])) { die('id not posted'); }
のように自前でエラー処理するか、三項演算子を使って
$id = isset($_POST['id]) ? $_POST['id'] : "";
として、$_POST['id']が存在しないときの初期値を与えます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP preg_matchで Warning: Undefined variableが出ます 1 2022/11/15 17:06
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
PHPの記述で値が取れません。
-
PHPでMysqlにデータがあるかど...
-
phpでcookieがうまく保存されない
-
入力した部分を表示させたまま...
-
phpにおいて$xを計算式の文字列...
-
<span>を<div>に変更すると S...
-
ini_set("display_errors", On)...
-
index.phpって何ですか? 具体...
-
メールフォームのタイトルが文...
-
PHPのセッション有効期限について
-
php 完了画面の送信メールのコ...
-
in_arrayについて教えて下さい。
-
PHPで今日の日付から3日後を表...
-
PHP & MySQL: Server-side Web ...
-
$funcって何ですか?
-
1 OR 1=1 は どんな論理(約束事...
-
TeraPadの操作方法について
-
最後の段階で詰まっています。R...
-
ゆゆにゃ。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASPでの引数の配列渡しについて
-
最後のボタンだけツールチップ...
-
Smartyの[]内に[]を使いたいです。
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
Accessで今日から5日後
-
UPDATEで既存のレコードに文字...
-
truncate tableを使って複数の...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
-
既存データをINSERT文にして出...
-
PostgreSQLのtimestamp型で時間...
-
エラーを起こす方法
-
SQLで、Join句で結合したテ...
-
絶対参照と相対参照の違いを教...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
SELECTした結果に行番号を求めたい
おすすめ情報