Assurez la conformité CWE et renforcez la sécurité du code C/C++ avec CppDepend
Assurez la conformité CWE et renforcez la sécurité du code C/C++ avec CppDepend
Dans le monde du développement logiciel, le respect des pratiques de codage sécurisé est crucial pour protéger les applications et les systèmes des menaces potentielles. Atteindre la conformité CWE (Common Weakness Enumeration) est une étape essentielle de ce processus. CppDepend offre une solution robuste aux développeurs C/C++ pour garantir la conformité CWE, renforçant efficacement la sécurité du code et la qualité globale du logiciel.
Dans ce guide, nous explorerons les avantages de l'utilisation de CppDepend pour la conformité CWE, y compris ses puissantes fonctionnalités pour identifier et atténuer les vulnérabilités, améliorer la qualité du code et promouvoir des pratiques de codage sécurisé dans vos projets C/C++.
Utiliser les règles CWE dans CppDepend
Lorsque vous créez un nouveau projet CppDepend, une fenêtre contextuelle apparaît affichant tous les standards de codage que vous souhaitez inclure dans votre analyse. Pour inclure les standards de codage CWE, cochez l'option CWE.

Après avoir analysé votre projet, naviguez vers la section Queries and Rules Explorer et sélectionnez les règles CWE dans le menu de gauche (surligné en rouge dans l'image ci-dessous). Cela affichera toutes les règles CWE associées à droite. En cliquant sur une règle, la requête CQLinq correspondante et le code source pertinent seront automatiquement générés. De plus, la section Metrics View fournit une visualisation de l'emplacement et de l'importance du problème.

Intégrer les règles CWE dans le rapport HTML
Pour inclure les règles CWE dans le rapport HTML généré (disponible dans la DevOps Edition), faites simplement un clic droit sur le groupe CWE et sélectionnez "List Code Queries of this Group in a dedicated section in Report".

Règles CWE
Buffer Copy without Checking Size of Input ('Classic Buffer Overflow') :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck"
&& (issue.Type=="bufferAccessOutOfBounds" || issue.Type=="possibleBufferAccessOutOfBounds"
|| issue.Type=="insecureCmdLineArgs"|| issue.Type=="invalidscanf") select
new { issue,issue.FilePath,Line=issue.BeginLine}Division par zéro :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="zerodiv" select
new { issue,issue.FilePath,Line=issue.BeginLine}Condition d’erreur non vérifiée :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="zerodiv" select
new { issue,issue.FilePath,Line=issue.BeginLine}Déclaration de catch pour exception générique :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from m in **Methods** where !m.IsEntryPoint
&& m.IsUsing("Keywords.generic_catch".AllowNoMatch()) select mImproper Release of Memory Before Removing Last Reference ('Memory Leak') :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && (issue.Type=="memleak" || issue.Type=="memleakOnRealloc"
|| issue.Type=="publicAllocationError"|| issue.Type=="leakNoVarFunctionCall") select
new { issue,issue.FilePath,Line=issue.BeginLine}Double libération :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="deallocDealloc" select
new { issue,issue.FilePath,Line=issue.BeginLine}Utilisation de variable non initialisée :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="uninitvar"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}Nettoyage incomplet :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="resourceLeak" select
new { issue,issue.FilePath,Line=issue.BeginLine}Pointeur NULL déréférencé :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="nullPointer" select
new { issue,issue.FilePath,Line=issue.BeginLine}Utilisation de fonctions obsolètes :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CLang" && issue.Type=="warn_deprecated" select
new { issue,issue.FilePath,Line=issue.BeginLine}Comparer au lieu d’assigner :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CLang" && issue.Type=="warn_unused_comparison" select
new { issue,issue.FilePath,Line=issue.BeginLine}Instruction break omise dans switch :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_unannotated_fallthrough" select
new { issue,issue.FilePath,Line=issue.BeginLine}Code mort :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_unreachable" select
new { issue,issue.FilePath,Line=issue.BeginLine}Assignment to Variable without Use ('Unused Variable') :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="unreadVariable"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}L’expression est toujours fausse :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="knownConditionTrueFalse"
&& issue.Description.Contains("always false")
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}L’expression est toujours vraie :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="knownConditionTrueFalse"
&& issue.Description.Contains("always true")
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}Function Call with Incorrectly Specified Arguments :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="preprocessorErrorDirective"
&& issue.Description.Contains("Wrong number")
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}Utilisation de fonction potentiellement dangereuse :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="dangerousUsageStrtol"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}Erreur logique de priorité des opérateurs :
Ce standard de codage est calculé avec la requête suivante :
warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && (issue.Type=="clarifyCalculation"
|| issue.Type=="clarifyCondition")
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **2**.ToMinutes().ToDebt(),
Severity =Severity.Low
}Essayez CppDepend aujourd'hui
Commencez votre essai gratuit de 14 jours avec accès complet à toutes les fonctionnalités de documentation. Sans carte bancaire.
