Я прочитал документацию по статическому инструменту Fortify. Одна из концепций, используемых этим инструментом, называется taints. Некоторые источники, такие как веб-запросы, предоставляют данные, которые испорчены одним или несколькими способами, а некоторые приемники, такие как веб-ответы, требуют, чтобы данные были незаняты.
Хорошая вещь о Fortify заключается в том, что у вас может быть несколько типов красок. Например, вы можете пометить srand
вывод с помощью NON_CRYPTO_RAND
, а затем потребовать, чтобы эта ошибка не присутствовала при использовании переменной для криптографических целей. Другие примеры включают незафиксированные проверенные номера и т.д.
Можно ли моделировать taints с более сильной системой статического типа, используемой в Haskell или других языках программирования, с еще более сложными системами типов?
В Haskell я мог бы делать такие типы, как Tainted [BadRandom,Unbounded] Int
, но вычисления с ними кажутся довольно трудными, так как это ограничение типа также выполняет операции, которые не ограничивают taints.
Есть ли лучшие способы сделать это? Любая существующая работа по теме?