質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1574閲覧

PHPでポストされた配列に対してループを使う処理は安全でしょうか?

mikntjy

総合スコア26

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

3クリップ

投稿2014/11/25 13:12

PHPアプリケーションにおける安全性について、何かと心配です。

今自分のアプリケーションは、フォームデータを取得し、Ajax経由で配列としてPHPスクリプトへそれをサブミットし、そしてこの配列を通じでループするようになっています。

lang

1foreach($_POST['data'] as $key => $value){ 2 //何かしらの処理 3} 4

ですがもし、ハッカーがAjaxリクエストを偽造し、繰り返し100000000000の要素を持つ'フォームデータ'配列をサブミットしてきたらどうなるのでしょうか?ループはそれぞれの要素を通じて繰り返さなければならないでしょうし、おそらくサーバダウンを引き起こすのではないかと思います。

ちゃんと教わったわけではないのでまちがった推測かもしれませんが・・・
この心配を防ぐ方法はあるのでしょうか?
あればぜひ教えてください。よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

max_input_varsで制限できると思います。

http://www.php.net/manual/ja/info.configuration.php#ini.max-input-vars
入力変数 を最大で何個まで受け付けるかを指定します (この制限は、スーパーグローバル $_GET、$_POST そして $_COOKIE にそれぞれ個別に適用されます)。 このディレクティブを使うと、ハッシュの衝突を悪用したサービス不能攻撃を受ける可能性を軽減できます。 このディレクティブで設定した数を超える入力変数があった場合は E_WARNING が発生し、 それ以降の入力変数はリクエストから削除されます。

この制限は実際に、あなたの考えるようなものよりも深刻なDoSアタックを防ぐ為に使われます(本当に数千の配列エレメントを繰り返すのは何ともありません)。すなわち、ハッシュの衝突を悪用した攻撃を防ぎます。(HashDoSとしてよく参照されます)。

投稿2014/11/26 02:30

raou

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bb_tech

2014/11/26 11:41

質問者ではありませんが、非常に参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問