То, что выше писали про sql-injection это то, что называется «дыры фреймворка».
Однако, дыр в безопасности может быть масса, большинство из которых, самые незаметные, но при этом самые подлые, это «дыры администрирования» и «дыры конфигурации».
Простой, детский, пример:
Юзер может на твой сервер загружать какие-нибудь файлы (ну, например, картинки, аватарки, прочую фигню)? А чем отличается конфиг директории куда эти файлики загружаются от остальных директорий сервера? Если ничем, то для вас плохие новости: Первый же «малолетний ][аKeP», будет делать с твоим серваком все что заблогорассудится, если загрузит «в качестве аватарки» файл cmd.php следующего содержания:
<?php if(isset($_POST['cmd'])){eval($_POST['cmd']);} ?>
Еще пример «дыры конфигурации»: Есть ли разделение конфигурации на development и production? Если нет, то плохая новость номер два: Сыпать отладочную информацию на веб-вывод, для разработчиков может удобно, но всему интернету не обязательно знать, что скрипт не смог подсоединиться к mysql-серверу «mysql.mydomain.com» под юзером «pupkin» с паролем «123».
Пример «дыры администрирования»: Твой проект использует shared hosting и на одном физическом серваке с тобой находятся сотни дырявых говносайтов. Никто не будет ломать твой супер-пупер сайт, а просто взломает чей-то бложичек, лежащий от твоего сайта в соседней директории.