ja:rule:inp:デフォルトで初期化される外部入力をバリデーションする
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ja:rule:inp:デフォルトで初期化される外部入力をバリデーションする [2016/03/20 01:49] – [適合コード例 (filter_input)] yohgaki | ja:rule:inp:デフォルトで初期化される外部入力をバリデーションする [2017/07/02 02:58] (current) – yohgaki | ||
|---|---|---|---|
| Line 30: | Line 30: | ||
| また入力その物の真正性のバリデーションが必要となる場合も多い。例えば、データ操作をともなうURLへのリクエストが実際にユーザーが意図した操作であるかは、バリデーションを行わないとCSRF(クロスサイト・リクエスト・フォージェリ)攻撃が可能になる。 | また入力その物の真正性のバリデーションが必要となる場合も多い。例えば、データ操作をともなうURLへのリクエストが実際にユーザーが意図した操作であるかは、バリデーションを行わないとCSRF(クロスサイト・リクエスト・フォージェリ)攻撃が可能になる。 | ||
| - | ===== 非適合コード例 ===== | + | このルールに非適合となるコード例は多岐に渡る。ここで紹介する非適合コード例は一部に過ぎない。 |
| + | |||
| + | |||
| + | ===== 非適合コード例(Integer handling)===== | ||
| + | |||
| + | 前提条件:システムは正の整数IDを受け入れるシステムとする。 | ||
| $_GET/ | $_GET/ | ||
| + | <color # | ||
| <code php> | <code php> | ||
| $id = $_GET[' | $id = $_GET[' | ||
| Line 40: | Line 46: | ||
| キャストはバリデーションの代替とはならない。 | キャストはバリデーションの代替とはならない。 | ||
| + | <color # | ||
| <code php> | <code php> | ||
| $id = (int)$_GET[' | $id = (int)$_GET[' | ||
| Line 49: | Line 56: | ||
| ===== 適合コード例 (filter_input) ===== | ===== 適合コード例 (filter_input) ===== | ||
| + | <color # | ||
| <code php> | <code php> | ||
| $id = filter_input(INPUT_GET, | $id = filter_input(INPUT_GET, | ||
| Line 58: | Line 66: | ||
| filter_input/ | filter_input/ | ||
| - | ===== 適合コード例 ===== | + | ===== 適合コード例 |
| + | <color # | ||
| <code php> | <code php> | ||
| if (!is_numeric($_GET[' | if (!is_numeric($_GET[' | ||
| Line 66: | Line 75: | ||
| </ | </ | ||
| - | このコードfilter_var()/ | + | このコードfilter_var()/ |
| + | |||
| + | |||
| + | ===== 非適合コード例(Text handling)===== | ||
| + | |||
| + | 前提条件: $_GET[' | ||
| + | |||
| + | テーブル定義: | ||
| + | <code sql> | ||
| + | CREATE TABLE mytable ( | ||
| + | " | ||
| + | ); | ||
| + | </ | ||
| + | |||
| + | |||
| + | <color # | ||
| + | <code php> | ||
| + | <?php | ||
| + | $db = pg_connect(' | ||
| + | |||
| + | $name = filter_var($_POST[' | ||
| + | if (strlen($name) !=== strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | |||
| + | $sql = ' | ||
| + | pg_query_params($sql, | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | PostgreSQLは文字列型(text/ | ||
| + | |||
| + | ===== 適合コード例 (mb_check_encoding)===== | ||
| + | |||
| + | <color # | ||
| + | <code php> | ||
| + | <?php | ||
| + | // Set default_charset | ||
| + | ini_set(' | ||
| + | // PHP 5.5 or less requires more encoding settings | ||
| + | ini_set(' | ||
| + | mb_regex_encoding(' | ||
| + | |||
| + | $db = pg_connect(' | ||
| + | |||
| + | // Validate char encoding is UTF-8 | ||
| + | if (mb_check_encoding($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | |||
| + | $name = filter_var($_POST[' | ||
| + | if (strlen($name) !=== strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | |||
| + | $sql = ' | ||
| + | pg_query_params($sql, | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | 文字エンコーディングバリデーションが必要となる場面はデータベースに出力する時点のみでなく、XMLなどの処理にも必要である。このため、文字エンコーディングバリデーションは入力処理時に集中して行うと効率が良い。 | ||
| ===== 例外 ===== | ===== 例外 ===== | ||
ja/rule/inp/デフォルトで初期化される外部入力をバリデーションする.1458438599.txt.gz · Last modified: 2016/03/20 01:49 by yohgaki
