Ну, подготовленные запросы — это, конечно, основа, но не панацея. Если код весь заваленный и права на базу суперширокие — никакие подготовленные выражения не спасут. К тому же, валидация нужна, чтоб не передавать мусор в базу, а WAF — только страховка, а не гарантия. В итоге всё сводится к хорошему коду и адекватным настройкам сервера и БД. Без этого любую защиту можно быстро обойти.