ホームページ  >  記事  >  バックエンド開発  >  PHP フレームワーク シリーズの記事 [5] を実装して入力を安全に処理する方法、_PHP チュートリアル

PHP フレームワーク シリーズの記事 [5] を実装して入力を安全に処理する方法、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:06921ブラウズ

入力を安全に処理するために PHP フレームワーク シリーズの記事 [5] を実装する方法、

すべての外部入力パラメーターは正当性をチェックする必要があります。

入力データの処理が正しくないと、SQL インジェクションなどの脆弱性が発生する可能性があります。

フレームワークは、$_REQUEST の値を取得するための一連の関数を提供します

リクエストInt

リクエスト文字列

リクエストフロート

リクエストブール

追記: $_REQUESTの変数タイプは配列である可能性があることに注意してください

リクエストが ?i[]=1 の場合、$_REQUEST['i'] の値は array(1) になります

検証を行う際は、phpの警告情報が漏洩しないようにあらゆる点を考慮する必要があります

さらに、kv json形式でのデータ検証を紹介しましょう。

プロジェクトである程度のスケーラビリティを維持するために、json 形式のデータが使用される場合があります。このデータはどのように検証されるべきですか?

//キー値 {k1:v1, k2:v2, k3:v3...} の形式で json データを検証します。kv の各ペアを検証できます

リクエストKvJson

部分的な実装コード

$ps, $var
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🎜🎜tru​​e🎜🎜http://www.bkjia.com/PHPjc/1100150.html🎜🎜技術記事🎜🎜 php フレームワーク文章 [5] をどのように実現するか、入力を安全に処理し、すべての外部入力パラメータがその合法性を検査します。 🎜🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:ThinkPHP ラベルの作成、ThinkPHP ラベルの作成_PHP チュートリアル次の記事:ThinkPHP ラベルの作成、ThinkPHP ラベルの作成_PHP チュートリアル

関連記事

続きを見る