Вообще говоря, бороться с этим бесползено. Люди любо понимают, либо не понимают. Почему? В качестве примера я люблю вспоминать громкие истории про вирусы и антивирусы. Сколько лет подряд все твердят "не запускайте файлы, пришедшие по почте!"? Однако количество внутрисетевых атак как бы не сильно уменьшилось, по прежнему то там то тут можно услышать как "кто-то запустил очередной аттач и всё рухнуло".
Такая ситуация будет повторятся, её вряд ли искоренишь, и какой-то определённый процент людей, не понимающих, что такое SQL injection, XSS и прочие радости жизни, будет всегда и везде.
Люди не читают (много ли программистов читало code complete?) ни книги, ни чужой код, банально ссылаясь на недостаток времени, а отсюда нет роста в знаниях даже над самим собой.
Могу добавить лишь, что если вы вдохновились и решили перешерстить защиту своих сайтов - необязательно даже писать кучу функций для разнообразных проверок -
ибо основные из них свободно распространяются (я так понимаю обновляются и совершенствуются) например ЗДЕСЬ.
Тут все же идет речь о том, что нужно проверять входящие данные наиболее удобными/адекватными методами. Какими именно в конкретных случаях - это уже другой разговор.
Входящие данные после некоторой проверки попадают в методы/функции и как раз тут может быть полезно сделать несколько assertions. В конкретном примере c тазиками, это утверждение (iQuantity > 0, iItemPrice > 0, etc) может быть добавлено в метод подсчитывающий общую сумму заказа.
Возможно, что этот метод будет скопирован в другую программу, где проверка входящих данных с пользовательского интерфейса реализована некорректно. Программа тогда сработает принципу «мусор на входе – ничего на выходе», т.к. вывалится с ошибкой. Но это значительно лучше, чем совершение некорректной транзакции.
Конечно, пример условный. Конкретное решение всегда зависит от множества параметров - языка разработки, используемых паттернов, стандартов кодирования, программных компонентов и так далее.
Качественный код: проверка данных обязательна