Um zu verhindern, daß eine Variable, welche über POST übermittelt werden sollte nutzt man nicht den globalen Variablennamen bei der Überprüfung, register_globals ist eh auf vielen Servern aus Sicherheitsgründen mittlerweile deaktiviert. Um gezielt eine Post-Variable abzufragen, nutzt man das $_POST['VARIABLENNAME'] Array. Wenn Du also bisher so abgefragt hast:
if($username=='xxx' && $passwd=='yyy'){
// weiterer code
}
dann arbeite zukünftig so:
if($_POST['username']=='xxx' && $_POST['passwd']=='yyy'){
// weiterer Code
}
Dadurch können die Variablen $username und $passwd nicht über GET übermittelt werden, da sie andere Variablen repräsentieren. Dies ist allerdings immer noch kein Problem, daß von jemandem mit Ahnung von HTML nicht umgangen werden kann.
Weiterhin gibt es die Möglichkeit abzufragen, ob derjenige von deiner Login-Seite kommt über $_SERVER['HTTP_REFERER'] (unter Apache) und somit könntest Du alle ausfiltern, welche nicht die Daten auf der Loginseite eingeben haben. Dies ist jedoch auch nicht wasserdicht, da zum einen manche Desktiopfirewalls den Referer blocken und sie somit abgewiesen würden, zum anderen kann man auch einen Referer fälschen, wenn man weiß wie.
Eine weitere Möglichkeit wäre Cookies zu setzen, das ist aber auch nicht 100%ig und auch nicht wirklich sinnvoll, höchstens in Verbindung mit Sessions.
Was Dir letztendlich bleibt ist entweder eine nur 99%ige Lösung, Sessions, oder eine eigene Userverwaltung zu schreiben ähnlich der, die im Nickles-Chat Verwendung findet, hier wird nämlich nicht über die Seiten Username und Passwort übermittelt, sondern ein eindeutiger Key, der den User identifiziert, ähnlich wie bei Sessions, allerdings mit angepasster Funktionalität.