Shikata Ga Nai

Private? There is no such things.

入力検証のコードレビューについてふれてみた

Hello there, ('ω')ノ


入力検証は、ソフトウェアセキュリティの基本的な信条の1つで。

アプリケーションに提供された値が予想されるタイプまたは形式と。

一致することを確認することは、攻撃対象領域を減らすのに大いに役立って。

検証は、優れた結果をもたらす簡単な対策で。

 

よくある間違いはblock lists検証に使用することであることに。

注意することが重要で。

 

たとえば、アプリケーションは。

問題を引き起こすことがわかっているシンボルを防止する必要があって。

 

下記のアプローチの弱点は、一部のシンボルが見落とされる可能性があり。

 

String updateServer = request.getParameter("updateServer");
if(updateServer.indexOf(";")==-1 && updateServer.indexOf("&")==-1){
    String commandArgs = {
        Util.isWindows() ? "cmd" : "/bin/sh",
        "-c", "ping", updateServer
    }
    Process p = Runtime.getRuntime().exec(commandArgs);
}

 

 

下記のコードサンプルは、入力許可リストを使用して脆弱性を防止して。

 

String updateServer = request.getParameter("updateServer");
if(ValidationUtils.isAlphanumericOrAllowed(updateServer,'-','_','.')){
    String commandArgs = {
        Util.isWindows() ? "cmd" : "/bin/sh",
        "-c", "ping", updateServer
    }
    Process p = Runtime.getRuntime().exec(commandArgs);
}

 

Best regards, (^^ゞ