私は最近プラグインを書きました、そして今私は少しでもすべてのユーザー入力をサニタイズするためにバックトラックしています。ユーザーが悪意のあるスクリプトを挿入する可能性があるため、$_GET
または$_POST
から来るものはすべてサニタイズする必要があります。
また、get_options
を介してユーザーが安全であると入力したものをサニタイズしています(options.php
APIがサニタイズするかどうかは不明ですが、それは別の質問です)。
しかし、クッキーはどうですか?これらは消毒する必要がありますか?もしそうならどうですか?これが私の機能です:
$get_cookie_check = wp_kses($_GET['view_full_site'],null); //sanitize user input
$site_url = site_url();
$domain = parse_url($site_url, PHP_URL_Host);
if($get_cookie_check =='true'){
//set the cookie
setcookie("nifty_cookie", 1, time()+86400, "/", $domain);
$_COOKIE['nifty_cookie'] = 1;
}
}
//cookie variable
$full_site_cookie= $_COOKIE['nifty_cookie'];
私は、ここで何かをサニタイズする必要があるとは思っていませんが、私はPHPを使ってクッキーの値を(この場合は1に)設定しているからです。これは正しい考えですか?
これは単なる個人的な違いかもしれませんが、私は考えます:
多少のボケがあるかもしれませんが、通常、データ入力の検証が行われたとき、または何らかのデータが取得されたときにのみデータの検証が行われ、使用する前にそのデータが正しいことを確認します。これは、整数を期待している場合、整数であり、日付を期待している場合、正しい形式ですか? options APIを使用すると、設定に対する検証コールバックを定義できます。
データの消毒は、データを安全にすることです。そしてこれをするべきですanytimeあなたはデータを使います。ベストプラクティスは、遅く消毒することです。つまり、使用する直前にのみ消毒することです。通常、update_option()
、update_post_meta()
などのAPI関数を使用している場合は、データベースに保存するためにこれを心配する必要はありません(ただし、doを扱う場合は直接データベース)。
しかし、安全なのは状況によります。データはURL、テキスト入力、テキスト領域、またはSQLクエリとして使用されることを意図していますか。
そのため、$full_site_cookie
変数をどのように使用するつもりであるかは、それをどのようにサニタイズするかによって異なります。
上記では$get_cookie_check = wp_kses($_GET['view_full_site'],null);
を使います。 wp_kses()
は高価で、$_GET['view_full_site']
が 'true'であることを期待しているようです。それだけで厳密ではないのはなぜでしょう:
$get_cookie_check = ( !empty( $_GET['view_full_site'] ) )
&& 'true' == strtolower( $_GET['view_full_site'] ) );
//$get_cooke_check is now a boolean.