User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
ja:rule:out:エスケープの必要がないapiの制限を熟知する [2016/06/28 06:44] – [非適合コード例(Execv, Execve)] yohgakija:rule:out:エスケープの必要がないapiの制限を熟知する [2016/06/28 06:56] (current) – [適合コード例(Validation)] yohgaki
Line 58: Line 58:
  
 ===== 適合コード例(Validation) ===== ===== 適合コード例(Validation) =====
 +
 +通常のホワイトリストによるバリデーションを行う。
  
 <code php> <code php>
 +<?php
 +if (!isset($_GET['cmd']) || strspn($_GET['cmd'], 'abcdefghijklmnopqrstuvwxyz') !== strlen($_GET['cmd'])) {
 +  throw Exception('cmd validation error');
 +}
 +foreach($_GET['params'] as $param) {
 +  if (strspn($param, 'abcdefghijklmnopqrstuvwxyz1234567890') !== strlen($param)) {
 +    throw Exception('param validation error');
 +  }
 +}
 +
 +pcntl_exec('/path/to/user/cmd/'.$_GET['cmd'], $_GET['params']); 
 </code> </code>
 +
 +バリデーションの注意点
 +
 +  * コマンド引数でパストラバーサルが可能な場合、任意コマンドに実行許してしまう。コマンドとして"."(ピリオド)、"/","\"(スラッシュ、バックスラッシュ)の許可には十分な注意を払う。
 +  * パラメーター引数は指定したコマンドにより、更に別のコマンド実行に利用される可能性もある。この為、シェルの特殊文字を一文字でも許可するとリスクが発生する。文字種によるバリデーションより、特定の文字列のみをホワイトリスト形式でバリデーションする方がより安全性が高い。
  
  
ja/rule/out/エスケープの必要がないapiの制限を熟知する.1467096250.txt.gz · Last modified: 2016/06/28 06:44 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki