gpt4 book ai didi

java - 有没有一种方法可以在有或没有反射的情况下访问内部类中的私有(private)方法

转载 作者:行者123 更新时间:2023-12-01 07:00:26 24 4
gpt4 key购买 nike

我正在尝试制作一个用户和银行程序的简单示例,您必须 margin 钱不会被可以添加、继承、实现当前现有类但无法编辑初始类的人欺骗。所以我问你是否可以在没有提供转账功能的情况下设置某人的帐户余额。

我尝试过使用反射,但你必须有公共(public)构造函数来创建一个可以调用私有(private)方法的对象,但由于一切都是私有(private)的,我无法调用它。

public class Bank {
private static Bank ourInstance = new Bank();
public static Bank getInstance() {
return ourInstance;
}

private Bank() {}

public boolean requestTransfer(User user1, User user2, double amount) {
BankAccount ba1 = (BankAccount) user1.getBankAccount();
BankAccount ba2 = (BankAccount) user2.getBankAccount();
if (!(hasAccount(ba1) && hasAccount(ba2)))
return false;

if (ba1.getBalance() >= amount)
{
ba1.setBalance(ba1.getBalance() - amount);
ba2.setBalance(ba2.getBalance() + amount);
return true;
}
return false;
}

private class BankAccount implements BankAccountInterface {
private double balance;
private User user;

private BankAccount(double balance) {
this.balance = balance;
}

@Override
public double getBalance() {
return balance;
}

@Override
public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

private void setBalance(double balance) {
this.balance = balance;
}
}
}

public interface BankAccountInterface {
double getBalance();
User getUser();
}

public class User {
private String username;
private String password;
private Date created_at;
private BankAccountInterface bankAccount;
//constructor getters and setters etc..
}

如果您可以添加自己的类继承当前的类,使用反射或您可以使用的任何东西,您是否可以非法给用户钱。

最佳答案

这是一个安全问题。您可以使用安全管理器设置来防止反射,请参阅 thisthis ,在类加载后,通过字节码操作进行接口(interface)更改是不可能的,请参阅 this 。但还有其他安全漏洞,这里是 official list ,与臭名昭著的deserialization vulnerability最初是有意设计的。这些是未考虑的已知问题 zero day的利用。这是更多detailed discussion关于安全管理器和某些与 this exploit 相关的 API 的复杂性。

关于java - 有没有一种方法可以在有或没有反射的情况下访问内部类中的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58515983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com