怎么样才能写出安全的Java代码?不被黑客攻击?
在本文中,我们讨论了对付 13 种不同静态暴露的技巧。对于每种暴露,我们解释了不处理这些安全性问题所造成的影响。我们还为您推荐了一些准则,要开发不受这些静态安全性暴露威胁的、健壮且安全的 Java 应用程序,您应该遵循这些准则。一有合适的时机,我们就提供代码样本(既有暴露的代码也有无暴露的代码)。
对付高严重性暴露的技巧
请遵循下列建议以避免高严重性静态安全性暴露:
限制对变量的访问
让每个类和方法都成为 final,除非有足够的理由不这样做
不要依赖包作用域
使类不可克隆
使类不可序列化
使类不可逆序列化
避免硬编码敏感数据
查找恶意代码
限制对变量的访问
如果将变量声明为 public,那么外部代码就可以操作该变量。这可能会导致安全性暴露。
影响
如果实例变量为 public,那么就可以在类实例上直接访问和操作该实例变量。将实例变量声明为 protected 并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的变量,但仍然可以从派生类访问这个变量。
清单 1 演示了带有 public 变量的代码,因为变量为 public 的,所以它暴露了。
清单 1. 带有 public 变量的代码
class Test {
public int id;
protected String name;
Test(){
id = 1;
name = "hello world";
}
//code
}
public class MyClass extends Test{
public void methodIllegalSet(String name){
this.name = name; // this should not be allowed
}
public static void main(String[] args){
Test obj = new Test();
obj.id = 123; // this should not be allowed
MyClass mc = new MyClass();
mc.methodIllegalSet("Illegal Set Value");
}
}
建议
一般来说,应该使用取值方法而不是 public 变量。按照具体问题具体对待的原则,在确定哪些变量特别重要因而应该声明为 private 时,请将编码的方便程度及成本同安全性需要加以比较。清单 2 演示了以下列方式来使之安全的代码:
清单 2. 不带有 public 变量的代码
class Test {
private int id;
private String name;
Test(){
id = 1;
name = "hello world";
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
}
让每个类和方法都为 final
不允许扩展的类和方法应该声明为 final。这样做防止了系统外的代码扩展类并修改类的行为。
影响
仅仅将类声明为非 public 并不能防止攻击者扩展类,因为仍然可以从它自己的包内访问该类。
建议
让每个类和方法都成为 final,除非有足够的理由不这样做。按此建议,我们要求您放弃可扩展性,虽然它是使用诸如 Java 语言之类的面向对象语言的主要优点之一。在试图提供安全性时,可扩展性却成了您的敌人;可扩展性只会为攻击者提供更多给您带来麻烦的方法。
不要依赖包作用域
没有显式地标注为 public、private 或 protected 的类、方法和变量在它们自己的包内是可访问的。
影响
如果 Java 包不是封闭的,那么攻击者就可以向包内引入新类并使用该新类来访问您想保护的内容。诸如 java.lang 之类的一些包缺省是封闭的,一些 JVM 也让您封闭自己的包。然而,您最好假定包是不封闭的。
建议
从软件工程观点来看,包作用域具有重要意义,因为它可以阻止对您想隐藏的内容进行偶然的、无意中的访问。但不要依靠它来获取安全性。应该将类、方法和变量显式标注为 public、private 或 protected 中适合您特定需求的那种。
使类不可克隆
克隆允许绕过构造器而轻易地复制类实例。
影响
即使您没有有意使类可克隆,外部源仍然可以定义您的类的子类,并使该子类实现 java.lang.Cloneable。这就让攻击者创建了您的类的新实例。拷贝现有对象的内存映象生成了新的实例;虽然这样做有时候是生成新对象的可接受方法,但是大多数时候是不可接受的。清单 3 说明了因为可克隆而暴露的代码:
清单 3. 可克隆代码
class MyClass{
private int id;
private String name;
public MyClass(){
id=1;
name="HaryPorter";
}
public MyClass(int id,String name){
this.id=id;
this.name=name;
}
public void display(){
System.out.println("Id ="+id+"
"+"Name="+name);
}
}
// hackers code to clone the user class
public class Hacker extends MyClass implements Cloneable {
public static void main(String[] args){
Hacker hack=new Hacker();
try{
MyClass o=(MyClass)hack.clone();
o.display();
}
catch(CloneNotSupportedException e){
e.printStackTrace();
}
}
}
建议
要防止类被克隆,可以将清单 4 中所示的方法添加到您的类中:
清单 4. 使您的代码不可克隆
public final Object clone()
throws java.lang.CloneNotSupportedException{
throw new java.lang.CloneNotSupportedException();
}
如果想让您的类可克隆并且您已经考虑了这一选择的后果,那么您仍然可以保护您的类。要做到这一点,请在您的类中定义一个为 final 的克隆方法,并让它依赖于您的一个超类中的一个非 final 克隆方法,如清单 5 中所示:
清单 5. 以安全的方式使您的代码可克隆
public final Object clone()
throws java.lang.CloneNotSupportedException {
super.clone();
}
类中出现 clone() 方法防止攻击者重新定义您的 clone 方法。
使类不可序列化
序列化允许将类实例中的数据保存在外部文件中。闯入代码可以克隆或复制实例,然后对它进行序列化。
影响
序列化是令人担忧的,因为它允许外部源获取对您的对象的内部状态的控制。这一外部源可以将您的对象之一序列化成攻击者随后可以读取的字节数组,这使得攻击者可以完全审查您的对象的内部状态,包括您标记为 private 的任何字段。它也允许攻击者访问您引用的任何对象的内部状态。
建议
要防止类中的对象被序列化,请在类中定义清单 6 中的 writeObject() 方法:
清单 6. 防止对象序列化
private final void writeObject(ObjectOutputStream out)
throws java.io.NotSerializableException {
throw new java.io.NotSerializableException("This object cannot
be serialized");
}
通过将 writeObject() 方法声明为 final,防止了攻击者覆盖该方法。
使类不可逆序列化
通过使用逆序列化,攻击者可以用外部数据或字节流来实例化类。
影响
不管类是否可以序列化,都可以对它进行逆序列化。外部源可以创建逆序列化成类实例的字节序列。这种可能为您带来了大量风险,因为您不能控制逆序列化对象的状态。请将逆序列化作为您的对象的另一种公共构造器 — 一种您无法控制的构造器。
建议
要防止对对象的逆序列化,应该在您的类中定义清单 7 中的 readObject() 方法:
清单 7. 防止对象逆序列化
private final void readObject(ObjectInputStream in)
throws java.io.NotSerializableException {
throw new java.io.NotSerializableException("This object cannot
be deserialized");
}
通过将该方法声明为 final,防止了攻击者覆盖该方法。
避免硬编码敏感数据
您可能会尝试将诸如加密密钥之类的秘密存放在您的应用程序或库的代码。对于你们开发人员来说,这样做通常会把事情变得更简单。
影响
任何运行您的代码的人都可以完全访问以这种方法存储的秘密。没有什么东西可以防止心怀叵测的程序员或虚拟机窥探您的代码并了解其秘密。
建议
可以以一种只可被您解密的方式将秘密存储在您代码中。在这种情形下,秘密只在于您的代码所使用的算法。这样做没有多大坏处,但不要洋洋得意,认为这样做提供了牢固的保护。您可以遮掩您的源代码或字节码 — 也就是,以一种为了解密必须知道加密格式的方法对源代码或字节码进行加密 — 但攻击者极有可能能够推断出加密格式,对遮掩的代码进行逆向工程从而揭露其秘密。
这一问题的一种可能解决方案是:将敏感数据保存在属性文件中,无论什么时候需要这些数据,都可以从该文件读取。如果数据极其敏感,那么在访问属性文件时,您的应用程序应该使用一些加密/解密技术。
查找恶意代码
从事某个项目的某个心怀叵测的开发人员可能故意引入易受攻击的代码,打算日后利用它。这样的代码在初始化时可能会启动一个后台进程,该进程可以为闯入者开后门。它也可以更改一些敏感数据。
这样的恶意代码有三类:
类中的 main 方法
定义过且未使用的方法
注释中的死代码
影响
入口点程序可能很危险而且有恶意。通常,Java 开发人员往往在其类中编写 main() 方法,这有助于测试单个类的功能。当类从测试转移到生产环境时,带有 main() 方法的类就成为了对应用程序的潜在威胁,因为闯入者将它们用作入口点。
请检查代码中是否有未使用的方法出现。这些方法在测试期间将会通过所有的安全检查,因为在代码中不调用它们 — 但它们可能含有硬编码在它们内部的敏感数据(虽然是测试数据)。引入一小段代码的攻击者随后可能调用这样的方法。
避免最终应用程序中的死代码(注释内的代码)。如果闯入者去掉了对这样的代码的注释,那么代码可能会影响系统的功能性。
可以在清单 8 中看到所有三种类型的恶意代码的示例:
清单 8. 潜在恶意的 Java 代码
public void unusedMethod(){
// code written to harm the system
}
public void usedMethod(){
//unusedMethod(); //code in comment put with bad intentions,
//might affect the system if uncommented
// int x = 100;
// x=x+10; //Code in comment, might affect the
//functionality of the system if uncommented
}
建议
应该将(除启动应用程序的 main() 方法之外的)main() 方法、未使用的方法以及死代码从应用程序代码中除去。在软件交付使用之前,主要开发人员应该对敏感应用程序进行一次全面的代码评审。应该使用“Stub”或“dummy”类代替 main() 方法以测试应用程序的功能。
对付中等严重性暴露的技巧
请遵循下列建议以避免中等严重性静态安全性暴露:
不要依赖初始化
不要通过名称来比较类
不要使用内部类
不要依赖初始化
您可以不运行构造器而分配对象。这些对象使用起来不安全,因为它们不是通过构造器初始化的。
影响
在初始化时验证对象确保了数据的完整性。
例如,请想象为客户创建新帐户的 Account 对象。只有在 Account 期初余额大于 0 时,才可以开设新帐户。可以在构造器里执行这样的验证。有些人未执行构造器而创建 Account 对象,他可能创建了一个具有一些负值的新帐户,这样会使系统不一致,容易受到进一步的干预。
建议
在使用对象之前,请检查对象的初始化过程。要做到这一点,每个类都应该有一个在构造器中设置的私有布尔标志,如清单 9 中的类所示。在每个非 static 方法中,代码在任何进一步执行之前都应该检查该标志的值。如果该标志的值为 true,那么控制应该进一步继续;否则,控制应该抛出一个例外并停止执行。那些从构造器调用的方法将不会检查初始化的变量,因为在调用方法时没有设置标志。因为这些方法并不检查标志,所以应该将它们声明为 private 以防止用户直接访问它们。
清单 9. 使用布尔标志以检查初始化过程
public class MyClass{
private boolean initialized = false;
//Other variables
public MyClass (){
//variable initialization
method1();
initialized = true;
}
private void method1(){ //no need to check for initialization variable
//code
}
public void method2(){
try{
if(initialized==true){
//proceed with the business logic
}
else{
throw new Exception("Illegal State Of the object");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
如果对象由逆序列化进行初始化,那么上面讨论的验证机制将难以奏效,因为在该过程中并不调用构造器。在这种情况下,类应该实现 ObjectInputValidation 接口:
清单 10. 实现 ObjectInputValidation
interface java.io.ObjectInputValidation {
public void validateObject() throws InvalidObjectException;
}
所有验证都应该在 validateObject() 方法中执行。对象还必须调用 ObjectInputStream.RegisterValidation() 方法以为逆序列化对象之后的验证进行注册。 RegisterValidation() 的第一个参数是实现 validateObject() 的对象,通常是对对象自身的引用。注:任何实现 validateObject() 的对象都可能充当对象验证器,但对象通常验证它自己对其它对象的引用。RegisterValidation() 的第二个参数是一个确定回调顺序的整数优先级,优先级数字大的比优先级数字小的先回调。同一优先级内的回调顺序则不确定。
当对象已逆序列化时,ObjectInputStream 按照从高到低的优先级顺序调用每个已注册对象上的 validateObject()。
不要通过名称来比较类
有时候,您可能需要比较两个对象的类,以确定它们是否相同;或者,您可能想看看某个对象是否是某个特定类的实例。因为 JVM 可能包括多个具有相同名称的类(具有相同名称但却在不同包内的类),所以您不应该根据名称来比较类。
影响
如果根据名称来比较类,您可能无意中将您不希望授予别人的权利授予了闯入者的类,因为闯入者可以定义与您的类同名的类。
例如,请假设您想确定某个对象是否是类 com.bar.Foo 的实例。清单 11 演示了完成这一任务的错误方法:
清单 11. 比较类的错误方法
if(obj.getClass().getName().equals("Foo")) // Wrong!
// objects class is named Foo
}else{
// object's class has some other name
}
建议
在那些非得根据名称来比较类的情况下,您必须格外小心,必须确保使用了当前类的 ClassLoader 的当前名称空间,如清单 12 中所示:
清单 12. 比较类的更好方法
if(obj.getClass() == this.getClassLoader().loadClass("com.bar.Foo")){
// object's class is equal to
//the class that this class calls "com.bar.Foo"
}else{
// object's class is not equal to the class that
// this class calls "com.bar.Foo"
}
然而,比较类的更好方法是直接比较类对象看它们是否相等。例如,如果您想确定两个对象 a 和 b 是否属同一个类,那么您就应该使用清单 13 中的代码:
清单 13. 直接比较对象来看它们是否相等
if(a.getClass() == b.getClass()){
// objects have the same class
}else{
// objects have different classes
}
尽可能少用直接名称比较。
不要使用内部类
Java 字节码没有内部类的概念,因为编译器将内部类转换成了普通类,而如果没有将内部类声明为 private,则同一个包内的任何代码恰好能访问该普通类。
影响
因为有这一特性,所以包内的恶意代码可以访问这些内部类。如果内部类能够访问括起外部类的字段,那么情况会变得更糟。可能已经将这些字段声明为 private,这样内部类就被转换成了独立类,但当内部类访问外部类的字段时,编译器就将这些字段从专用(private)的变为在包(package)的作用域内有效的。内部类暴露了已经够糟糕的了,但更糟糕的是编译器使您将某些字段成为 private 的举动成为徒劳。
建议 如果能够不使用内部类就不要使用内部类。
对付低严重性暴露的技巧
请遵循下列建议以避免低严重性静态安全性暴露:
避免返回可变对象
检查本机方法
避免返回可变对象
Java 方法返回对象引用的副本。如果实际对象是可改变的,那么使用这样一个引用调用程序可能会改变它的内容,通常这是我们所不希望见到的。
影响
请考虑这个示例:某个方法返回一个对敏感对象的内部数组的引用,假定该方法的调用程序不改变这些对象。即使数组对象本身是不可改变的,也可以在数组对象以外操作数组的内容,这种操作将反映在返回该数组的对象中。如果该方法返回可改变的对象,那么事情会变得更糟;外部实体可以改变在那个类中声明的 public 变量,这种改变将反映在实际对象中。
清单 14 演示了脆弱性。getExposedObj() 方法返回了 Exposed 对象的引用副本,该对象是可变的:
清单 14. 返回可变对象的引用副本
class Exposed{
private int id;
private String name;
public Exposed(){
}
public Exposed(int id, String name){
this.id = id;
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
public void setId(int id){
this.id=id;
}
public void setName(String name){
this.name = name;
}
public void display(){
System.out.println("Id = "+ id + " Name = "+ name);
}
}
public class Exp12{
private Exposed exposedObj = new Exposed(1,"Harry Porter");
public Exposed getExposedObj(){
return exposedObj; //returns a reference to the object.
}
public static void main(String[] args){
Exp12 exp12 = new Exp12();
exp12.getExposedObj().display();
Exposed exposed = exp12.getExposedObj();
exposed.setId(10);
exposed.setName("Hacker");
exp12.getExposedObj().display();
}
}
建议
如果方法返回可改变的对象,但又不希望调用程序改变该对象,请修改该方法使之不返回实际对象而是返回它的副本或克隆。要改正清单 14 中的代码,请让它返回 Exposed 对象的副本,如清单 15 中所示:
清单 15. 返回可变对象的副本
public Exposed getExposedObj(){
return new Exposed(exposedObj.getId(),exposedObj.getName());
}
或者,您的代码也可以返回 Exposed 对象的克隆。
检查本机方法
本机方法是一种 Java 方法,其实现是用另一种编程语言编写的,如 C 或 C++。有些开发人员实现本机方法,这是因为 Java 语言即使使用即时(just-in-time)编译器也比许多编译过的语言要慢。其它人需要使用本机代码是为了在 JVM 以外实现特定于平台的功能。
影响
使用本机代码时,请小心,因为对这些代码进行验证是不可能的,而且本机代码可能潜在地允许 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高级语言,对黑客毫无疑义,
编程序用的语言,想做黑客学汇编语言
更难,不过不可能用汇编来写程序,因为太难
java的学习步骤讲解,程序员进
Java程序设计循序渐进教程 ¥26.60元
【编辑推荐】 本书主要面向初中级读者。如果读者具备了C++语言基础,那么阅读本书更会事半功倍,迅速掌握Java语言的开发技巧;如果你是新手上路,那么本书可以作为一本绝佳教程,它让你在了解Java语言的同时,掌握面向对象程序设计思想要点及与Java语言相关的各项技?...
Java程序设计基础与应用 ¥19.00元
本书是专为落实教育部和信息产业部《关于确定职业院校开展计算机应用与软件技术专业领域技能型紧缺人才培养培训工作的通知》和《职业院校计算机应用与软件技术专业领域技能型紧缺人才培养指导方案》精神而编写的标准的职业院校教材。本书内容:本书由11章、6个附?...
二级C、C++、Java和Access:2002-2005·全国计算机等级考试教育部考试中心笔试试题及答案汇编 ¥19.95元
为适应新大纲的需要,此次修订出版的2004年将最近几处及2004年刚刚考过的试题按等级或科目分类汇编成4个分册:二级Visual FoxPro及Visual Basic发册包括2002年-2004年二级Visual FoxPro试题5套,以及2002年-2004年二级Visual Basic试题5套。二级C、C++、Java?...
Web数据库编程--Java ¥19.00元
基于Web的"J2EE(JSP、Servlet、JDBC、Struts及Hibernate)+Oracle"技术是当前管理信息系统设计、开发的主流技术。本书主要介绍Web应用编程基础、JSP、Servlet、JDBC连接、Java连接池、基于Oracle的设计与应用、Struts及Hibernate技术等内容。本书融入了作者多年从事J2E ...
数据结构Java语言描述(第二版)——国外经典计算机科学教材系列 ¥62.70元
在本书中,作者Michael Main采用一种易于理解的方法,使用Java来讲解数据结构。本书给出了关于面向对象编程和Java的一个知识回顾,使学生得以牢固掌握关键的概念知识,不同层次的学生能够根据自己的实际情况调整学习的内容。本书在结构安排上比较灵活,教师可以根据 ...
Java Script动态网页编程实例手册 ¥43.70元
这是一部关于如何用JavaScript语言来进行动态网页编程的实例手册。本书内容:全书由16章和3个附录构成。主要内容包括JavaScript功能简介、编程环境、数据类型和变量、与用户交互的基本方法、运算符、条件和循环语句、函数、创建和使用自定义对象、JavaScript核心?...
全国计算机等级考试二级应试辅导——Java语言程序设计 ¥15.96元
本书是与教育部考试中心组织编写的《全国计算机等级考试二级教程——Java语言程序设计》相配套的辅导书,各章的内容与教程一一对应。本书每章包括:学习目标与要求、内容要点、例题分析与解答、自测题和自测题参考答案等 五个部分。各章内容要点在概括主要内容的?...
设计模式:Java语言中的应用 ¥45.60元
本书是一本Design Pattern的入门书,书中以浅显易懂的语言逐一说明了GoF的23个Design Pattern,让初次学习面向对象的读者也能立即掌握。在本书中不会看到死板的理论型文章,以Java语言写出书中各Pattern的范例程序,可以直接在计算机上运行,便于读者深入体会和应用 ...
JAVA实例技术手册(第三版)——O'Reilly Jave系列 ¥75.81元
畅销书《Java in a Nutshell》的作者精心打造了这样一本实战型Java图书,全书都围绕着真实世界Java编程实例展开,你将从中获益多多。如果你更倾向于“通过例子”来学习,那么这本书正是你的首选。全新的第三版涵盖了Java 1.4,并收入了193个完整的实战示例,其中 ...
Java项目开发实践(第2版)(附CD-ROM光盘一张)——项目开发实践系列 ¥37.05元
本书面向具有一定Java基础的开发者。先简单介绍了Java语言的语法知识、异常处理技术,以及面向对象程序设计的相关概念、方法和内容;然后介绍了Java项目开发基础,包括GUI、网络、多媒体、数据库和企业级应用开发。在此基础上,讲述了用Java语言来开发网络应用程序?...
Java项目开发实践:网络篇(附CD-ROM光盘一张) ¥35.15元
Java语言及其体系结构使“编写一次,随处运行”的程序成为现实,也使各种终端设备以同样的方式访问系统成为可能。本书用一些大家感兴趣的内容组织实例,从实例所涉及的知识点开始讲解,逐步切换到代码原型的介绍,最终呈现给大家一个完整实例。本书的另一个特点 ...
Java TM Servlet JSP TM经典实例——O\\\\\\\'Reilly Java系列 ¥81.70元
Java servlet和JSP构成了企业级Java体系结构的“Web层”。这些组件在服务器上执行与Web相关的常见任务,如处理与电子邮件服务器、数据库、企业级JavaBean(EJB)及Web服务器的交互。本书用Tomcat和BEA WebLogic作为servlet容器,提供了230多个与许多重要的日常Web任 ...
JAVA与面向对象程序设计(影印版) ¥37.52元
自20世纪90年代初面世以来,Java因其具备平台独立性、面向对象性、网络编程能力及能够提供图形用户界面、支持线程,而成为许多应用程序的理想开发工具。本书帮助读者学习Java的重要特性,并辅以网站http://sofpower.com/java对教学信息进行更新,提供网上例题、在线 ...
Java程序设计实训教程——21世纪全国职业院校技能型紧缺人才培养规划教材 ¥21.85元
本书是专为落实教育部和信息产业部《关于确定职业院校开展计算机应用与软件技术专业领域技能型紧缺人才培养培训工作的通知》和《职业院校计算机应用与软件技术专业领域技能型紧缺人才培养指导方案》精神而编写的标准的职业院校程序设计课程教材。本书内容:全书由 ...
Java程序设计——高等学校教育改革推荐教材 ¥19.95元
本书是依据本科和高职高专院校的培养目标及基本要求,结合作者多年来的教学经验和工程实践基础,为实施教学改革,使计算机教学进一步面向软件编程实践而编写的一本教材。包括的主要内容有:面向对象程序设计语言,Java程序设计入门,程序控制流程,JAVA的方法、类与 ...
JAVA多线程设计模式 ¥46.55元
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易解读,再配合众多的说明图解,无论对于初学者还是程?...
深入浅出Java Swing 程序设计 ¥51.30元
本书中文繁体字版由台湾金禾资讯股份有限公司出版(2005)。本书中文简体字经台湾金禾资讯股份有限公司授权由中国铁道出版社出版(2005)。任何单位或个人未经出版者书面允许不得以任何手段复制或抄袭本书内容。 ...
Java程序设计基础 ¥61.75元
本书以Java语言为工具,介绍了进行面向对象分析、设计和编程的方方面面。正文共分12章,包括Java语言简介、类、数组、继承、异常、图形用户接口、软件工程、递归和数据结构等。本书的附录内容丰富,包括Java语法、异常、运算符、修饰符等的参考,同时还提供了一个经 ...
Java 编程思想(英文版·第2版)(附光盘) ¥65.55元
From the fundamentals of Java syntax to its most advanced features (distributed computing, advanced Object-oriented capabilities, multithreading), Thinking In Java is designed to teach. Bruce Eckel\'s readable style and small, direct programming ...
Java面向对象应用程序开发 ¥57.00元
本书全面介绍了如何使用Java进行面向对象的应用程序开发,并着重介绍了开发适合CIS和MIS专业的学生和专业人员的业务信息系统的方法的技巧。全书共17章,分为5部分,主要内容包括面向对象的要领和Java基础知识、问题域类的定义、GUI类的定义、数据存取类的定义以及部署三 ...
JAVA类库查询辞典 ¥39.90元
本书主要介绍Java编程过程中涉及到的常用函数。分为两个部分,第一部分,简要介绍本书中包含的Java包,按照由包到类,再由类到方法的逻辑层次关系,符合Java语言本身的特点,不但便于对Java语言整体结构有清晰的认识,而且也便于读者对要了解的信息进行快速准确地定位。 ...
J2EEJava黑客大曝光--开发安全的Java应用 ¥40.85元
随着Java应用程序的广泛应用,Java安全问题日益错综复杂。本书作者通过来自现实世界的攻击案例,暴露黑客攻击Java应用程序的方法和手段,提出防御措施与方案,使您未雨绸缪,先人一步。 本书首先从Java及J2EE体系结构和基本安全机制入手,阐述Java认证和授权服务、Java?...
UML:JAVA程序员指南(双语版) ¥46.55元
本书作者以独特的视角,着重为Java程序员描述了UML 的利与弊,指导他们何时应该使用UML,以及如何使用UML。 ...
二级JAVA ¥28.31元
本书依据教育部考试中心最新发布的2004年版《全国计算机等级考试大纲》编写而成,一方面结合命题规律,对重要考点进行分析、讲解,并选取经典考题深入剖析;另一方面配有同步练习、模拟试题和上机试题,逐步向考生详尽透析考试中的所有知识要点。 ...
什么是黑客攻击?为什么要攻击?怎么攻击的?
黑客攻击
开放分类: 电脑、技术类、军事类
---------------解释1-------------------
一、黑客常用攻击手段
黑客攻击手段可分为非破坏性攻击和破坏性攻击两类。非破坏性攻击一般是为了扰乱系统的运行,并不盗窃系统资料,通常采用拒绝服务攻击或信息炸弹;破坏性攻击是以侵入他人电脑系统、盗窃系统保密信息、破坏目标系统的数据为目的。下面为大家介绍4种黑客常用的攻击手段(小编注:密码破解当然也是黑客常用的攻击手段之一)。
1、后门程序
由于程序员设计一些功能复杂的程序时,一般采用模块化的程序设计思想,将整个项目分割为多个功能模块,分别进行设计、调试,这时的后门就是一个模块的秘密入口。在程序开发阶段,后门便于测试、更改和增强模块功能。正常情况下,完成设计之后需要去掉各个模块的后门,不过有时由于疏忽或者其他原因(如将其留在程序中,便于日后访问、测试或维护)后门没有去掉,一些别有用心的人会利用穷举搜索法发现并利用这些后门,然后进入系统并发动攻击。
2、信息炸弹
信息炸弹是指使用一些特殊工具软件,短时间内向目标服务器发送大量超出系统负荷的信息,造成目标服务器超负荷、网络堵塞、系统崩溃的攻击手段。比如向未打补丁的 Windows 95系统发送特定组合的 UDP 数据包,会导致目标系统死机或重启;向某型号的路由器发送特定数据包致使路由器死机;向某人的电子邮件发送大量的垃圾邮件将此邮箱“撑爆”等。目前常见的信息炸弹有邮件炸弹、逻辑炸弹等。
3、拒绝服务
拒绝服务又叫分布式D.O.S攻击,它是使用超出被攻击目标处理能力的大量数据包消耗系统可用系统、带宽资源,最后致使网络服务瘫痪的一种攻击手段。作为攻击者,首先需要通过常规的黑客手段侵入并控制某个网站,然后在服务器上安装并启动一个可由攻击者发出的特殊指令来控制进程,攻击者把攻击对象的IP地址作为指令下达给进程的时候,这些进程就开始对目标主机发起攻击。这种方式可以集中大量的网络服务器带宽,对某个特定目标实施攻击,因而威力巨大,顷刻之间就可以使被攻击目标带宽资源耗尽,导致服务器瘫痪。比如1999年美国明尼苏达大学遭到的黑客攻击就属于这种方式。
4、网络监听
网络监听是一种监视网络状态、数据流以及网络上传输信息的管理工具,它可以将网络接口设置在监听模式,并且可以截获网上传输的信息,也就是说,当黑客登录网络主机并取得超级用户权限后,若要登录其他主机,使用网络监听可以有效地截获网上的数据,这是黑客使用最多的方法,但是,网络监听只能应用于物理上连接于同一网段的主机,通常被用做获取用户口令。
二、黑客攻击的目的
一、进程的执行
攻击者在登上了目标主机后,或许只是运行了一些简单的程序,也可能这些程序是无伤大雅的,仅仅只是消耗了一些系统的CPU时间。
但是事情并不如此简单,我们都知道,有些程序只能在一种系统中运行,到了另一个系统将无法运行。一个特殊的例子就是一些扫描只能在UNIX系统中运行,在这种情况下,攻击者为了攻击的需要,往往就会找一个中间站点来运行所需要的程序,并且这样也可以避免暴露自己的真实目的所在。即使被发现了,也只能找到中间的站点地址。
在另外一些情况下,假使有一个站点能够访问另一个严格受控的站点或网络,为了攻击这个站点或网络,入侵者可能就会先攻击这个中间的站点。这种情况对被攻击的站点或网络本身可能不会造成破坏,但是潜在的危险已经存在。首先,它占有了大量的处理器的时间,尤其在运行一个网络监听软件时,使得一个主机的响应时间变得非常的长。另外,从另一个角度来说,将严重影响目标主机的信任度。因为入侵者借助于目标主机对目标主机能够访问,而且严格受控的站点或进行攻击。当造成损失时,责任会转嫁到目标主机的管理员身上,后果是难以估计的。可能导致目标主机损失一些受信任的站点或网络。再就是,可能人民者将一笔账单转嫁到目标主机上,这在网上获取收费信息是很有可能的。
二、获取文件和传输中的数据
攻击者的目标就是系统中的重要数据,因此攻击者通过登上目标主机,或是使用网络监听进行攻击事实上,即使连入侵者都没有确定要于什么时,在一般情况下,他会将当前用户目录下的文件系统中的/etc/hosts或/etc/passwd复制回去。
三、获取超级用户的权限
具有超级用户的权限,意味着可以做任何事情,这对入侵者无疑是一个莫大的诱惑。在UNIX系统中支持网络监听程序必需有这种权限,因此在一个局域网中,掌握了一台主机的超级用户权限,才可以说掌握了整个子网。
四、对系统的非法访问
有许多的系统是不允许其他的用户访问的,比如一个公司、组织的网络。因此,必须以一种非常的行为来得到访问的权力。这种攻击的目的并不一定要做什么,或许只是为访问面攻击。在一个有许多windows95
的用户网络中,常常有许多的用户把自己的目录共享出未,于是别人就可以从容地在这些计算机上浏览、寻找自己感兴趣的东西,或者删除更换文件。或许通过攻击来证明自己技术的行为才是我们想像中的黑客行径,毕竟,谁都不喜欢些专门搞破坏,或者给别人带来麻烦的入侵者。但是,这种非法访问的的黑客行为,人们也不喜欢的。
五、进行不许可的操作
有时候,用户被允许访问某些资源,但通常受到许多的限制。在一个UNIX系统中没有超级用户的权限,许多事情将无法做,于是有了一个普通的户头,总想得到一个更大权限。在windowsNT系统中一样,系统中隐藏的秘密太多了,人们总经不起诱惑。例如网关对一些站点的访问进行严格控制等。许多的用户都有意无意地去尝试尽量获取超出允许的一些权限,于是便寻找管理员在置中的漏洞,或者去找一些工具来突破系统的安全防线,例如,特洛伊木马就是一种使用多的手段。
六、拒绝服务
同上面的目的进行比较,拒绝服务便是一种有目的的破坏行为了。拒绝服务的方式很多,如将连接局域网的电缆接地;向域名服务器发送大量的无意义的请求,使得它无法完成从其他的主机来的名字解析请求;制造网络风暴,让网络中充斥大量的封包,占据网络的带宽,延缓网络的传输。
七、涂改信息
涂改信息包括对重要文件的修改、更换,删除,是一种很恶劣的攻击行为。不真实的或者错误的信息都将对用户造成很大的损失。
八、暴露信息
入侵的站点有许多重要的信息和数据可以用。攻击者若使用一些系统工具往往会被系统记录下来如果直接发给自己的站点也会暴露自己的身份和地址,于是窃取信息时,攻击者往往将这些信息和数据送到一个公开的FTP站点,或者利用电子邮件寄往一个可以拿到的地方,等以后再从这些地方取走。
这样做可以很好隐藏自己。将这些重要的信息发往公开的站点造成了信息的扩散,由于那些公开的站点常常会有许多人访问,其他的用户完全有可能得到这些情息,并再次扩散出去。
三、黑客攻击的工具
(一)
应该说,黑客很聪明,但是他们并不都是天才,他们经常利用别人在安全领域广泛使用的工具和技术。一般来说。他们如果不自己设计工具,就必须利用现成的工具。在网上,这种工具很多,从SATAN、ISS到非常短小实用的各种网络监听工具。
在一个UNIX系统中,当入侵完成后,系统设置了大大小小的漏洞,完全清理这些漏洞是很困难的,这时候只能重装系统了。当攻击者在网络中进行监听,得到一些用户的口令以后,只要有一个口令没有改变,那么系统仍然是不安全的,攻击者在任何时候都可以重新访问这个网络。
对一个网络,困难在于登上目标主机。当登上去以后有许多的办法可以用。即使攻击者不做任何事,他仍然可以得到系统的重要信息,并扩散出去,例如:将系统中的hosts文件发散出去。严重的情况是攻击者将得到的以下口令文件放在网络上进行交流。每个工具由于其特定的设计都有各自独特的限制,因此从使用者的角度来看,所有使用的这种工具进行的攻击基本相同。例如目标主机是一台运行SunOS4.1.3的SAPRC工作站,那么所有用Strobe工具进行的攻击,管理员听见到的现象可能完全是一样的。了解这些标志是管理员教育的一个重要方面。
对一个新的入侵者来说,他可能会按这些指导生硬地进行攻击,但结果经常令他失望。因为一些攻击方法已经过时了(系统升级或打补丁进行入侵只会浪费时间),而且这些攻击会留下攻击者的痕迹。事实上,管理员可以使用一些工具,或者一些脚本程序,让它们从系统日志中抽取有关入侵者的信息。这些程序只需具备很强的搜索功能即可(如Perl语言就很适合做这件事了)。
(二)
当然这种情况下,要求系统日志没有遭到入侵。随着攻击者经验的增长、他们开始研究一整套攻击的特殊方法,其中一些方法与攻击者的习惯有关。由于攻击者意识到了一个工具除了它的直接用途之外,还有其他的用途,在这些攻击中使用一种或多种技术来达到目的,这种类型的攻击称为混合攻击。
攻击工具不局限于专用工具,系统常用的网络工具也可以成为攻击的工具,例如:要登上目标主机,便要用到telnet与rlogin等命令,对目标主机进行侦察,系统中有许多的可以作为侦察的工具,如finger和showmount。甚至自己可以编写一些工具,这并不是一件很难的事。其发回,如当服务器询问用户名时,黑客输入分号。这是一个UNIX命令,意思是发送一个命令、一些HTTP服务器就会将用户使用的分号过滤掉。入侵者将监听程序安装在UNIX服务器上,对登录进行监听,例如监听23、21等端口。
(三)
通过用户登录,把所监听到的用户名和口令保存起来,于是黑客就得到了账号和口令,在有大量的监听程序可以用,甚至自己可以编写一个监听程序。监听程序可以在windows95和windowsNT中运行。
除了这些工具以外,入侵者还可以利用特洛伊木马程序。例如:攻击者运行了一个监听程序,但有时不想让别人从ps命令中看到这个程序在执行(即使给这个程序改名,它的特殊的运行参数也能使系统管理员一眼看出来这是一个网络监听程序)。
攻击者可以将ps命令移到一个目录或换名,例如换成pss,再写一个shell程序,给这个shell程序起名为ps,放到ps所在的目录中:
#! /bin/ksh
pss-ef|grep-vsniffit|grep-vgrep
以后,当有人使用ps命令时,就不会发现有人在使用网络监听程序。这是一个简单的特洛伊木马程序。
另外,蠕虫病毒也可以成为网络攻击的工具,它虽然不修改系统信息,但它极大地延缓了网络的速度,给人们带来了麻烦。
---------------解释2-------------------
随着互联网黑客技术的飞速发展,网络世界的安全性不断受到挑战。对于黑客自身来说,要闯入大部分人的电脑实在是太容易了。如果你要上网,就免不了遇到黑客。所以必须知己知彼,才能在网上保持安全。那么黑客们有哪些常用攻击手段呢?
一、获取口令
这种方式有三种方法:一是缺省的登录界面(ShellScripts)攻击法。在被攻击主机上启动一个可执行程序,该程序显示一个伪造的登录界面。当用户在这个伪装的界面上键入登录信息(用户名、密码等)后,程序将用户输入的信息传送到攻击者主机,然后关闭界面给出提示信息“系统故障”,要求用户重新登录。此后,才会出现真正的登录界面。二是通过网络监听非法得到用户口令,这类方法有一定的局限性,但危害性极大,监听者往往能够获得其所在网段的所有用户账号和口令,对局域网安全威胁巨大;三是在知道用户的账号后(如电子邮件“@”前面的部分)利用一些专门软件强行破解用户口令,这种方法不受网段限制,但黑客要有足够的耐心和时间;尤其对那些口令安全系数极低的用户,只要短短的一两分钟,甚至几十秒内就可以将其破解。
二、电子邮件攻击
这种方式一般是采用电子邮件炸弹(E-mailBomb),是黑客常用的一种攻击手段。指的是用伪造的IP地址和电子邮件地址向同一信箱发送数以千计、万计甚至无穷多次的内容相同的恶意邮件,也可称之为大容量的垃圾邮件。由于每个人的邮件信箱是有限的,当庞大的邮件垃圾到达信箱的时候,就会挤满信箱,把正常的邮件给冲掉。同时,因为它占用了大量的网络资源,常常导致网络塞车,使用户不能正常地工作,严重者可能会给电子邮件服务器操作系统带来危险,甚至瘫痪。
三、特洛伊木马攻击
“特洛伊木马程序”技术是黑客常用的攻击手段。它通过在你的电脑系统隐藏一个会在Windows启动时运行的程序,采用服务器/客户机的运行方式,从而达到在上网时控制你电脑的目的。黑客利用它窃取你的口令、浏览你的驱动器、修改你的文件、登录注册表等等,如流传极广的冰河木马,现在流行的很多病毒也都带有黑客性质,如影响面极广的“Nimda”、“求职信”和“红色代码”及“红色代码II”等。攻击者可以佯称自己为系统管理员(邮件地址和系统管理员完全相同),将这些东西通过电子邮件的方式发送给你。如某些单位的网络管理员会定期给用户免费发送防火墙升级程序,这些程序多为可执行程序,这就为黑客提供了可乘之机,很多用户稍不注意就可能在不知不觉中遗失重要信息。
四、诱入法
黑客编写一些看起来“合法”的程序,上传到一些FTP站点或是提供给某些个人主页,诱导用户下载。当一个用户下载软件时,黑客的软件一起下载到用户的机器上。该软件会跟踪用户的电脑操作,它静静地记录着用户输入的每个口令,然后把它们发送给黑客指定的Internet信箱。例如,有人发送给用户电子邮件,声称为“确定我们的用户需要”而进行调查。作为对填写表格的回报,允许用户免费使用多少小时。但是,该程序实际上却是搜集用户的口令,并把它们发送给某个远方的“黑客”。
五、寻找系统漏洞
许多系统都有这样那样的安全漏洞(Bugs),其中某些是操作系统或应用软件本身具有的,如Sendmail漏洞,Windows98中的共享目录密码验证漏洞和IE5漏洞等,这些漏洞在补丁未被开发出来之前一般很难防御黑客的破坏,除非你不上网。还有就是有些程序员设计一些功能复杂的程序时,一般采用模块化的程序设计思想,将整个项目分割为多个功能模块,分别进行设计、调试,这时的后门就是一个模块的秘密入口。在程序开发阶段,后门便于测试、更改和增强模块功能。正常情况下,完成设计之后需要去掉各个模块的后门,不过有时由于疏忽或者其他原因(如将其留在程序中,便于日后访问、测试或维护)后门没有去掉,一些别有用心的人会利用专门的扫描工具发现并利用这些后门,然后进入系统并发动攻击。
现在,你该知道黑客惯用的一些攻击手段了吧?当我们对黑客们的这些行为有所了解后,就能做到“知己知彼,百战不殆”,从而更有效地防患于未然,拒黑客于“机”外。网络的开放性决定了它的复杂性和多样性,随着技术的不断进步,各种各样高明的黑客还会不断诞生,同时,他们使用的手段也会越来越先进。我们惟有不断提高个人的安全意识,再加上必要的防护手段,斩断黑客的黑手。相信通过大家的努力,黑客们的舞台将会越来越小,个人用户可以高枕无忧地上网冲浪,还我们一片宁静的天空
c语言做出的程序都能干什么?一般黑客编写的入侵和攻击程序用的是什么语言?
C语言最大的应用就是写操作系统和驱动程序还有其他嵌入式系统的程序,学习程序设计选选择C是很好的,掌握的一定程度再学C++,java等就容易一些.
黑客工具的开发语言很多了,用java好像没听说,很多小工具是直接用的汇编,小榕暴强的扫描工具"流光"是C++ Builder开发的,现在很多菜鸟黑客甚至用中文编程语言(易语言)来开发一些工具软件.
谁给我具体讲讲C语言,java 编程什么的 和木马,黑客,网络安全等等都是什么关系,简单明了一点 谢谢
C语言是用来进行系统底层系统开发和网站开发(比如新浪门户网站等),还有硬件方面的开发多。JAVA是面向对象编程,比如进行网页开发(比如163网站和邮箱,中国移动属下各个网站等),企业办公自动化的大型系统开发等。JAVA好像没人用它来攻击计算机,黑客也不会JAVA来做什么攻击计算机的,不过再进行系统开发时也要考虑到系统的安全,所以和网络安全相关。木马,黑客,网络安全真正要用到的语是汇编吧。C++也可以用到。做黑客,最好在数学方面有过人之处,熟悉系统原理,木马,黑客等要攻击计算机,前提这是这台计算机所装的系统有漏洞,或者说做得不够安全,不够完美,这还不行,木马,黑客知道这些漏洞才能进行攻击。如果你真的想当黑客,并且你知道系统原理(这里包括很多知识的,像内存管理,进程和线程和调用)、还有网络各方的知识(这里包括更多知识)、熟悉汇编,还有C或者C++其中的一门,我建议你看一本书。这本书就是(Windows应用程序捆绑核心编程)。这样你就能在Windows系统的机上进行一定攻击,不过你最好还是多发现系统更多的漏洞,这样你必须了解WindowsAPI,你就要看一下这方面的书。这些书都很多。而且很大本的。我推荐一位作家的书Jeffrey Richter的《Windows 高级编程指南》和《Windows核心编程》,这些书都很好。出版10多年的了.还有就是你还要了解一下编译原理。
黑客攻击的三个阶段是什么?黑客在这三个阶段分别完成什么工作?
1. 锁定目标
攻击的第一步就是要确定目标的位置,在互联网上,就是要知道这台主机的域名或者IP地址, 知道了要攻击目标的位置还不够,还需要了解系统类型、操作系统、所提供的服务等全面的资料,如何获取相关信息,下面我们将详细介绍。
2. 信息收集
如何才能了解到目标的系统类型、操作系统、提供的服务等全面的资料呢?黑客一般会利用下列的公开协议或工具来收集目标的相关信息。
(1)SNMP 协议:用来查阅网络系统路由器的路由表,从而了解目标主机所在网络的拓扑结构及其内部细节;
(2)TraceRoute程序:用该程序获得到达目标主机所要经过的网络数和路由器数;
(3)Whois协议:该协议的服务信息能提供所有有关的DNS域和相关的管理参数;
(4)DNS服务器:该服务器提供了系统中可以访问的主机的IP地址表和它们所对应的主机名;
(5)Finger协议:用来获取一个指定主机上的所有用户的详细信息(如注册名、电话号码、最后注册时间以及他们有没有读邮件等等);
(6)ping:可以用来确定一个指定的主机的位置;
(7)自动Wardialing软件:可以向目标站点一次连续拨出大批电话号码,直到遇到某一正确的号码使其MODEM响应为止。
3. 系统分析
当一个黑客锁定目标之后,黑客就开始扫描分析系统的安全弱点了。黑客一般可能使用下列方式来自动扫描驻留在网络上的主机。
(1)自编入侵程序
对于某些产品或者系统,已经发现了一些安全漏洞,该产品或系统的厂商或组织会提供一些“补丁”程序来进行弥补。但是有些系统常常没有及时打补丁,当黑客发现这些“补丁”程序的接口后就会自己编写能够从接口入侵的程序,通过这个接口进入目标系统,这时系统对于黑客来讲就变得一览无余了。
(2)利用公开的工具
像 Internet 的电子安全扫描程序 ISS(Intemet Security Scanner)、审计网络用的安全分析工具 SATAN ( Securi Ana1ysis Tool for Auditing Network)等。这些工具可以对整个网络或子网进行扫描,寻找安全漏洞。这些工具都有两面性,就看是什么人在使用它们了。系统管理员可以使用它们来帮助发现其管理的网络系统内部隐藏的安全漏洞,从而确定系统中哪些主机需要用“补丁”程序去堵塞漏洞,从而提高网络的安全性能。而如果被黑客所利用,则可能通过它们来收集目标系统的信息,发现漏洞后进行入侵并可能获取目标系统的非法访问权。
4. 发动攻击
完成了对目标的扫描和分析,找到系统的安全弱点或漏洞后,那就是万事具备,只欠攻击了,接下来是黑客们要做的关键步骤——发动攻击。
黑客一旦获得了对你的系统的访问权后,可能有下述多种选择:
(1)试图毁掉攻击入侵的痕迹,并在受到损害的系统上建立另外的新的安全漏洞或后门,以便在先前的攻击点被发现之后,继续访问这个系统;
(2)在你的系统中安装探测软件,包括木马等,用以掌握你的一切活动,以收集他比较感兴趣的东西(不要以为人人都想偷窥你的信件,人家更感兴趣的是你的电子银行帐号和密码之类);
(3)如果你是在一个局域网中,黑客就可能会利用你的电脑作为对整个网络展开攻击的大本营,这时你不仅是受害者,而且还会成为帮凶和替罪羊。
黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影《骇客(Hacker) 》也已经开始使用骇客一词,显示出中文使用习惯的趋同。实际上,黑客(或骇客)与英文原文Hacker、Cracker等含义不能够达到完全对译,这是中英文语言词汇各自发展中形成的差异。Hacker一词,最初曾指热心于计算机技术、水平高超的电脑专家,尤其是程序设计人员,逐渐区分为白帽、灰帽、黑帽等,其中黑帽(black hat)实际就是cracker。在媒体报道中,黑客一词常指那些软件骇客(software cracker),而与黑客(黑帽子)相对的则是白帽子。