先日、仕事で作った初めてのDB。
本やサイトを見ながら作ったので、一応セキュリティは大丈夫なはず!
でもセキュリティのポイントをよく理解していないので、(自分のやったことだから余計に)不安。
今後のためにも、改めて見直し&調べてみました。
DBに接続のIDやパスワードなどは別ファイル化が安全!
本の通りに作っていると、SQL文の中にIDもパスワードもそのまま入力した形式で記述されています。
セキュリティを考えると、できればIDやパスワードは別のだいるにして、尚且つ別の階層に置きたいところです。
そこで、こちらのサイトを参考に、IDとパスワードを別ファイルにして、接続SQL文を記述したファイルも別ファイルにして、尚且つ両方とも非公開ディレクトリに移してみました。
エラーメッセージにDBのアドレスが出るのも危ない
一般公開されたDBで、万が一エラーが出てDBのアドレスが出ちゃうのは絶対に避けたいですよね。
そんな時、頭に@をつけるだけでその文のエラーメッセージは表示されないようです。
ちなみに・・・今回作ったのは社内の数人だけが使用するのですが、一応.htaccessによるベーシック認証をかけています。
一般公開されているものではないので、@付けは今回は未対応にしました。
_POSTや_GETは適切に処理すべし
前記事で、
htmlspecialchars と mysql_real_escape_string の違い
- mysql_real_escape_string|DBに渡すとき
- htmlspecialchars|サイトに表示するとき
と記しました。これに補足です。
- mysql_real_escape_string|DBに渡すとき
特殊文字をエスケープしてDBに渡してくれる
- htmlspecialchars|サイトに表示するとき
特殊文字をHTMLエンティティに変換してくれる
|__ ENT_QUOTES|シングルクオートも ' にエスケープしてくれる
セキュリティ関連で検索すると、すごーくたくさんのページが表示されます。しかも難しそうな文書が多かったりorz
今回調べてみた結果、IDとパスワードの別ファイル化・_POSTと_GETの時の処理は、忘れずにやらなければいけないことだと分かりました。
エラーメッセージについては、構築する際にエラーはつぶしておくべきですが、予期せぬエラーが起こった時のためにも、やっておいた方が良いんでしょうね。