入力バリデーションとは、ユーザーからの入力データが期待する形式や範囲に合致するかを検証するプロセスです。 XSS 、 SQL インジェクション、コマンドインジェクションなど、多くの Web 攻撃の第一防衛線として機能します。
入力バリデーションには 2 つのアプローチがあります。ホワイトリスト方式 (許可するパターンを定義し、それ以外を拒否) とブラックリスト方式 (禁止するパターンを定義し、それ以外を許可) です。セキュリティの観点では、ホワイトリスト方式が圧倒的に推奨されます。ブラックリスト方式は攻撃パターンの網羅が困難で、新しい攻撃手法に対して脆弱になるためです。
短縮 URL サービスでは、ユーザーが入力する URL のバリデーションが特に重要です。検証すべき項目は、 URL の形式が正しいか (RFC 3986 準拠) 、プロトコルが http:// または https:// か (javascript: スキームの排除) 、ドメインがブラックリストに含まれていないか (フィッシングサイトの排除) 、 URL の長さが上限以内か、です。 javascript: スキームの URL を許可すると XSS 攻撃が成立するため、プロトコルのホワイトリスト検証は必須です。
バリデーションはクライアントサイド (ブラウザ) とサーバーサイドの両方で実施することが鉄則です。クライアントサイドのバリデーションはユーザー体験の向上 (即座のフィードバック) が目的であり、セキュリティ上の防御にはなりません。攻撃者はブラウザのバリデーションを容易にバイパスできるため、サーバーサイドでの検証が不可欠です。関連書籍は Amazon でも探せます。