If one is being precise, working a topos $\mathcal{E}$ means that we are going to prove some a statement in some formal system and then interpret that statement/proof into $\mathcal{E}$ to conclude some fact about morphisms and objects there (which then hopefully tells us something useful).
As a result, what mathematical principles you're allowed to use when carrying out this proof depends on what formal system you're using and the only real limit is that there must be a way to model this system within $\mathcal{E}$ (and, subjectively, this model should actually let you state and prove interesting things!)
However, when people talk about working internally to $\mathcal{E}$, they are often making several implicit assumptions about the formal system and its model in $\mathcal{E}$.
- Usually the formal system is (intuitionistic) higher-order logic (iHOL) or extensional type theory (ETT)
- The model is the "standard" model available in any topos which interprets various logical connectives by corresponding categorical operations.
Let's focus on iHOL. In this case, you will prove some formal statement in higher-order logic in almost exactly the way you would "ordinarily" except you must avoid the law of excluded middle ($\forall p.\,p \lor \neg p$) and the axiom of choice. This is the "intuitionistic" part and it is important: these principles are not valid in every topos. Once you prove something, you must work out what this statement means in $\mathcal{E}$. Depending on the size of the statement, this might be slightly complex but there is a translation procedure which converts formula into a statement in $\mathcal{E}$ in a compositional way (i.e., to convert $p \land q$ you translate $p$, then $q$ then do something with the results to translate the $\land$). For certain topoi, this process is referred to as the "Kripke-Joyal semantics/unfolding". It's worth noting that if you carry out this process for $\mathcal{E} = \mathbf{Set}$, you will get exactly the standard interpretation of higher-order logic. In general, however, the translation can turn a fairly simple proposition into a rather complex statement; this is the purpose of this method in some sense, since we can focus on the simpler proposition rather than the unfolded interpretation.
Finally, we must address what statement you ought to prove. This is where it gets a little tricky: often when working in $\mathcal{E}$ we don't want to just study some formula built of only the standard connectives of HOL. We usually also want to include special propositions, sorts, functions, and even connectives which allow us to describe some particular aspect of $\mathcal{E}$. In a certain sense then, we extend iHOL with new constants and correspondingly extend our interpretation of iHOL into $\mathcal{E}$ to interpret these new symbols as the intended objects. For instance, in the Zariski topos we might extend our logic with a new symbol to denote the 'generic ring object' which exists in this topos.
In a 'well-engineered' internal proof, usually one fixes these things up front and has a relatively minimal set of extra constants. After all, the point of working in iHOL and using the interpretation into $\mathcal{E}$ is to do as much as possible in IHOL to simplify one's argument.