Visualforceページの開発ではURLパラメータでリダイレクト先のURLを保持してリダイレクトを行うというケースがよくあると思います。もしそこで外部URLを入力されてしまったときにエラーにする方法についてです。
まずは外部URLへのリダイレクトを許可した状態のパターンです。これでsaveボタンの処理を実行するとリダイレクト先はGoogleになります。
続いてリダイレクトを防止する場合です。次のコードを挿入します。
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;
こうすることでリダイレクト先が相対パス指定になり外部サイトにはリダイレクトできなくなります。
ちなみに内部URLの場合は問題なくリダイレクトできます。
この話についての詳細はこちらです。