java黑客控制代码 黑客程序代码( 六 )


影响
使用本机代码时,请小心,因为对这些代码进行验证是不可能的,而且本机代码可能潜在地允许 applet 绕过通常的安全性管理器(Security Manager)和 Java 对设备访问的控制 。
建议
如果非得使用本机方法,那么请检查这些方法以确定:
它们返回什么
它们获取什么作为参数
它们是否绕过安全性检查
它们是否是 public、private 等等
它们是否含有绕过包边界从而绕过包保护的方法调用
结束语
编写安全 Java 代码是十分困难的,但本文描述了一些可行的实践来帮您编写安全 Java 代码 。这些建议并不能解决您的所有安全性问题,但它们将减少暴露数目 。最佳软件安全性实践可以帮助确保软件正常运行 。安全至关重要和高可靠系统设计者总是花费大量精力来分析和跟踪软件行为 。只有通过将安全性作为至关紧要的系统特性来对待 — 并且从一开始就将它构建到应用程序中,我们才可以避免亡羊补牢似的、修修补补的安全性方法 。
参考资料
请通过单击文章顶部或底部的讨论来参加本文的论坛 。
了解关于 Java 安全性 API 的更多知识 。
developerWorks 安全专题上通常含有有关计算机安全性的优秀资源 。
Larry Koved、 Anthony J. Nadalin、Don Neal 和 Tim Lawson 合作编写的 “The evolution of Java security”(developerWorks,1998 年)对 Java 语言的安全性模型早期开发进行了深入探讨 。
Sing Li 在他的 Java 安全性系列文章(由两部分组成的)(developerWorks, 2001 年 2 月)中向开发人员显示:尽管社区可能不得不重新考虑 Java 2 中的安全性设计,还是出现了只对开发人员有帮助 , 可以满足他们的需求的一致的进展:
第一部分
第二部分
John Viega、Tom Mutdosch、 Gary McGraw 和 Ed Felten 合著的 “Statically scanning Java code for security vulnerabilities” (IEEE Software,2000 年 9 月)介绍了一种 Java 工具,可以使用该工具来检查您的 Java 代码中的安全性漏洞 。
G. McGraw 和 E. Felten 合作编写的 Securing Java: Getting Down to Business with Mobile Code(John Wiley 和 Sons,1998 年)深入涵盖了 Java 安全性 。(文档是 PDF 格式的 。)
定期检查 IBM 研究 Java 安全页面以便 IBM 在安全性领域的创新有重要发展时能够跟踪这一创新 。
如果您的 Java 代码运行在 S/390 系统上 , 那么您将需要查阅 S/390 Java 安全页面以获取额外的信息 。
关于作者
Bijaya Nanda Sahu 是就职于印度 IBM Global Services 的软件工程师 。他从事过各种因特网技术和框架(J2EE、WSBCC、JADE)、 WebSphere 相关技术、UML 和 OOAD 方面的工作 。目前 , 他从事因特网银行安全性问题方面的工作,重点在 WebSphere Application Server 和 Portal Server 上 。可以通过 bijaya.sahu@in.ibm.com 和他联系
java可以编黑客程序吗?不可以!
java程序运行是需要虚拟机(JVM)支持的 , 也就是运行java程序的机器必须安装有jre或者jdk,你怎么保证被黑的机器上装了?如果没装,都运行不了,怎么黑别人?
Java script 看看黑客怎么写的($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_)这是一段完全合法的java script 代码java黑客控制代码,效果相当于alert(1) 。它可以在大部分浏览器上运行 。(虽然目前java黑客控制代码我测试过手头的浏览器都能运行,但理论上不能保证所有浏览器都能正确运行 , 原因见下文)这段代码的好处(对于黑客)是,它不包含任何字符或数字,可以逃过某些过滤器的检查 。比如说,如果假定一个AJAX请求将返回一个只包含数字的JSON,于是很可能会简单判断了一下其中不含字母就直接eval了 , 结果给黑客们留下了后门 。上面的代码功能很简单 , 只是alert(1) , 但使用同样的原理,完全可以干出更复杂的事 , 例如alert(document.cookie) 。更重要的是,这段代码再一次提醒java黑客控制代码我,黑客的想象力是无限的……正如Ryan Barnett的演讲标题:"XSS:The only rule is no rule" 。我们可以把它分为两个部分来理解:第一部分:($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()第二部分:[__[_/_]+__[_+~$]+$_[_]+$$](_/_)其中第一部分是核心,我们首先对它进行分析,先缩进一下:($= [$=[]][ (__=!$+$)[_=-~-~-~$] + ({}+$)[_/_] + ($$= ($_=!''+$)[_/_] + $_[+$]) ] )()$ = []; //1 __ = !$+$; //2 _ = -~-~-~$; //3 $_=!''+$; //4 $$ = $_[_/_] + $_[+$]; //5 $= [$][ __[_] + //6 ({}+$)[_/_] + //7 $$ //8 ]; //9 $(); //10现在来一行行看:1. $先赋值为一个空数组 (后面会被覆盖)2. __ = ![] + [] = false + [] = "false" 这里利用了java script 运算的强制类型转换特性 。首先空数组是一个非null值,因此![]的结果是false(布尔型) 。在计算false + []时,由于数组对象无法与其他值相加,在加法之前会先做一个toString的转换 , 空数组的toString就是"",因此事实上在计算false + "" 。这时false被自动转换为字符串 。最终结果是"false"+"" = "false" 。**换句话说,在$为空数组时,使用 “+$”的方式可以将任何一个值转为字符串**3. 在计算~[]时,~需要一个数字操作数,空数组无法直接转换为数字,则作为0处理 。因此~[] = ~0 = -1参考: ~3 = -4 ~[3] = -4 ~[3,2] = -1 (无法转为数字) ~"3" = -4 ~"abc" = -1因此: _ = -~-~-~[] = -~-~-(-1) = -~-~1 = -~-(-2) = -~2 = -(-3) = 3 理论上 , 可以用这种方式得出1-9所有数字4. !''是true,使用+$将其变为字符串 "true"5. 这里需要注意的是,之前一直用“值+[]”来获得“值”的字符串形式 。而“+[]”则是0(正号导致[]被自动转换为数值0) 。因此:$$ = "true"[3/3] + "true"[+[]] = "true"[1] + "true"[0] = "rt"6. __[_] = "false"[3] = "s"7. ({} + [])导致空对象{}被转换为字符串"[object Object]", 因此({}+$)[_/_] = "[object Object]"[1] = "o"9. 这里把$覆盖为 [[]]["s"+"o"+"rt"] 。注意这里[[]]本身是一个包含空数组的数组,其实对这一步来说 , 任何一个数组都没有关系(不一定要是嵌套数组),但作者巧妙地把$的首次赋值式放在了数组内部,使代码更为紧凑 。最终结果是,$ = [[]]["sort"] = [[]].sort = Array.prototype.sort 。10. 调用$(),作为整个表达式最终的取值 。需要注意,$是全局范围的,是window的一个属性,相当于window.$ 。而Array.prototype.sort会返回this 。对于window.$来说,this就是window 。因此,整个第一部分的值,就是window本身!当然,这个过程的正确运作依赖于当前浏览器的Array.prototype.sort实现能对this为window的情况容错 。通过第一部分,我们已经获得将任何值转换为字符串的简单方法 , 并能产生任意的数值,理论上就可以从java script 的取值系统中提取出大部分字母(不知道是不是全部,需要考证) 。并且 , 我们获取到了window的引用 。下面就可以开始上下其手,为所欲为了 。木哈哈哈哈哈!可以看出,上面的第10步是与浏览器的具体实现相关的,因此也存在着某些浏览器下需要对代码作出修改的可能 。现在看第二部分 , 事实上已经非常明朗了,唯一需要注意的是,现在$是一个函数,因此~$ = ~0 (无法直接转换为数字则作为0处理) = -1 。[__[_/_]+__[_+~$]+$_[_]+$$](_/_) = ["false"[1]+"false"[3+(-1)]+"true"[3]+"rt"](1) = ["a"+"l"+"e"+"rt"](1)所以,整条式子相当于:

推荐阅读