[] で終わる名前を持つ入力を含む html フォームを投稿すると、php はこれらの $_POST 値を自動的に配列にします。
たとえば、括弧なし:
<input name="email" value="a" />
var_dump($_POST["email"])
//string 'a' (length=1)
ブラケット付き:
<input name="email[]" value="a" />
<input name="email[]" value="b" />
var_dump($_POST["email"])
//array
// 0 => string 'a' (length=1)
// 1 => string 'b' (length=1)
私の問題は、以前はこれについて知らなかったため、$_POST 変数は常に文字列型であるという前提で Web サイトをコーディングしていたことです。当然、標準入力の検証を実行しますが、変数が既に文字列であることを前提としています。
では、ハッカーが私の通常の入力の 1 つを取得<input name="email" .../>
し、その後に括弧を付けて投稿した場合はどうなるでしょうか。次に、$_POST["email"] をフェッチする私のコードは配列になります!
これがセキュリティ上の問題になる場合があると想像できます。たとえば、startsWith-function は文字列と配列の両方で機能する可能性があります。すべての $_POST 変数が常に文字列であると信頼できるように、関数を完全に無効にしたいだけです。
この機能をグローバルに無効にする方法はありますか、または $_POST のすべてのアクセスの前にすべて検索置換して (文字列) キャストを追加する唯一のオプションですか?