如何验证命令行参数中的用户输入以提高安全性?

Nik*_*sov 1 java security console command-line-arguments

我正在通过命令行参数从用户String进入Java程序。

问题是我应该执行哪种检查以防止可能的攻击和漏洞?

我不是安全领域的专家,但据我所知

  • C中,用户指定的行太长且处理不当可能导致缓冲区溢出
  • 在包含`字符且处理不当的PHP行中,可能会导致SQL注入

目前,我无法考虑使用任何String正则表达式进行检查的任何特定格式。它可以是任意的,但是如果看起来有害,我想立即退出。该字符串可能会发送到具有网络的Java服务器,在那里可能用于SQL查询。

if (args.length > 0) {
    String arg0 = args[0];
    if (!isValidString(arg0)){
        System.exit(1);
    }
}

public boolean isValidString (String str) {
    if (str == null) return false;

    //TODO: many more checks here

    return true;
}
Run Code Online (Sandbox Code Playgroud)

我确信Java比C或早期的PHP安全得多,但是我应该注意些什么呢?

JB *_*zet 5

如果此主类除了将其参数传递到其他地方外没有做任何其他事情,那么验证字符串不是其责任。

如果此字符串最终到达在SQL查询中使用它的类,则使用准备好的语句是此类的责任,因此请确保不会进行SQL注入攻击。

如果该字符串最终成为了生成的HTML页面的一部分,则HTML生成器负责对字符串进行HTML转义。

字符串本身永远不会有害。如果必须验证它,那么您需要知道什么时候有效,什么时候无效。这取决于上下文。