ja:rule:out:エスケープの必要がないapiの制限を熟知する
This is an old revision of the document!
Table of Contents
エスケープの必要がないAPIの制限を熟知する
出力を無害化する方法には
- エスケープする
- エスケープする必要がないAPIを利用する
- バリデーションする
の3つの方法がある。「エスケープする必要がないAPI」は盲目的に利用して安全とは言えない。
非適合コード例(Prepared query)
プリペアードクエリ/プレイスホルダーはSQLパラメータとSQL文を分離し、SQLインジェクションを防止できる。しかし、SQL識別子、SQL語句の分離は行えない。またLIKEクエリや正規表現によるクエリを利用する場合、それぞれLIKE構文、正規表現構文に合ったエスケープを行わないと安全性を確保できない場合がある。
<?php $db = pg_connect('host=localhost'); $result = pg_query_params($db, 'SELECT * FROM user_table_prefix_'.$_GET['tblname'].' WHERE id = $1', [$_GET['id']]);
適合コード例(Escape)
プリペアードクエリ/プレイスホルダはSQLパラメーターしか分離しない。他のパラメーターやSQLパラメーターが他のコンテクストで解釈される場合は別の対策が必要となる。
非適合コード例(Execv, Execve)
OSのシステムコールとしてexecv/execveなどを利用するAPIを用いれば、OSコマンドの引数をエスケープせずに安全に利用できる。execv/execveはコマンドと引数を分離するが、コマンド自体が変数の場合は任意コマンドを実行できる。
PHPの場合、pcntl_exec関数はexecv/execveを内部的に利用している。
適合コード例(Validation)
例外
例外はない。
リスク評価
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
| IDS05-J | medium | unlikely | medium | P4 | L3 |
関連ガイドライン
参考文献
ja/rule/out/エスケープの必要がないapiの制限を熟知する.1467091745.txt.gz · Last modified: 2016/06/28 05:29 by yohgaki
