Shikata Ga Nai

Private? There is no such things.

間接オブジェクト参照のコードレビューについてふれてみた

Hello there, ('ω')ノ

 

間接オブジェクト参照のベストプラクティスは。

リソースが中間識別子を介して間接的にアクセスされるため。

パストラバーサルやオープンリダイレクトなどの脆弱性を防ぐのに役立って。

 

オブジェクトのセットを許可されたコレクションに制限することにより。

論理的な乱用と許可のバイパスを軽減するのにも役立って。

 

このベストプラクティスには、次の利点もあり。

・URLで機密データが送信されるのを防ぎます。

 例:userEmail=john.doe@company.comの代わりにuserEmailId=522を使用して。


・入力の検証は簡単で。

 パラメータが数値またはGUIDの場合は。

 検証は個人名またはファイルパスを検証するよりも簡単で。

 

次のコードスニペットがパストラバーサルを防いでくれて。

 

String file = request.getParameter("file");
file = "public/"+file;
InputStream input = null;
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
input = getServletContext().getResourceAsStream(file);

 

コードサンプルは、ファイル名をidで参照することでパストラバーサルを防止して。

 

String fileId = request.getParameter("fileId");
file = "public/"+availableFiles[fileId];
InputStream input = null;
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
input = getServletContext().getResourceAsStream(file);

 

 

String ssoUrl = request.getParameter("authProviderUrl");

response.sendRedirect(ssoUrl);

 

認証プロバイダのIDを参照することで任意のリダイレクトを防止して。

 

String authProviderId = request.getParameter("authProviderId");
URL ssoUrl = registeredAuthProviders[authProviderId].getUrl();
response.sendRedirect(ssoUrl);

 

Best regards, (^^ゞ