人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php(cakephp)のセキュリティ実装に関する質問です。
以下ipaサイトの7-(ii)に、
”外部からの入力の全てについて、改行コードを削除します。あるいは、改行コードだけでなく、制御コ
ード全てを削除してもよいかもしれません。” とあります。
http://www.ipa.go.jp/security/vuln/documents/website_security.pdf

それで、textareaは無い前提で、例えば、ログインというアクションの実装した場合を考えた場合
のようなコードが考えられますが、その場合、

バリデーション処理

$this->dataの改行文字(or制御文字をreplace)

ログイン処理

のような実装の流れと考えましたが、その認識はあっていますでしょうか。
(ネットのいろんなページで、サンプルコードがありますが、
あまり上記のセキュリティの脆弱性を考えられたコードがないのか、
それとも私の考えが至らないのか、Sanitize::cleanとか見ないので、
疑問に思いました。)

あと、sanitize::cleanは、制御文字はエスケープしないと思うので
さらに、制御文字をpreg_replaceするように同じ場所で処理したほうがいいという
認識であっていますでしょうか。

どうぞよろしくお願いします。


●質問者: FujiiRock
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●50ポイント

のような実装の流れと考えましたが、その認識はあっていますでしょうか。

合っています。

まず、バリデーションチェックします。
たとえばログイン文字として許しているのが半角英数字8?12桁であるなら

preg_match('/^[a-zA-Z0-9]{8,12}$/', $data);

のようにして、正規表現でマッチングさせるとシンプルで応用範囲も広いです。

バリデーションチェック後は、ユーザー側にエラーを送って再入力を促します。

バリデーションチェックができていればサニタイズの必要はありませんが、もしやるのであれば、たとえば制御コードのみを取り除くのであれば、正規表現を使って

$data = preg_replace('/[\x00-\x1f\x7f]/', '', $data);

とやることが多いです。

Sanitize::cleanは、SQLインジェクション対策が主な目的であることと、v.1.1と1.2で挙動がだいぶ違っていることから、HTMLからの入力データをサニタイズする目的ではあまり使われません。

【参考】データのサニタイズ(CakePHP公式)

http://book.cakephp.org/2.0/ja/core-utility-libraries/sanitize.html


2 ● pretaroe
●50ポイント

>php(cakephp)のセキュリティ実装
>あまり上記のセキュリティの脆弱性を考えられたコードがないの
方針によるかと思います。

・POSTなどの受け取り時の処理
・SQLを発行する前の処理
・WEBに出力する時の処理

を決めて、ルールを決め、ルールを徹底するために、ラップ関数などを作るなどするかと思います。


>あと、sanitize::cleanは、制御文字はエスケープしないと思うので
>さらに、制御文字をpreg_replaceするように同じ場所で処理したほうがいいという
>認識であっていますでしょうか。

POSTなどの受け取り時の処理で、改行を取り除くと決めたなら
質問通りの処理で問題ないと思います。

正解は何通りもある問題なので、あとは選択の問題です。

チェックは必ずリクエスト処理の最初に行われる入力バリデーション処理で行い,不正な文字エンコーディングを検出した場合にはリクエスト処理をエラーにして終了させます。サニタイズして処理を継続してはいけません。不正な文字エンコーディングの不都合がある部分だけを取り除くと,別の問題が発生する場合があるからです。

PHPの場合,文字エンコーディングが正しい文字エンコーディングであるかチェックするための関数,mb_check_encoding関数を利用して,入力チェック時にすべての文字列の文字エンコーディングが期待している文字エンコーディングとして妥当であるかチェックします。
http://gihyo.jp/dev/serial/01/php-security/0027

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ