Web開発の過程では、システム変数やユーザーが送信したデータを取得する必要があることがよくありますが、これらの変数データは注意しないとセキュリティリスクを引き起こす可能性があります。 ThinkPHP によって提供されているため、簡単に取得して変数を制御できます。
1. 変数を取得します
1. まずは変数の取得方法について説明します。
最初の方法: 従来の取得方法。開発プロセス中に従来の方法を使用してさまざまなシステム変数を取得できます。例:リーリー
従来の方法を直接使用して取得することはお勧めできません。統一されたセキュリティ処理メカニズムがなく、後で調整するのがより面倒になるためです。2 番目の方法: Action クラスによって提供される動的メソッドを使用します
システムの Action クラスは、GET、POST、PUT、REQUEST、SESSION、COOKIE、SERVER、GLOBALS パラメータを含むシステム変数の強化された取得メソッドを提供し、変数値の取得に加えて、変数フィルタリングとデフォルト値の使用サポートも提供します。非常に簡単です。アクションで次のメソッドを呼び出すだけです:
リーリー
呼び出し形式は次のとおりです:
$this->メソッド名("変数名",["フィルターメソッド"],["デフォルト値"])
サポートされているメソッド名:
_get GETパラメータを取得します
_post POST パラメーターを取得します
_param は、GET、POST、または PUT パラメータを取得するリクエストのタイプを自動的に決定します
_request は REQUEST パラメーターを取得します
_put PUT パラメーターを取得します
_session は $_SESSION パラメータを取得します
_cookie $_COOKIE パラメータを取得します
_server $_SERVER パラメーターを取得します
_globals は $GLOBALS パラメータを取得します
変数名:(必ず)取得するシステム変数の名前です
つまり、次のように呼び出した場合:
リーリー
最終的な呼び出し結果は htmlspecialchars($_GET["name"]) です。フィルタリング方法を変更したい場合は、次を使用できます。リーリー
デフォルト値: (オプション) 取得するパラメータ変数が存在しない場合に設定されるデフォルト値です。例:リーリー
$_GET["id"]が存在しない場合は0が返されます。デフォルト値が設定されていない場合、システムはデフォルトで NULL を返します。
他のメソッドも同様に使用されます。
大きな違いはないようですが、明らかな利点があります。つまり、これらの変数の統合フィルタリングを追加または変更する必要がある場合、通常は変数取得用のコードを変更する必要はなく、プロジェクト構成ファイルに構成パラメーターを追加します。例:
リーリー
動的に取得されたすべての変数の統合フィルタリングには、strip_tags メソッドを使用します。たとえば、次のような複数のフィルタリング メソッドもサポートされます。 リーリーは、strip_tags フィルタリングが最初に実行され、次に htmlspecialchars フィルタリングが実行されることを意味します。
特定の変数を取得するときにフィルタリング方法をカスタマイズする必要がある場合は、次のように変更できます:
リーリープロジェクト設定で統一変数フィルタリング方法を設定しているが、一部の変数をフィルタリングしたくない場合は、次を使用できます:
リーリーパラメータが複数の送信メソッドから取得される可能性がある場合は、_param メソッドを使用してパラメータをより簡単に取得できます。例:
リーリー現在 get モードで送信された場合、
と同等です リーリー現在の投稿方法がpostの場合は
と同等 リーリーput モードで送信された場合、
と同等です リーリーその利点は当然明白であり、同じメソッドで異なる送信タイプの変数を受け入れることができ、異なるパラメーターを取得するために手動で判断する必要がありません。
2. URLパラメータを取得します場合によっては、URL パラメーターを取得する必要がある場合もあります。一般的には、get 変数を使用して URL パラメーターを取得するだけで十分ですが、カスタマイズされた URL やルーティングでは、URL のパラメーターが不規則になる場合があります。この場合、別の方法を使用してそれらを取得できます。 たとえば、現在の URL アドレスは次のとおりです:
http://localhost/index.php/news/hello_world/thinkphp
パラメータを取得したい場合は、以下を使用できます:
リーリーただし、変数取得の_param(数値)メソッドはPATHINFOモードのURLアドレスのみ有効です
3. 変数フィルタリングAction クラスが提供するメソッドを使用して変数を取得およびフィルターする方法はすでに学習しましたが、これらの動的メソッドを呼び出さずにデータをフィルターするにはどうすればよいでしょうか? ThinkPHP は、データ フィルタリング操作を実行する 2 つの方法も提供します:
最初に: グローバル変数フィルタリングを設定します这种情况是针对一些会在多使用的情况,可以通过配置全局过滤 简化操作,例如在项目配置文件中添加参数:
'VAR_FILTERS'=>'strip_tags'
则会对全局的get和post变量进行过滤,其他类型的系统变量需要自行过滤。
第二:在写入数据库之前进行变量过滤
如果你的变量数据是要写入到数据库的话,可以在数据写入数据库之前调用filter方法对数据进行安全过滤,例如:
$this->data($data)->filter('strip_tags')->add();
在执行add方法之前,会对$data数据进行strip_tags过滤处理。但是,这种方式下面,filter方法不支持多个过滤方法。
四、总结
使用ThinkPHP,我们可以轻松地对系统变量的获取和过滤,你的开发功力明显提升了不少。加油,后面还会讲解如何使用路由。
PS:这里推荐几款本站的格式化美化工具,相信大家在以后的开发中能够用得上:
php代码在线格式化美化工具:
http://tools.jb51.net/code/phpformat
JavaScript代码美化/压缩/格式化/加密工具:
http://tools.jb51.net/code/jscompress
在线XML格式化/压缩工具:
http://tools.jb51.net/code/xmlformat
JSON代码格式化美化工具:
http://tools.jb51.net/code/json
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.jb51.net/code/jsoncodeformat
sql代码在线格式化美化工具:
http://tools.jb51.net/code/sqlcodeformat
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《PHP中cookie用法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。