1. Инициализация
Перемменные в скрипте должны быть явно инициализированы. Это во первых - правильно с точки зрения самого PHP (ибо не инициализированные переменные вызывают ошибки), во вторых - обезопасит вас от передачи парамметров внутренним переменным из вне (возможно при register_globals on).
Пример:
$error = array(); //инициализируем переменную
$error[] = 'Значение';
2. Типизация
Если наш скрипт за раннее предпологает наличие строго определенного типа конкретной переменной (кпримеру, $id должно содержать целочисленное значение), необходимо принудительно приводить эту перемменную к нужному типу, тем самым, обезопасив себя от передачи зловредных данных.
Пример:
$integer = (int) $_GET['var']; //ожидается целочисленное значение
$float = (float) $_GET['var']; //ожидается дробное значение
3. Фильтрация
На вводе данных, необходимо фильтровать потенциально опасные символы, которые могут послужить в sql-иньекциях и модификация ваших sql-запросов.
Пример:
mysql_query("INSERT INTO table SET
var = '". mysql_real_escape_string($_POST['value']) .'";");
Данные на выводе необходимо фильтровать от XSS атак, которые посредством внедрения зловредных кодов, выполняющихся на машине клиента, могут воровать его информацию (куки, идентификаторы сессий и т.д).
Пример:
htmlentities($_GET['value'], ENT_QUOTES, 'UTF-8');
З.Ы: надеюсь это уменьшит кол-во вопросов.
З.З.Ы: некоторые нюансы все таки не успел описать, ибо тороплюсь с работы
, думаю знающие люди дополнят.