アカウント名:
パスワード:
> 重複はできるだけ廃したいところだが、どこにどのような穴が存在するかは分からないわけで
むしろ、どこに穴が生まれるか判らないからこそ、重複を避けたいと思うんだけど…。この重複と表現している部分が元記事を読んでも、正直良く判りません。
重複を避けるの意味を、PHPでよく使う処理をfunctionにまとめることだと思ったんですが、それが何故セキュリティホールにつながっていくのか、そこもイマイチ判然としません。
もし何か私が誤解しているようなら、ぜひ指摘していただけないでしょうか。
入力チェック処理をどこで行うかということですね。
理論的には1回で大丈夫なんだけどプログラマは完璧ではないし、ミスることはあるので入力チェックはなるべく複数のところで行った方がより確実だよってことですね。
例えば、一番最初に入力チェックをやるのは当たり前としてDBへのアクセスの前にもチェックを行う方がより安全でしょう。自分の場合は表示の部分でも出来るだけチェックして、たとえ変なタグがDBに入力されても問題が起きないようにしているけどね。
特に複数の人で作っていると、DBも必ずしも安全とはいえないし(誰が変なプログラム作るかわからないしw)そんなプログラム作る人ほど他人のせいにしてくる人も多いから、共通モジュール作る時などは特に注意するね。
「重複を廃した効率的なコードを目指したために多重のセキュリティ対策を行わず、その結果対策漏れが発生する」というのは用意されたチェック関数だけだと危険、ということではないでしょうか?
関数に渡す前にチェック、更に関数の中でチェックと多重にチェックしていてもどちらも同じチェック関数だったら、チェック関数にバグがあった場合に一気に穴になりますよね?あくまでもそれぞれの箇所で・入力は信用しない・出力は(自分自身の手で)安全にしておくというのが推奨されるんじゃないかと。
数値しか入らないフィールドは一度数値型を通すとかそういう対策含めてですね。文字列の場合はなかなか難しいところがあるとは思いますが。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
完ぺき主義ではないけれど (スコア:0)
> 重複はできるだけ廃したいところだが、どこにどのような穴が存在するかは分からないわけで
むしろ、どこに穴が生まれるか判らないからこそ、重複を避けたいと思うんだけど…。
この重複と表現している部分が元記事を読んでも、正直良く判りません。
重複を避けるの意味を、PHPでよく使う処理をfunctionにまとめることだと思ったんですが、
それが何故セキュリティホールにつながっていくのか、そこもイマイチ判然としません。
もし何か私が誤解しているようなら、ぜひ指摘していただけないでしょうか。
Re: (スコア:0)
入力チェック処理をどこで行うかということですね。
理論的には1回で大丈夫なんだけど
プログラマは完璧ではないし、ミスることはあるので
入力チェックはなるべく複数のところで行った方がより確実だよってことですね。
例えば、一番最初に入力チェックをやるのは当たり前として
DBへのアクセスの前にもチェックを行う方がより安全でしょう。
自分の場合は表示の部分でも出来るだけチェックして、たとえ変なタグがDBに入力されても問題が起きないようにしているけどね。
特に複数の人で作っていると、DBも必ずしも安全とはいえないし(誰が変なプログラム作るかわからないしw)
そんなプログラム作る人ほど他人のせいにしてくる人も多いから、共通モジュール作る時などは特に注意するね。
Re: (スコア:0)
「重複を廃した効率的なコードを目指したために多重のセキュリティ対策を行わず、その結果対策漏れが発生する」
というのは用意されたチェック関数だけだと危険、ということではないでしょうか?
関数に渡す前にチェック、更に関数の中でチェックと多重にチェックしていても
どちらも同じチェック関数だったら、チェック関数にバグがあった場合に一気に穴になりますよね?
あくまでもそれぞれの箇所で
・入力は信用しない
・出力は(自分自身の手で)安全にしておく
というのが推奨されるんじゃないかと。
数値しか入らないフィールドは一度数値型を通すとかそういう対策含めてですね。
文字列の場合はなかなか難しいところがあるとは思いますが。