I'm confused by your question title. You obviously can't use
tx.origin to check whether
msg.sender is some address, because they have different meanings. If you want to check
msg.sender, you should check
'More secure' does not exist in the space of smart contracts. They either do what they're supposed to do, or they don't.
msg.sender is the address that called your contract. It can be either a human address (controlled by a private key) or a contract address.
tx.origin is the address that submitted the current transaction. It is never a contract address.
The fact that
tx.origin is present in your contract does not mean it can't be called by another contract.
if (tx.origin != msg.sender)
// This contract was called by another contract.
// Therefore, msg.sender and tx.origin have different values:
// - msg.sender is the other contract
// - tx.origin is the original 'human' address that submitted the current transaction
tx.origin are not more or less secure than one another. They simply have a different meaning. I can tell you though, in almost 3 years of contract development I have never encountered a single use-case for
tx.origin. You should use