web-dev-qa-db-ja.com

OWASPがファイルのアップロードにPUTよりもPOSTを使用することを推奨するのはなぜですか?

ファイルアップロードに関するOWASPセキュリティの推奨事項 を参照するときに、次の内容を確認しました。

PUT(またはGET!)の代わりにPOSTメソッドを使用してください。)

セキュリティの観点から、ある方法が他の方法よりも優れているとは思いません。誰かがこのアドバイスに光を当てることができますか?

10
Zenklys

TL; DR:PUTは多くのものでサポートされていません。時々それは拡張機能としてのみ利用可能であり、拡張機能を有効にすることはあなたの攻撃面を増加させます。


@iainはコメントで正しいSO質問 PUT vs POST RESTの場合 がここに関連しています。RESTfulnessの観点からPUTは、ファイルの更新や上書きにも適しています。

ただし、セキュリティの観点から議論すると、元のHTMLフォームはPUTをサポートせず、GETとPOSTのみをサポートしました。これに関する多くの情報は ほとんどのWebブラウザーでPUT、DELETE、HEADなどのメソッドを利用できますか? にありますが、一部の情報は古くなっており、一部のリンクは無効になっています。だから私はそれをここに要約します:

HTML

AJAXは、GET、POST、PUT、さらにはDELETEをサポートしています。しかし、ブラウザの一般的なフォームにはありません。 HTML5は、ドラフトバージョンでPUTおよびDELETEのサポートを追加しましたが、PUTもDELETEも HTML5インフラストラクチャの現在の定義 にはありません。つまり、ブラウザは、HTML5に準拠するために<form method="PUT">を理解する義務はありません。

ウェブサーバー

ApacheとNginxはどちらもPUTとDELETEを WebDAV 拡張として使用します。 Webサーバーを強化したい場合、WebDAV拡張なしでコンパイルすることがよくあります。拡張機能を追加すると、攻撃対象が増えます。

一方、私たちのフレームワークはしばしばPUTをサポートしていません。または、より一般的には、同じ関数を使用してPOSTおよびPUTを処理し、PUT動詞の使用をPOSTとまったく同じにします。


だから、そう、OWASPのガイドラインは理にかなっています。 "完全に実装している場合REST PUTを使用し、使用していない場合POSTより広くサポートされています」

6
grochmal

これはリストにあるべきではないと思いますが、これは最善かつRESTfulな方法副作用なしのファイルアップロード*であるため、彼らはこの点を指摘しています。正直なところ、PUTをしている人を見たことがありません。 GETを見たことがありますが、それらは初めてのphpスクリプトのようなものでした。

少しPUTを置いておきましょう。 POSTをGETと比較すると、POSTは、表示されるURLに追加されないため、ユーザーの観点からはより隠されています。

ファイルと一緒に他のデータを送信すると、それを操作できるユーザーに表示される可能性が高くなります。ただし、クライアントの入力を決して信頼してはならないため、これによってセキュリティが低下することはありません。

*:たとえば、ブラウザは長いURI文字列を切り捨てる場合があります

1
Rápli András