<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は事前コードの例です,記事の内容とは何の関係もありません</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">"現存在するのタイムスタンプはです:<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>
--------------------------------------------------
存在する PHP 開発中,ユーザー入力データを処理するとき,データセキュリティは非常に重要です。特にデータベース操作を含むシナリオで,たとえば、ユーザーの送信を処理します ID。ユーザーが提供するデータがデータベースに直接挿入された場合,引き起こすのは簡単です SQL 注入または論理脆弱性。純粋な数字の場合 ID,PHP 非常に便利な機能を提供します `</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>()`,検証のセキュリティを効果的に改善できます。
</span><span><span class="hljs-comment">### 1. `ctype_digit()` それは何ですか?</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">ctype_digit</span></span><span>()` はい PHP 組み込み関数,用于检查字符串はい否全部由数字字符组成。その構文は次のとおりです:
```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>trueを返して、文字列内の各文字が数( 0-9 )であることを示します。
falseを返して、文字列には非数字の文字、または空の文字列が含まれていることを示します。
ctype_digit()は文字列型のみを受け入れることに注意する必要があります。整数タイプが渡された場合、 falseを返すため、通常、検証前に入力を文字列に変換する必要があります。
Getパラメーターを介してユーザーIDが渡されているとします。
<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>データベースクエリに$ useridを直接使用する場合、セキュリティリスクを引き起こす可能性があります。
<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">// 不安</span></span><span>
</span></span>これを行う正しい方法は、IDが純粋な数字であるかどうかを確認することです。
<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">// 安全性:自信を持って使用できます</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">// データベースクエリを実行します</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 違法投入</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"違法ユーザー ID!"</span></span><span>;
}
</span></span>このようにして、ユーザーが「1または1 = 1」などの悪意のあるコンテンツを入力したとしても、 CTYPE_DIGIT()によって傍受され、SQL注入のリスクを回避します。
多くの開発者はis_numeric()を使用して数字を判断する場合がありますが、 ctype_digit()とは大きく異なります。
is_numeric()は、文字列「1.23」または「-123」を数字と見なします。
ctype_digit()は、純粋な整数文字列のみを許可し、マイナスの符号または小数点を持つことはできません。
したがって、IDなどのデータベースプライマリキーを扱う場合、 CTYPE_DIGIT()はより厳格で安全です。
実際のアプリケーションでは、通常、検証が渡された後に文字列タイプIDを整数に変換することが可能です。
<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">// 整数タイプに変換します</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>このようにして、データベースがクエリを実行したとしても、文字列のスプライシングによって引き起こされる注入リスクはありません。
CTYPE_DIGIT()は、純粋なデジタルIDを処理するためのセキュリティ検証ツールです。
それはis_numeric()よりも厳しく、マイナスの兆候や小数などの違法なキャラクターを回避します。
検証が渡された後、データセキュリティを改善するために強力な変換と組み合わせて使用できます。
それを使用すると、違法なデータ注入を防止し、アプリケーションのセキュリティと安定性を改善できます。
Simple CTYPE_DIGIT()検証により、ほとんどのシナリオでユーザーが入力した純粋なデジタルIDを安全に処理することができます。これは便利で効率的です。
<span></span>