web-dev-qa-db-ja.com

ユーザー入力がホスト名に追加されたときのSSRF

これと同様の方法で、アプリケーションのバックエンドがユーザー入力にある程度基づいたURLをフェッチする場合、SSRFの脆弱性と見なされますか(またはまったく危険ですか)?

get("https://thehostname.com/a-directory/" + userinput)

したがって、ホスト名はユーザー入力の前にハードコーディングされているため、内部ネットワークなどをスキャンすることはできませんよね?

https://thehostname.com/*にオープンリダイレクトの脆弱性がなければ、それを使って何かをやってのける方法がわかりません。

編集:私がこの質問をしている特定のシナリオでは、サーバーはtrue/false/errorでのみ応答し、http応答のコンテンツタイプがpdfであるかどうか、または失敗したかどうかを示します。ページをフェッチします(404、またはホストがダウンしています)。

1
user149925

コメントで述べたように、常にユーザー入力をサニタイズします。ユーザーが悪意のある可能性があると常に想定してください。スニペットは直接悪用できるようには見えませんが、すべてのURLパーサーが 同じように動作する であるとは限らず、使用しているライブラリが、脆弱な悪用の種類に影響を与える可能性があることも考慮する必要があります。

完璧な世界では、あなたは安全かもしれませんが、念のために追加のチェックを行うことは常に良いことです。たとえば、ユーザーが特定のページにのみアクセスできるようにする場合は、ホワイトリストを設定する必要があります。サブディレクトリにアクセスすることになっていない場合は、URLにスラッシュが存在しないことを確認してください(エンコードされているかどうかに関係なく)。

2
Mr. Llama