ホームページ >バックエンド開発 >PHPチュートリアル >PHP フレームワーク シリーズの記事 [5] を実装して入力を安全に処理する方法、_PHP チュートリアル
すべての外部入力パラメーターは正当性をチェックする必要があります。
入力データの処理が正しくないと、SQL インジェクションなどの脆弱性が発生する可能性があります。
フレームワークは、$_REQUEST の値を取得するための一連の関数を提供します
リクエストInt
リクエスト文字列
リクエストフロート
リクエストブール
追記: $_REQUESTの変数タイプは配列である可能性があることに注意してください
リクエストが ?i[]=1 の場合、$_REQUEST['i'] の値は array(1) になります
検証を行う際は、phpの警告情報が漏洩しないようにあらゆる点を考慮する必要があります
さらに、kv json形式でのデータ検証を紹介しましょう。
プロジェクトである程度のスケーラビリティを維持するために、json 形式のデータが使用される場合があります。このデータはどのように検証されるべきですか?
//キー値 {k1:v1, k2:v2, k3:v3...} の形式で json データを検証します。kv の各ペアを検証できます
リクエストKvJson
部分的な実装コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
//校验整数,失败返回$default
function checkInt( $var , $default = 0) {
return is_numeric ( $var ) ? intval ( $var , ( strncasecmp ( $var , '0x' , 2) == 0 || strncasecmp ( $var , '-0x' , 3) == 0) ? 16 : 10) : $default ;
}
//校验字符串 $check为正则表达式
function checkString( $var , $check = '' , $default = '' ) {
if (! is_string ( $var )) {
if ( is_numeric ( $var )) {
$var = (string) $var ;
}
else {
return $default ;
}
}
if ( $check ) {
return (preg_match( $check , $var , $ret ) ? $ret [1] : $default );
}
return $var ;
}
/*<code class="php comments">/*
<code class="php spaces"> 校验kv json, 校验kv json,<code class="php spaces"> 如果想要一个这样的数据{id:1, 'type':'single_text', 'required': true, 'desc':'this is a text'}
<code class="php spaces"> 那么$desc可以这样写 如果想要一个蠷的データ{id:1, 'type':'single_text', 'required': true, 'desc':'これはテキストです'}<code class="php spaces"> array(
<code class="php spaces"> array('id', 'Int'), 那么$desc可以这样写<code class="php spaces"> array('type', 'string', PATTERN_NORMAL_STRING),
<code class="php spaces"> array('required', 'Bool', false), array(<code class="php spaces"> array('desc', 'string', PATTERN_NORMAL_STRING),
<code class="php comments">)) array('id', 'Int'),<code class="php comments">*/
<code class="php keyword">function checkKvJson( $var , $desc = array ()) { array('type', 'string', PATTERN_NORMAL_STRING),<code class="php spaces"> if ( is_string ( $var )) {
<code class="php spaces"> $var = json_decode( $var , true); array('required', 'Bool', false),<code class="php spaces"> }
<code class="php spaces"> if (! $var || ! is_array ( $var )) { array('desc', 'string', PATTERN_NORMAL_STRING),<code class="php spaces"> return array ();
))<code class="php spaces"> }
*/<code class="php spaces"> if ( $desc )
function<code class="php spaces"> foreach ( $desc as $d ) { <code class="php spaces"> if (!isset( $var [ $d [0]])) { checkKvJson(<code class="php spaces"> return array (); $var<code class="php spaces"> , 🎜<code class="php 変数">$desc🎜 🎜= 🎜<code class=" php キーワード">配列🎜🎜()) {🎜
<code class="php space"> 🎜<code class="php キーワード">if🎜🎜(🎜<code class="php function">is_string🎜🎜(🎜<code class="php 変数">$var🎜) 🎜)) {🎜
<code class="php space"> 🎜<code class="php variable">$var🎜 🎜= json_decode(🎜<code class="php variable">$var🎜🎜, true);🎜
<code class="php space"> 🎜🎜}🎜
<code class="php スペース"> 🎜<code class="php キーワード">if🎜🎜(!🎜<code class="php 変数">$var🎜 🎜|| !🎜<code class="php 関数">is_array🎜🎜(🎜<code class="php variable">$var🎜🎜)) {🎜
<code class="php space"> 🎜<code class="php キーワード">return🎜 <code class="php キーワード">array🎜🎜();🎜
<code class="php space"> 🎜🎜}🎜
<code class="php スペース"> 🎜<code class="php キーワード">if🎜🎜(🎜<code class="php 変数">$desc🎜🎜)🎜
<code class="php スペース"> 🎜<code class="php キーワード">foreach🎜🎜(🎜<code class="php 変数">$desc🎜 <code class="php キーワード">as🎜 <code>$d🎜🎜) {🎜
<code class="php スペース"> 🎜<code class="php キーワード">if🎜🎜(!isset(🎜<code class="php 変数">$var🎜🎜[🎜<code class="php 変数">$d🎜🎜[0]])) {🎜
<code class="php space"> 🎜<code class="php キーワード">return🎜 <code class="php キーワード">array🎜🎜();🎜
<code class="php space"> 🎜🎜}
<code class="php spaces"> $ps = array_slice ( $d , 2); $ps<code class="php spaces"> array_unshift ( $ps , $var [ $d [0]]); = <code class="php spaces"> $var [ $d [0]] = call_user_func_array( 'check' . $d [1], $ps ); array_slice<code class="php spaces"> if ( $var [ $d [0]] === false && strcasecmp ( $d [1], 'Bool' )) { (<code class="php spaces"> return array (); $d<code class="php spaces"> } , 2);<code class="php spaces"> }
<code class="php spaces"> return $var ; array_unshift<code class="php plain">} (
|
[<code class="php 変数">$d<p align="left"><code class="php plain">[ 0]]);<div style="display:none;">
<code class="php space"> <span id="url" itemprop="url"><code class="php 変数">$var
[<span id="indexUrl" itemprop="indexUrl"><code class="php 変数">$d
[0]] = call_user_func_array(<span id="isOriginal" itemprop="isOriginal"><code class="php string">'check'
.<span id="isBasedOnUrl" itemprop="isBasedOnUrl"><code class="php variable">$d
[1], <span id="genre" itemprop="genre"><code class="php variable">$ps
);<span id="description" itemprop="description">
<code class="php スペース">
if
(
$var<code class="php plain">[<div class="art_confoot"><code class="php 変数">$d
[0]] === false && 🎜<code class="php function">strcasecmp🎜<code class="php plain">(🎜<code class="php 変数">$d🎜<code class="php plain">[1], 🎜<code class="php string">'Bool'🎜<code class="php plain">)) {🎜
<code class="php space"> 🎜<code class="php キーワード">return🎜 <code class="php キーワード">array🎜<code class="php plain">();🎜
<code class="php space"> 🎜<code class="php plain">}🎜
<code class="php space"> 🎜<code class="php plain">}🎜
<code class="php スペース"> 🎜<code class="php キーワード">return🎜 <code class="php 変数">$var🎜<code class="php plain">;🎜
<code class="php plain">}🎜
🎜
🎜
🎜
🎜🎜
🎜🎜🎜http://www.bkjia.com/PHPjc/1100150.html🎜🎜www.bkjia.com🎜🎜true🎜🎜http://www.bkjia.com/PHPjc/1100150.html🎜🎜技術記事🎜🎜 php フレームワーク文章 [5] をどのように実現するか、入力を安全に処理し、すべての外部入力パラメータがその合法性を検査します。
🎜🎜