ファイルアップロードに関するOWASPセキュリティの推奨事項 を参照するときに、次の内容を確認しました。
PUT(またはGET!)の代わりにPOSTメソッドを使用してください。)
セキュリティの観点から、ある方法が他の方法よりも優れているとは思いません。誰かがこのアドバイスに光を当てることができますか?
TL; DR:PUTは多くのものでサポートされていません。時々それは拡張機能としてのみ利用可能であり、拡張機能を有効にすることはあなたの攻撃面を増加させます。
@iainはコメントで正しいSO質問 PUT vs POST RESTの場合 がここに関連しています。RESTfulnessの観点からPUTは、ファイルの更新や上書きにも適しています。
ただし、セキュリティの観点から議論すると、元のHTMLフォームはPUTをサポートせず、GETとPOSTのみをサポートしました。これに関する多くの情報は ほとんどのWebブラウザーでPUT、DELETE、HEADなどのメソッドを利用できますか? にありますが、一部の情報は古くなっており、一部のリンクは無効になっています。だから私はそれをここに要約します:
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より広くサポートされています」。
これはリストにあるべきではないと思いますが、これは最善かつRESTfulな方法副作用なしのファイルアップロード*であるため、彼らはこの点を指摘しています。正直なところ、PUTをしている人を見たことがありません。 GETを見たことがありますが、それらは初めてのphpスクリプトのようなものでした。
少しPUTを置いておきましょう。 POSTをGETと比較すると、POSTは、表示されるURLに追加されないため、ユーザーの観点からはより隠されています。
ファイルと一緒に他のデータを送信すると、それを操作できるユーザーに表示される可能性が高くなります。ただし、クライアントの入力を決して信頼してはならないため、これによってセキュリティが低下することはありません。
*:たとえば、ブラウザは長いURI文字列を切り捨てる場合があります