Во первых: дыры - сленговое название уязвимостей. Во вторых, они очень разнообразны, и в WEB-приложениях,они могут быть не прямыми (sql inj, xss)так и косвенными, то есть сам код не уязвим, но он скажем не совершенен (сайт не использует токены, нет SSL), получаем уязвимости типа csrf, clickJecking, mitm.
xss - внедрение потенциального опасного html / js кода, с целью хищения файлов или других действий подобного типа
sql inj - внедрение опасного sql кода с целью получения данных либо выведение сайта из строя
csrf - подмена форм
mitm - кража / модификация трафика
clikcjecking - выполнение действий от лица другого человека, похоже на csrf но им не является
Как защищаться:
от XSS - экранированием, преобразованием HTML сущностей в безопасный вид
Функцией htmlspecialchars
от sql inj - хорошей типизацией , либо функциями mysql(i)_real_escape_string либо использовать PDO
от csrf - использовать токены
от mitm - иметь хороший ssl
И на последок внимательно выставляй cmod(права доступа), аккуратно также с eval(функция исполняет код внутри себя), аккуратнее при подключении файлов, скажем если файл подключаешь, основываясь на куки файлах