何かを受け入れる、受け入れないという処理を行う時、処理の対象と仕方のリストを作成することになります。リストにはブラックリスト方式とホワイトリスト方式があります。
ブラックリスト方式は、基本的に受け入れを行い、リストに載っている対象のみを受け入れない方式です。
ホワイトリスト方式は、基本的に受け入れを行わず、リストに載っている対象のみを受け入れる方式です。
対象の領域が広いリストになってくると両方が組み合わさったような印象のリストができあがったりもします。例えば、ファイアウォールです。通信はプロトコル、送信先/元のIPアドレスとポートなどの要素で分類できます。
if(プロトコルがhttps){
if(送信元アドレスが以前攻撃してきた相手Aのアドレスではない){
受信する
}
if(送信元アドレスが以前攻撃してきた相手Bのアドレスではない){
受信する
}
}
受信しない
上のコードの場合、大本はプロトコルhttpsのみを認めるホワイトリスト方式ですが、最初のifを過ぎた後は以前攻撃してきた相手のアドレスを弾くブラックリスト方式です。プロトコルhttpsの範囲が広く、リスト中のリストが作れるため、この様になります。
リストを使用するシステムで問題が起きる時、その原因はよくリストの漏れにあります。リストの漏れによって起きる動作は、ブラックリスト方式が異常な対象を受け入れる、ホワイトリスト方式が正常な対象を弾く、です。異常な対象を受け入れた時に起きる問題の規模が大きければ大きいほど、ホワイトリスト方式を選ぶ理由が大きくなります。
リストの変更頻度を抑えるという方針を考えた場合、新たに現れた分類の様なリストに載せられない未知の対象に対する振る舞いの定義が土台のリストの方式を決定づけます。とりあえず受け入れるならブラックリスト、弾くならホワイトリストです。