Я уже не раз писал и еще повторю.
Когда пишешь сам, нужно внимательно относиться ко всем переменным, которые так, или иначе поступают с клиентской стороны и в обязательном порядке приводить их к нужному типу.
Числа - обрабатываем intval() или (int)$var
Строки, перед поступлением в базу должны обрабатываться mysql_real_escape_string
Это защитит Вас от SQL инъекций.
---
Что касается XSS, тут другая проблема. Если текст выводится в таком виде, как хранится, его обязательно нужно отфильтровать от потенциально опасных скриптов.
В нашем случае (JohnCMS), все тексты перед выводом в браузер обрабатываются htmlentities(), что обезвреживает любой внедренный скрипт и выводит его как обычный текст.
Правда не всегда такое удобно, иногда к примеру нужно выводить HTML элементы форматирования, или другое. К примеру, если для ввода текста у Вас стоит какой-либо визуальный редактор, вы красиво отформатировали текст, а потом перед выводом обработали его htmlentities(), то все форматирование естессно накроется. В этом случае нужны другие методы фильтрации от опасных элементов. В инете можно найти немало примеров кода.
---
Ну и конечно сам алгоритм...
К примеру, Вы написали все правильно, защитились и от SQL инъекции и от XSS, все ли в порядке?
Далеко нет. Неправильный алгоритм авторизации, разграничения доступа, или что другое, может свести на нет всю Вашу предыдущую работу.
---
Как итог, еще раз хочу напомнить, что НЕ СТАВЬТЕ непроверенных скриптов от неопытных кодеров. Кодер может от души старался. хотел как хорошо, но из-за недостатка опыта, он мог допустить алгоритмические ошибки.