VNC (Virtual Network Computing) is a free product which is, in essence, a remote display system which allows you to view a computing 'desktop' environment not only on the machine where it is running, but from anywhere on the Internet and from a wide variety of machine architectures (UNIX, Windows and others).
Even though this program is an excellent one, it does lack one important thing: security. VNC unfortunately does not provide adequate security features that prevent it such attacks as: Session Hijacking, Man-in-the-Middle attacks, Session watching, etc.
Although VNC is problematic, there are a few ways to make it secure even in a hostile environment such as the Internet.
The following paper is a good reference that can be used to configure VNC to work through a secure firewall, and use the SSH encryption and authentication environment for secure VNC sessions: http://www.zip.com.au/~cs/answers/vnc-thru-firewall-via-ssh.txt
You may also want to consider using an SSH-ified VNC client, called MindVNC. (although this is a completely new client, which isn't supported by the original authors of VNC). Update: MindVNC is no longer a standalone client, but is now a part of the MindTerm source package: http://www.mindbright.se/mindterm/
Or use this patch that enables VNC to use SSL in order to secure VNC packet transmissions: http://web.mit.edu/thouis/vnc/