僕が「ホワイトリスト」を採用しなかった訳


 使 Web使

ホワイトリストの分類

 私の調査によると、ホワイトリストは以下の3種類に分類されます。

 以下順に説明します。

許可されたものの一覧表(第一種ホワイトリスト


 IT2009



whitelist
URLIPURL
 http://itpro.nikkeibp.co.jp/word/page/10032299/  

 P136SQL
$sort_columns = array('id', 'author', 'title', 'price');
$sort_key = $_GET['sort'];
if (array_search($sort_key, $sort_columns) !== false) {
 ...

 $sort_columns
 P266
if ($ext != 'gif' && $ext != 'jpg' && $ext != 'png') {
  die('拡張子はgif、jpg、pngのいずれかを指定ください');

 PHPASPphpasp
 使

セキュリティ上安全と考えられる書式(第二種ホワイトリスト


 *1P39


8
 

 
 P238


使
 

 P298


eval
 ;,使
 

 OSP256使

アプリケーション仕様として許可された書式(第三種ホワイトリスト


 
 便ID
 OpenPNE3 


使
 http://www.openpne.jp/developer/secure-coding-guideline/#id7  

 
 OS



 http://www.openpne.jp/developer/secure-coding-guideline/#id11  

 

 CWECommon Weekness EnumratiSQLCWE-896


$userKey = getUserID();
$name = getUserInput();
# ensure only letters, hyphens and apostrophe are allowed
$name = whiteList($name, "^a-zA-z'-$");
$query = "INSERT INTO last_names VALUES('$userKey', '$name')";
 http://jvndb.jvn.jp/ja/cwe/CWE-89.html  

whiteList"^a-zA-z'-$"*2



使使
 http://jvndb.jvn.jp/ja/cwe/CWE-89.html  

 使

 4.2
 HTTP
 PHPP612
if (preg_match('/\0/', $array)) {
 die('不正な入力です');
}

 P77P78P82


 [:^cntrl:]POSIX
 

 
if (preg_match('/\A[[:^cntrl:]]{1,30}\z/u', $addr) == 0) {
  die('30文字以内で住所を入力してください(必須項目)。改行やタブなどの制御文字は使用できません');
}

 
preg_match('/\A[\r\n\t[:^cntrl:]]{1,400}\z/u', $comment)

 1400
 

WAFにおけるホワイトリスト


 WebWAF(Web Application Firewall)WAF
 WAF


 3SecureSphere WAFURLHTTPWAFSecureSphere
 SQL=>'
 http://thinkit.co.jp/story/2010/11/15/1872?page=0,2  

 WAFWAF
 2SQL=>'

ホワイトリストの混乱した説明の例


 3使AjaxP112


 便
 


使

@

@13使

.com.net.org1



 

 *3便便便HTML

 


使RFC822
 

 RFC822RFCRFC5322

RFC準拠のメールアドレスには「危険な」ものもある


 RFC5322SQL


'or'1'='1'#@tokumaru.org
 

RFCGmailPostfixDovecotBecky!Becky!*4Becky!


SQL

ホワイトリスト」を巡る誤解


 使
 使RFC5322SQLSQL使

まとめ


 使3)
 
 使
 

*1:使使使

*2: http://cwe.mitre.org/data/definitions/89.html 

*3:Ajax - ockeghem()

*4:GmailYahoo!DocomoauGooTO