original source : https://ethereum.stackexchange.com/a/114811
A proxy contract is a contract which delegates calls to another contract. To interact with the actual contract you have to go through the proxy, and the proxy knows which contract to delegate the call to (the target).
A proxy pattern is used when you want upgradability for your contracts. This way the proxy contract stays immutable, but you can deploy a new contract behind the proxy contract – simply change the target address inside the proxy contract.
Therefore it’s a bit dangerous to use a proxy contract, since there are no guarantees that the underlying (target) contract hasn’t been changed to a malicious one. There is no strict definition on how to detect a proxy contract, but basically it’s anything that delegates the functionality to another contract. You have to analyze the source code to be able to decide.