Úplně bezpečné to zase nebude nikdy, ale základní postup by měl být :
ověřovat údaje z formulářů a necpat je hned do databáze 
u čísel zjišťovat, jsou-li čísly - is_numeric();
Při index.php?page=2 nebrat hned hodnotu $page, ale minimálně $_GET["page"];
hmtlspecialchars() - addslashes() - strip_tags() - reg. výrazy apod.
Pozor na SQL injection - údaje raději uzavírat do uvozovek.
foreach ($_GET as $secvalue) {
    if ((eregi("<[^>]*script*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*object*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*iframe*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*applet*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*meta*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*style*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*form*\"?[^>]*>", $secvalue)) ||
	(eregi("<[^>]*img*\"?[^>]*>", $secvalue)) ||
	(eregi("\([^>]*\"?[^)]*\)", $secvalue)) ||
	(eregi("\"", $secvalue))) {
	die ("Toto nezkousej !");
    }
}
foreach ($_POST as $secvalue) {
    if (eregi("<[^>]*script*\"?[^>]*>", $secvalue)) {
        Header("Location: index.php");
        die();
    }
}
 
A dále na webu. Stačí hledat.