Nik*_*sov 1 java security console command-line-arguments
我正在通过命令行参数从用户String进入Java程序。
问题是我应该执行哪种检查以防止可能的攻击和漏洞?
我不是安全领域的专家,但据我所知
目前,我无法考虑使用任何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安全得多,但是我应该注意些什么呢?
如果此主类除了将其参数传递到其他地方外没有做任何其他事情,那么验证字符串不是其责任。
如果此字符串最终到达在SQL查询中使用它的类,则使用准备好的语句是此类的责任,因此请确保不会进行SQL注入攻击。
如果该字符串最终成为了生成的HTML页面的一部分,则HTML生成器负责对字符串进行HTML转义。
字符串本身永远不会有害。如果必须验证它,那么您需要知道什么时候有效,什么时候无效。这取决于上下文。