首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证命令行参数中的用户输入以获得更高的安全性?

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

Stack Overflow用户
提问于 2013-01-25 07:39:31
回答 3查看 3K关注 0票数 1

我正在通过命令行参数将String从用户手中导入到Java程序中。

问题是我应该执行什么样的检查来防止可能的攻击和漏洞?

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

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

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

代码语言:javascript
复制
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安全得多,但是我应该注意什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-25 07:45:43

如果这个主类只将它的参数传递到其他地方,那么验证字符串就不是它的责任了。

如果这个字符串最终转到一个在SQL查询中使用它的类,那么这个类就有责任使用一个准备好的语句,从而确保没有可能发生SQL注入攻击。

如果这个字符串最终成为生成的HTML页面的一部分,那么HTML生成器就有责任转义该字符串。

一根绳子本身是不会有害的。如果您必须验证它,那么您需要知道它何时有效,何时无效。这取决于背景。

票数 6
EN

Stack Overflow用户

发布于 2013-01-25 07:46:15

这完全取决于您对字符串所做的操作,就像您预期的输入一样,在使用字符串之前一定要对这些输入进行反复检查。

如果您担心来自用户的SQL注入,您可以使用准备好的语句来帮助防止SQL注入,因为语句是在使用之前编译的,查询计划存储在以后使用,这样参数就不会成为可执行SQL的一部分。

如果您担心用户输入出现在网页上等等,那么您应该将其转义到一个网页:Recommended method for escaping HTML in Java

您应该进行的转义/验证完全取决于您对字符串的使用。

票数 3
EN

Stack Overflow用户

发布于 2013-01-25 07:47:48

恐怕这个问题太牵强了.

在最坏的情况下,我想(我无法想象它是如何被复制的),如果传入main()方法的字符串数组足够大,您就可以处理main()异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14517427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档