我正在通过命令行参数从用户那里获取 String
到 Java 程序。
问题是我应该执行什么样的检查来防止可能的攻击和漏洞?
我不是安全领域的专家,但据我所知
- 在 C 中,用户指定的行太长且处理不当可能导致缓冲区溢出
- 在 PHP 行中包含 ` 字符且处理不当可能导致 SQL 注入(inject)
现在我想不出任何特定格式的 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;
}
我确信 Java 比 C 或早期的 PHP 安全得多,但是我应该注意什么?
最佳答案
如果这个主类除了将它的参数传递给其他地方之外什么都不做,那么验证字符串就不是它的责任了。
如果这个字符串最终进入一个在 SQL 查询中使用它的类,那么这个类有责任使用准备好的语句,从而确保没有 SQL 注入(inject)攻击是可能的。
如果此字符串最终成为生成的 HTML 页面的一部分,则 HTML 生成器负责对字符串进行 HTML 转义。
字符串本身永远不会有害。如果您必须验证它,那么您需要知道它何时有效,何时无效。这取决于上下文。
关于java - 如何验证命令行参数中的用户输入以获得更高的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517427/