<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie est un exemple pré-code,N'a rien à voir avec le contenu de l'article</span></span><span>
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"L'horodatage actuel est:<span class="hljs-subst">$timestamp</span></span></span><span>\n";
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">"-"</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
--------------------------------------------------
exister PHP En cours de développement,Lors du traitement des données d'entrée des utilisateurs,La sécurité des données est cruciale。En particulier dans les scénarios impliquant des opérations de base de données,Par exemple, traiter les soumissions d'utilisateurs ID。Si les données fournies par l'utilisateur sont insérées directement dans la base de données,C'est facile à provoquer SQL Injection ou vulnérabilité logique。Pour les nombres purs ID,PHP Fournit une fonction très pratique `</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>()`,Peut améliorer efficacement la sécurité de la vérification。
</span><span><span class="hljs-comment">### 1. `ctype_digit()` Qu'est-ce que c'est?</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>()` Oui PHP Fonctions intégrées,用于检查字符串Oui否全部由数字字符组成。Sa syntaxe est la suivante:
```php
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$text</span></span><span>)
</span></span>Renvoie true pour indiquer que chaque caractère de la chaîne est un nombre ( 0-9 ).
Return false pour indiquer que la chaîne contient des caractères non numériques ou une chaîne vide.
Il convient de noter que CTYPE_DIGIT () accepte uniquement les types de chaînes . Si un type entier est passé, il renvoie faux , il est donc généralement nécessaire de convertir l'entrée en une chaîne avant vérification.
Supposons que un ID utilisateur soit passé par le paramètre Get:
<span><span><span class="hljs-variable">$userId</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] ?? </span><span><span class="hljs-string">''</span></span><span>;
</span></span>Si vous utilisez $ userId directement pour la requête de base de données, cela peut entraîner des risques de sécurité:
<span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE id = <span class="hljs-subst">$userId</span></span></span><span>"; </span><span><span class="hljs-comment">// Précaire</span></span><span>
</span></span>La bonne façon de le faire est de vérifier si l'ID est un nombre pur:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>(</span><span><span class="hljs-variable">$userId</span></span><span>)) {
</span><span><span class="hljs-comment">// Sécurité:Peut être utilisé avec confiance</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE id = <span class="hljs-subst">$userId</span></span></span><span>";
</span><span><span class="hljs-comment">// Effectuer une requête de base de données</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// Entrée illégale</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Utilisateur illégal ID!"</span></span><span>;
}
</span></span>De cette façon, même si l'utilisateur entre dans un contenu malveillant tel que «1 ou 1 = 1» , il sera intercepté par CTYPE_DIGIT () , évitant ainsi le risque d'injection SQL.
De nombreux développeurs peuvent utiliser IS_NUMERIC () pour juger les chiffres, mais il est significativement différent de CTYPE_DIGIT () :
IS_NUMERIC () Considura également la chaîne "1.23" ou "-123" comme un nombre.
CTYPE_DIGIT () permet uniquement des chaînes entières pures et ne peut pas avoir de signes moins ou décimaux.
Par conséquent, lorsque vous traitez des clés primaires de base de données telles que ID, CTYPE_DIGIT () est plus stricte et sécurisée.
Dans les applications pratiques, il est généralement possible de convertir l'ID de type de chaîne en un entier après la vérification pour assurer davantage la sécurité:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>(</span><span><span class="hljs-variable">$userId</span></span><span>)) {
</span><span><span class="hljs-variable">$safeId</span></span><span> = (</span><span><span class="hljs-keyword">int</span></span><span>)</span><span><span class="hljs-variable">$userId</span></span><span>; </span><span><span class="hljs-comment">// Convertir en type entier</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE id = <span class="hljs-subst">$safeId</span></span></span><span>";
}
</span></span>De cette façon, même si la base de données exécute des requêtes, il n'y aura pas de risque d'injection causé par l'épissage des chaînes.
CTYPE_DIGIT () est un outil de vérification de sécurité pour gérer les ID numériques purs.
Il est plus strict que is_numeric () , en évitant les caractères illégaux tels que des signes moins et des décimales.
Une fois la vérification passée, elle peut être utilisée en combinaison avec une forte conversion pour améliorer la sécurité des données.
L'utiliser peut prévenir efficacement l'injection de données illégale et améliorer la sécurité et la stabilité de votre application.
Avec une vérification simple ctype_digit () , il est possible de traiter en toute sécurité l'ID numérique pur entré par l'utilisateur dans la plupart des scénarios, ce qui est à la fois pratique et efficace.
<span></span>