看到评论里很多人都说没有用,还有觉得去掉这个方法,那个方法的解决方案,在这个例子中怎么改都行,因为这个例子是我乱编的,我真正要说的是一种解决方案。
同志们呀,要领会精神!
我们的程序有时可能会被无意的进行了攻击,现在就来举个被攻击的例子,说明如何防御。
先创建一个工作类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
哈,又一次防御成功。
分享到:
相关推荐
在Android开发中,有时我们需要进行Java层与C/C++(JNI)层的通信,以便利用C/C++的高性能优势处理一些底层任务。本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 ...
Java通过JDBC(Java Database Connectivity)API与数据库交互,执行增删改查操作。Hibernate或MyBatis等ORM(对象关系映射)框架可以简化数据库操作。 6. **密码加密**: 为了保护用户信息安全,密码必须在存储前...
5. 防攻逻辑:客户端在请求时携带 CSRF Token,对请求进行校验,以防止 CSRF 攻击。 服务端安全: 1. Spring Boot Security 整合:Spring Boot 提供了一个安全框架,允许开发者快速集成安全功能。 2. CSRF Token ...
防伪溯源系统java源码下载 红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" / "防御"方 提供更加全面实用的参考 还是那句老闲话 ...
在Java中设置DocumentBuilderFactory的setExpandEntityReferences为false;在Python中使用etree.parse时传入etree.XMLParser(resolve_entities=False)。 2. 过滤用户提交的XML数据:通过检测XML数据中的<!DOCTYPE和...
虽然标题"行业文档-设计装置-一种墙体固定自攻螺丝的装置"看似与传统IT技术不太直接相关,但这种装置的设计和实现可能需要用到计算机辅助设计(CAD)软件、物联网(IoT)技术以及嵌入式系统等IT领域的专业知识。...
JSP(Java Server Pages)是基于Java的动态网页技术。防止JSP中的XSS攻击,可能涉及到使用EL(Expression Language)的`encodeForHTML()`或`encodeForJavaScript()`方法,以及对Servlet的请求参数进行验证。此外,...
2. **Java源代码**(*.java):应用的主要逻辑。 3. **C/C++源代码**(*.c):用于实现特定的原生功能。 4. **资源文件**(res/*/*):包括图像、布局、字符串等。 5. **资产文件**(assets/*):存放原始数据或非...
攻与防如同亲兄弟一样,无论你加密手段多么的先进,不久之后就会有各种各样的破解方式出现。前不久,我们中关村在线网络设备频道里有篇《你真的了解吗 无线路由器密码设置模式》的文章,详细的介绍了目前无线网络的...
新冠抗原自测平台小程序使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测...
java web投票系统源码 红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" / "防御"方 提供更加全面实用的参考 还是那句老闲话 ...
本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的...
在每一次的操作中,学生们都要确保工件不因放置不当而受损,尤其在钻孔时,工件必须牢固夹持,操作者还需避免戴手套以防滑动受伤。这些严格的要求,都是为了让学生们在实际操作中,充分理解并掌握铣削加工的技术要点...
《王者荣耀:英雄、铭文、装备与召唤师技能解析》 在移动电竞的热潮中,《王者荣耀》无疑是最具影响力的一款游戏。它以其丰富的英雄角色、多样化的铭文系统、策略性的装备选择以及独特的召唤师技能,吸引了无数玩家...
2024年的计算机软件毕业设计选题参考为学生提供了广泛的选择,涵盖了当前计算机科学与技术领域的多个热点和前沿方向,特别是对于流行的技术框架和平台,例如SpringBoot、微信小程序、Java SSM(Spring + SpringMVC +...
7. **Web安全**:虽然主要讨论的是Android应用,但许多应用都会与Web服务交互。因此,理解Web安全的概念,如XSS(跨站脚本)和CSRF(跨站请求伪造)攻击,以及如何防止它们,对于构建安全的Android应用同样重要。 8...
在“src/main”目录下,Java项目的源代码通常被组织为`java`和`resources`两个子目录,`java`存放Java源代码,`resources`用于放置配置文件、静态资源等非代码文件。 在“common”模块下,`main`文件夹的结构通常是...
具体到本项目,其核心目标是通过Java语言和海康提供的SDK,实现与海康视频监控设备的对接,并在此基础上实现实时预览的功能。 在实现过程中,开发者首先需要了解海康SDK的架构和接口设计。海康SDK通常包括多个模块...
3. **安全性提升**:更新版源码可能加强了防作弊机制,通过更严格的检测手段防止非法外挂破坏游戏平衡,保护了公平公正的游戏环境。 4. **新功能添加**:可能增加了新的游戏特性或活动,如新的地图、任务、道具等,...
《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并...