User Tools

Site Tools


ja:rule:out:エスケープの必要がないapiの制限を熟知する

This is an old revision of the document!


エスケープの必要がないapiの制限を熟知する

出力を無害化する方法には

  • エスケープする
  • エスケープする必要がないAPIを利用する
  • バリデーションする

の3つの方法がある。「エスケープする必要がないAPI」は盲目的に利用して安全とは言えない。

非適合コード例(Prepared query)

プリペアードクエリ/プレイスホルダーはSQLパラメータとSQL文を分離し、SQLインジェクションを防止できる。しかし、SQL識別子、SQL語句の分離は行えない。またLIKEクエリや正規表現によるクエリを利用する場合、それぞれLIKE構文、正規表現構文に合ったエスケープを行わないと安全性を確保できない場合がある。

 

適合コード例(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の制限を熟知する.1458528853.txt.gz · Last modified: 2016/03/21 02:54 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki