ja:rule:inp:正規表現に用いられる入力データにメタ文字がないことを確認する
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ja:rule:inp:正規表現に用いられる入力データにメタ文字がないことを確認する [2016/03/06 07:19] – yohgaki | ja:rule:inp:正規表現に用いられる入力データにメタ文字がないことを確認する [2017/07/04 01:28] (current) – [例外] yohgaki | ||
|---|---|---|---|
| Line 41: | Line 41: | ||
| 非適合なコードは信頼できないユーザーに対して正規表現となる文字列を許可し正規表現検索を実行する。 | 非適合なコードは信頼できないユーザーに対して正規表現となる文字列を許可し正規表現検索を実行する。 | ||
| + | <color # | ||
| <code php> | <code php> | ||
| function search_log($user, | function search_log($user, | ||
| Line 62: | Line 63: | ||
| 検索パターンにアルファベットのみを許可する。 | 検索パターンにアルファベットのみを許可する。 | ||
| + | <color # | ||
| <code php> | <code php> | ||
| function search_log($user, | function search_log($user, | ||
| Line 73: | Line 75: | ||
| } | } | ||
| + | // Length check | ||
| + | if (mb_strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | if (mb_strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| // $_POST[' | // $_POST[' | ||
| // must not contain other than alphabet chars. | // must not contain other than alphabet chars. | ||
| Line 86: | Line 95: | ||
| preg_quote()はPCRE正規表現のメタ文字をエスケープする。エスケープされた場合、元の文字列より長くなることを利用してバリデーションを行う。 | preg_quote()はPCRE正規表現のメタ文字をエスケープする。エスケープされた場合、元の文字列より長くなることを利用してバリデーションを行う。 | ||
| + | <color # | ||
| <code php> | <code php> | ||
| function search_log($user, | function search_log($user, | ||
| Line 97: | Line 107: | ||
| } | } | ||
| + | // Length check | ||
| + | if (mb_strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | if (mb_strlen($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | // Char encoding check | ||
| + | if (mb_check_encoding($_POST[' | ||
| + | throw new Exception(' | ||
| + | } | ||
| + | // Allow only following char patterns | ||
| + | if (!mb_ereg(' | ||
| + | throw new Exception(' | ||
| + | } | ||
| // $_POST[' | // $_POST[' | ||
| - | // must not contain | + | // must not contain |
| if (strlen($_POST[' | if (strlen($_POST[' | ||
| throw new Exception(' | throw new Exception(' | ||
| Line 111: | Line 136: | ||
| ログフォーマットが変更された場合に意図せず秘密にすべきログが取得できてしまう可能性がある点にも注意が必要である。 | ログフォーマットが変更された場合に意図せず秘密にすべきログが取得できてしまう可能性がある点にも注意が必要である。 | ||
| + | |||
| + | ユーザー定義正規表現を許可する場合、ReDoSに対してかなり脆弱になる。 | ||
| ===== 例外 ===== | ===== 例外 ===== | ||
| - | * 正規表現を利用するユーザーが権限を持つシステム管理者のみ限定されている場合。 | + | * 正規表現を利用するユーザーが権限を持つシステム管理者のみ限定されている場合、などそもそも検索対象全てにアクセス権限を持っている時。 |
| + | * 検索対象のデータが機密情報でない場合。 | ||
| ===== リスク評価 ===== | ===== リスク評価 ===== | ||
ja/rule/inp/正規表現に用いられる入力データにメタ文字がないことを確認する.1457248759.txt.gz · Last modified: 2016/03/06 07:19 by yohgaki
