そもそも、このトピックに関する文献、記事、フォーラムを読んでください。プログラムするためにバズを学ぶ。脆弱性の例を参照し、それらの中で一般的な機能を特定します。したがって、あなたは脆弱性につながる要因を知っているでしょう。たとえば、準備やシールドなしでデータベースの一定の形式で送信された未加工の文字列は、側面の任意のコードデータベースの実行につながります。別の例としては、多くの言語で、アレイの境界線をチェックアウトする必要があります。そうしないと、プログラムはそれに対して受け入れられないメモリサイトに頼ることができます。
一般に、脆弱性は、あなたがセットプログラムを超えて進むことを可能にするすべてであり、原則として、それらは外部からの未加工（または誤って処理された）データに帰着します。
Для начала почитать литературу, статьи и форумы по данной теме. Научиться базово программировать. Посмотреть примеры уязвимостей и выявлить среди них общие особенности. Таким образом вы будете знать факторы которые приводят к уязвимостями. Например необработанная строка передающаяся в неизменном виде в базу данных без всякого препарирования и экранирования приводит к выполнению на стороне базы данных произвольного кода. Другой пример, в ряде языков нужно проверять выход за границы массива иначе программа может обратить в непредназначенный для того участок памяти.
В целом, уязвимости это всё что позволяет выйти за рамки поставленной программы, как правило они сводятся к необработанным (или неправильно обработанным) данным извне.