The most voting answer says well and I want to claim it more clearly.
Proof:
We know that DFS produces tree edge, forward edge, back edge and cross edge.
Let's prove why forward edge and cross edge can't exist for DFS on undirected Graph.
For forward edge (u, v):
Forward edge is said that v is a descendent of u, or we say v is visited
and explored completely when u is being exploring, which is
(pre[u] < pre[v] < post[v] < pre[u])
this answer is considered as a back edge because (v, u) is an edge as well. But I don't know why to see forward edge as a back one not the inverse insight. Maybe this thought is used for some specific usage?
For cross edge (u, v):
this is the difficulty of the proof.
We prove that DFS on undirected graph can not yield a cross edge by
contradiction.
If (u, v) is a cross edge, then v is already explored completely when u is being explored.
(pre[v] < post[v] < pre[u] < post[u])
This can exist on DAG because when exploring v we don't know u at all! u points to v directedly. However, in undirected graph, when we explore v, u (as a neighbor of v) is being explored and finished. If the cross edge exists, then u can not be a neighbor of v, this contradicts with the undirected graph assumption. In this case, cross edge can not exist.
In fact, this proof gives us another property.
For an edge (u, v) in an undirected graph, if post(v) < post(u), then u must be an ancestor of v.