看到评论里很多人都说没有用,还有觉得去掉这个方法,那个方法的解决方案,在这个例子中怎么改都行,因为这个例子是我乱编的,我真正要说的是一种解决方案。
同志们呀,要领会精神!
我们的程序有时可能会被无意的进行了攻击,现在就来举个被攻击的例子,说明如何防御。
先创建一个工作类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中设置DocumentBuilderFactory的setExpandEntityReferences为false;在Python中使用etree.parse时传入etree.XMLParser(resolve_entities=False)。 2. 过滤用户提交的XML数据:通过检测XML数据中的<!DOCTYPE和...
防伪溯源系统java源码下载 红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" / "防御"方 提供更加全面实用的参考 还是那句老闲话 ...
虽然标题"行业文档-设计装置-一种墙体固定自攻螺丝的装置"看似与传统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作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的...
《王者荣耀:英雄、铭文、装备与召唤师技能解析》 在移动电竞的热潮中,《王者荣耀》无疑是最具影响力的一款游戏。它以其丰富的英雄角色、多样化的铭文系统、策略性的装备选择以及独特的召唤师技能,吸引了无数玩家...
铣削加工的方法包括钻孔、扩孔、铰孔、锪孔、攻螺纹和套螺纹等,每项操作都有其特定的工艺和工件夹持方式。在加工过程中,工件应妥善放置,防止损伤已加工表面,而钻孔时工件必须牢固夹持,且操作者不应戴手套,以...
7. **Web安全**:虽然主要讨论的是Android应用,但许多应用都会与Web服务交互。因此,理解Web安全的概念,如XSS(跨站脚本)和CSRF(跨站请求伪造)攻击,以及如何防止它们,对于构建安全的Android应用同样重要。 8...
在“src/main”目录下,Java项目的源代码通常被组织为`java`和`resources`两个子目录,`java`存放Java源代码,`resources`用于放置配置文件、静态资源等非代码文件。 在“common”模块下,`main`文件夹的结构通常是...
《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并...
4. **Smali/Baksmali**:Smali是一种低级别的Dalvik虚拟机汇编语言,与Java字节码类似。Baksmali是将DEX文件反汇编成Smali代码的工具,而Smali则用于将Smali代码重新汇编回DEX。2014年的版本已经足够稳定,可以用来...
游戏的标题暗示了这可能是一款以攻城或战略为主题的作品,玩家或许需要运用策略和技巧来征服敌人的城堡,或者抵御外来的侵略。 作为使用Java语言开发的游戏,"StormTheCastle"很可能利用了Java的Swing或JavaFX库来...
系统的核心是与MySQL数据库进行交互,这涉及到JDBC(Java Database Connectivity)技术的使用。通过JDBC API,程序可以建立到数据库的连接,执行SQL语句,如INSERT用于添加图书,SELECT用于浏览和搜索图书,以及...