Hola,
La pagina PHP mas segura es aquella que guardas en un diskette que metes en una caja fuerte y tiras las llaves a un estanque con pirañas
Bueno, ahora mas en serio. Si se puede hacer una sitio web seguro, con una combinacion de configuracion del servidor, configuracion de la conexion y buena programacion.
1.- Configuracion del servidor: Si el servidor donde alojamos la web no es seguro, por mucho que hagamos bien la programacion, siempre va a ser inseguro. Por ejemplo, en los alojamientos compartidos, si todos tienen acceso a la carpeta donde se almacenan las sesiones, todos podran ver los datos almacenados. Normalmente esta configuracion corresponde a los administradores del alojamiento.
2.- Configuracion de la conexion: Es mucho mas seguro realizar la conexion entre el cliente y el servidor mediante SSL, lo que implica tener alojada tu web en un servidor HTTPS. Con este protocolo, los datos entre el navegador y el servidor viajan encriptados.
3.- Buena programacion: Realizar una programacion robusta ayuda a la seguridad. Tener un codigo que sabes que no va a fallar, o que cuando falla, lo hace controladamente, es un seguro. Y la paranoia tambien ayuda. Comprobar el tipo y origen de los parametros externos, eliminar caracteres peligrosos, inicializar varaibles, etc. ayudan a evitar los ataques mas "basicos" (como el SQL inyection).
El manual tiene una seccion dedicada a la seguridad:
http://www.php.net/manual/en/security.php
Y he dejado para lo ultimo la configuracion mas importante: la configuracion del usuario

Todo sistema es tan seguro como su eslabon mas debil. Si tienes un usuario que da su informacion (login y pass) a cualquier email que parezca provenir de tu web, es una victima facil de la "ingenieria social".
Saludos.
PD: Sobre lo de $sam o $_GET['sam'], la diferencia es que $sam puede ser $_GET['sam'], $_POST['sam'], $_COOKIE['sam'], $_SESSION['sam'], $_ENV['sam'] o $_SERVER['sam']; mientras que $_GET['sam'] solo puede ser $_GET['sam']. Ten en cuenta que no hace falta ser muy habil para crear una peticion HTTP (como la que hace un navegador) preparada especialmente para "crackear" tu web.