web-dev-qa-db-ja.com

なぜPOSTはブラックホールを引き起こすのでしょうか?

CakePHPを使用してアプリを開発していますが、奇妙な問題が発生しました。特定のメソッドにPOSTデータを送信すると、アクセスログに0バイトの応答と単純な404エラーが表示されます。

psycho953.psych.susx.ac.uk - - [11/Oct/2011:10:17:43 +0100] "GET /research/ssd/aesthetics/participants/add HTTP/1.1" 200 3255 "-" "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
psycho953.psych.susx.ac.uk - - [11/Oct/2011:10:17:44 +0100] "POST /research/ssd/aesthetics/participants/add HTTP/1.1" 404 - "http://webvm.psych.sussex.ac.uk/research/ssd/aesthetics/participants/add" "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"

他のフォームへのPOSTは、CakePHPを使用しているか、通常のPHPを使用しているかに関係なく、機能します。

0バイトの応答を超えて作業する方法がわかりません。私の質問は、「なぜこれが機能しないのか」ということではありません。 「何が機能していないのかをどうやって見つけることができますか?」

記録として、php.iniはエラーを表示するように設定されており、構文エラーなどに対しては表示に成功します。

2
Tom Wright

OK、問題はエラーが原因でしたが、エラーが何であるかはわかりませんでした。私はこれを試行錯誤と(ahem)エラーによってのみ解決しましたが、これをより系統的に行う方法を知りたいと思います。

興味のある人にとっては、問題はCakeが期待していたフィールドの欠落と関係がありました。他の場所からのデータが事前に入力されている入力フィールドを無効にしました。入力を無効にすると、値の送信が停止することに気づきませんでした。私の回避策は、隠しフィールドを含めることです。

繰り返しになりますが、なぜこれらのエラーが表示されなかったのかわかりません。また、アクセスログの404が唯一の手がかりだった理由もわかりません。誰かがこの理由を提案したい場合に備えて、この質問には数日間答えないでおきます。


PDATE:これはCakePHPのセキュリティ「機能」であることがわかりました。私のフォームには無効な入力がありました。これは、Cakeがフォームとともに渡すフィールド名のハッシュが、返されるものと一致しなかったことを意味します(無効な入力はPOSTEDされません)。

3
Tom Wright