`
man_yutao
  • 浏览: 39512 次
  • 性别: Icon_minigender_1
  • 来自: 梦的国度
社区版块
存档分类
最新评论

java的攻与防

阅读更多
看到评论里很多人都说没有用,还有觉得去掉这个方法,那个方法的解决方案,在这个例子中怎么改都行,因为这个例子是我乱编的,我真正要说的是一种解决方案。
同志们呀,要领会精神!


我们的程序有时可能会被无意的进行了攻击,现在就来举个被攻击的例子,说明如何防御。

先创建一个工作类Work,只有一个简单的工资属性salary

public class Work{
private int salary;
public Work(int salary){
this.salary=salary;
}
public void setSalary(int salary){
this.salary=salary;
}
public int getSalary(){
return salary;
}
public String toString(){
	return "work.salary:"+salary;
}
}


在创建一个人员类Person,有人员姓名、工作两个属性

public class Person{
private final String name;
private final Work work;
public Person(String name,Work work){
	if(work.getSalary()<0) throw new IllegalArgumentException(" 工作的工资不能小于0");
	this.name=name;
	this.work=work;
} 
public Work getWork(){
	return work;
}
public String toString(){
	return "name:"+name+"  work:"+work;
}
}


这个类已经很小心了,已经控制工作的工资不能小于0了。

我现在来一个简单的调用

public class Test{
	public static void main(String[] args){
	Work work =new Work(3000);
	Person person=new Person("taoge",work);
	System.out.println(person);
	}
}


输出结果为
name:taoge  work:work.salary:3000

目前一切都很正常,现在我来进行攻击。
调用代码改为

public class Test{
	public static void main(String[] args){
	Work work =new Work(3000);
	Person person=new Person("taoge",work);
	System.out.println(person);
	work.setSalary(-1);
	System.out.println(person);
	}
}


再来看看输出结果
name:taoge  work:work.salary:3000
name:taoge  work:work.salary:-1

完蛋了,工资竟然变成负值了。看来攻击很成功,现在进行防守了。
将Person类行进改造

public class Person{
private final String name;
private final Work work;
public Person(String name,Work work){
	if(work.getSalary()<0) throw new IllegalArgumentException(" 工作的工资不能小于0");
	this.name=name;
	//this.work=work;
	this.work=new Work(work.getSalary());
} 
public Work getWork(){
	return work;
}
public String toString(){
	return "name:"+name+"  work:"+work;
}
}



在执行下,看看结果
name:taoge  work:work.salary:3000
name:taoge  work:work.salary:3000
哈,不错,防守成功。

那我开始进行第二轮进攻了,攻击代码做如下修改

public class Test{
	public static void main(String[] args){
	Work work =new Work(3000);
	Person person=new Person("taoge",work);
	System.out.println(person);
	//work.setSalary(-1);
	person.getWork().setSalary(-1);
	System.out.println(person);
	}
}


在看看执行结果
name:taoge  work:work.salary:3000
name:taoge  work:work.salary:-1

又一次攻击成功,那我进行新一轮的防守了,Person代码做如下修改

public class Person{
private final String name;
private final Work work;
public Person(String name,Work work){
	if(work.getSalary()<0) throw new IllegalArgumentException(" 工作的工资不能小于0");
	this.name=name;
	//this.work=work;
	this.work=new Work(work.getSalary());
} 
public Work getWork(){
	//return work;
	return new Work(work.getSalary());
}
public String toString(){
	return "name:"+name+"  work:"+work;
}
}


在看看执行结果
name:taoge  work:work.salary:3000
name:taoge  work:work.salary:3000

哈,又一次防御成功。
2
4
分享到:
评论
13 楼 man_yutao 2011-12-30  
zhglhy 写道
很不错,看来以后看代码得注意了!

谢谢了,又是一份鼓励呀
12 楼 man_yutao 2011-12-30  
printfabcd 写道
aa87963014 写道
一点用都没。

我觉得挺有用,有时候,你返回的数据不想让别人修改或者他对你的修改没有用,只不过博主写的偏简单了点。

终于有人正面响应了,感动呀
11 楼 zhglhy 2011-12-30  
很不错,看来以后看代码得注意了!
10 楼 printfabcd 2011-12-29  
aa87963014 写道
一点用都没。

我觉得挺有用,有时候,你返回的数据不想让别人修改或者他对你的修改没有用,只不过博主写的偏简单了点。
9 楼 西门大官人 2011-12-24  
楼主是爱进攻更爱防守,爱皮鞭更爱滴蜡。
8 楼 Caedmon 2011-12-24  
真心感觉这篇文章太蛋疼了。。。
7 楼 J__linux 2011-12-23  
没用。。。
6 楼 ghsau 2011-12-23  
这都能上首页,ITEYE下滑到什么程度了
5 楼 貌似掉线 2011-12-23  
关键部位那里加。
不然总不能每个调用的地方都要加个判断吧……
4 楼 yoyo837 2011-12-23  
去掉set啊,,,构造函数给惨 就 去掉吧
3 楼 aa87963014 2011-12-23  
一点用都没。
2 楼 xiaoweige 2011-12-23  
        
1 楼 laiyu_ryan 2011-12-23  
在set方法里面加上判断,还能攻击不?

相关推荐

    android中java和C的socket通信demo

    在Android开发中,有时我们需要进行Java层与C/C++(JNI)层的通信,以便利用C/C++的高性能优势处理一些底层任务。本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 ...

    java版登陆注册

    Java通过JDBC(Java Database Connectivity)API与数据库交互,执行增删改查操作。Hibernate或MyBatis等ORM(对象关系映射)框架可以简化数据库操作。 6. **密码加密**: 为了保护用户信息安全,密码必须在存储前...

    [课堂课件讲解]Java微服务实践-Spring Boot 安全.pptx

    5. 防攻逻辑:客户端在请求时携带 CSRF Token,对请求进行校验,以防止 CSRF 攻击。 服务端安全: 1. Spring Boot Security 整合:Spring Boot 提供了一个安全框架,允许开发者快速集成安全功能。 2. CSRF Token ...

    未知攻焉知防——XXE漏洞攻防.pdf

    在Java中设置DocumentBuilderFactory的setExpandEntityReferences为false;在Python中使用etree.parse时传入etree.XMLParser(resolve_entities=False)。 2. 过滤用户提交的XML数据:通过检测XML数据中的&lt;!DOCTYPE和...

    防伪溯源系统java源码下载-RedTeamer:红队

    防伪溯源系统java源码下载 红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" / "防御"方 提供更加全面实用的参考 还是那句老闲话 ...

    行业文档-设计装置-一种墙体固定自攻螺丝的装置.zip

    虽然标题"行业文档-设计装置-一种墙体固定自攻螺丝的装置"看似与传统IT技术不太直接相关,但这种装置的设计和实现可能需要用到计算机辅助设计(CAD)软件、物联网(IoT)技术以及嵌入式系统等IT领域的专业知识。...

    360独家防注入跨站脚本攻击漏洞补丁php-asp-jsp

    JSP(Java Server Pages)是基于Java的动态网页技术。防止JSP中的XSS攻击,可能涉及到使用EL(Expression Language)的`encodeForHTML()`或`encodeForJavaScript()`方法,以及对Servlet的请求参数进行验证。此外,...

    逆向工程和攻擊 Android 應用程式.pdf

    2. **Java源代码**(*.java):应用的主要逻辑。 3. **C/C++源代码**(*.c):用于实现特定的原生功能。 4. **资源文件**(res/*/*):包括图像、布局、字符串等。 5. **资产文件**(assets/*):存放原始数据或非...

    wifi密码破解教程

    攻与防如同亲兄弟一样,无论你加密手段多么的先进,不久之后就会有各种各样的破解方式出现。前不久,我们中关村在线网络设备频道里有篇《你真的了解吗 无线路由器密码设置模式》的文章,详细的介绍了目前无线网络的...

    wx038新冠抗原自测平台-springboot+vue+uniapp-小程序.zip(可运行源码+sql文件+文档)

    新冠抗原自测平台小程序使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测...

    javaweb投票系统源码-RedTeamer:红方人员作战执行手册

    java web投票系统源码 红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" / "防御"方 提供更加全面实用的参考 还是那句老闲话 ...

    wx293儿童预防接种预约小程序-springboot+vue+uniapp.zip(可运行源码+sql文件+文档)

    本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的...

    王者荣耀的一些英雄,铭文,装备,召唤师技能基本信息

    《王者荣耀:英雄、铭文、装备与召唤师技能解析》 在移动电竞的热潮中,《王者荣耀》无疑是最具影响力的一款游戏。它以其丰富的英雄角色、多样化的铭文系统、策略性的装备选择以及独特的召唤师技能,吸引了无数玩家...

    2021年2月大学生实习总结范文.docx

    铣削加工的方法包括钻孔、扩孔、铰孔、锪孔、攻螺纹和套螺纹等,每项操作都有其特定的工艺和工件夹持方式。在加工过程中,工件应妥善放置,防止损伤已加工表面,而钻孔时工件必须牢固夹持,且操作者不应戴手套,以...

    「风险评估」逆向工程和攻擊 Android 應用程式 - 信息安全.zip

    7. **Web安全**:虽然主要讨论的是Android应用,但许多应用都会与Web服务交互。因此,理解Web安全的概念,如XSS(跨站脚本)和CSRF(跨站请求伪造)攻击,以及如何防止它们,对于构建安全的Android应用同样重要。 8...

    谷粒商城第二天-项目环境搭建

    在“src/main”目录下,Java项目的源代码通常被组织为`java`和`resources`两个子目录,`java`存放Java源代码,`resources`用于放置配置文件、静态资源等非代码文件。 在“common”模块下,`main`文件夹的结构通常是...

    Web安全深度剖析(张柄帅)

    《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并...

    Android反编译工具包(2014最新版)

    4. **Smali/Baksmali**:Smali是一种低级别的Dalvik虚拟机汇编语言,与Java字节码类似。Baksmali是将DEX文件反汇编成Smali代码的工具,而Smali则用于将Smali代码重新汇编回DEX。2014年的版本已经足够稳定,可以用来...

    StormTheCastle

    游戏的标题暗示了这可能是一款以攻城或战略为主题的作品,玩家或许需要运用策略和技巧来征服敌人的城堡,或者抵御外来的侵略。 作为使用Java语言开发的游戏,"StormTheCastle"很可能利用了Java的Swing或JavaFX库来...

    javaSE 简单图书搜索系统

    系统的核心是与MySQL数据库进行交互,这涉及到JDBC(Java Database Connectivity)技术的使用。通过JDBC API,程序可以建立到数据库的连接,执行SQL语句,如INSERT用于添加图书,SELECT用于浏览和搜索图书,以及...

Global site tag (gtag.js) - Google Analytics