tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:外部URLへのリダイレクトを防止する方法

Visualforceページの開発ではURLパラメータでリダイレクト先のURLを保持してリダイレクトを行うというケースがよくあると思います。もしそこで外部URLを入力されてしまったときにエラーにする方法についてです。


まずは外部URLへのリダイレクトを許可した状態のパターンです。これでsaveボタンの処理を実行するとリダイレクト先はGoogleになります。
f:id:tyoshikawa1106:20161227231851p:plain


f:id:tyoshikawa1106:20161227232025p:plain


続いてリダイレクトを防止する場合です。次のコードを挿入します。

if(finishURL.startsWith('/')){
    finishURL.replaceFirst('/','');
}

savePage = new PageReference('/'+finishURL);

replace処理を追加してPageReferenceのURLの先頭に'/'を付けます。


コードの全体です。

String finishURL = ApexPages.currentPage().getParameters().get('finishURL');

if(finishURL.startsWith('/')){
    finishURL.replaceFirst('/','');
}

savePage = new PageReference('/'+finishURL);

savePage.setRedirect(true);

return savePage;


こうすることでリダイレクト先が相対パス指定になり外部サイトにはリダイレクトできなくなります。
f:id:tyoshikawa1106:20161227232419p:plain


ちなみに内部URLの場合は問題なくリダイレクトできます。
f:id:tyoshikawa1106:20161227232603p:plain


f:id:tyoshikawa1106:20161227232615p:plain


この話についての詳細はこちらです。