ぼくはまちちゃん!(Hatena)

  • ライブドアリーダーで読む → Subscribe with livedoor Reader
ぼくはまちちゃん!のRSSフィード

2012/02/15

5分でできるPHPセキュリティ対策

こんにちはこんにちは!!
Webプログラミングしてますか!

よく「PHPはセキュリティがダメ」とか言われてるよね。

でもそれって、べつにPHPが悪いんじゃなくて、
たぶん、セキュリティとかが、まだよくわからない人が多いだけなんじゃないかな。

がんばって勉強しようと思っても、なんだか難しい理屈が並んでいたりするしね…。


なので今日は、セキュリティ対策について、
「これだけやっとけば、わりと安全になるよ」ってことを、初心者むけに、大雑把に書いてみます!

理屈がわからなくても、最初はコピペでも、
なにもやらないより、やったほうがきっとマシになる!


1. XSS対策

動的なものを表示するとき、全部エスケープすればokです!

(NG) あなたの名前は <?= $name ?> ですね!

(OK) あなたの名前は <?= htmlspecialchars($name, ENT_QUOTES) ?> ですね!

これだけ。
ただし全部やろう! 忘れたところがセキュリティホールになるよ。

あと初心者のうちは、たとえ htmlspecialchars を使っても
JavaScript、CSS、htmlの属性部分(※)には、原則として動的なものを埋め込まないようにしようね。
※<div<?= htmlspecialchars($data, ENT_QUOTES) ?>> ←こういうことしない

※※あと文字コードはUTF-8を使おう。 どうしてもそれ以外を使いたいひとは、ここ参考に



2. SQLインジェクション対策

動的なSQLを使うとき、プリペアドステートメントをつかえばokです!


(NG) $res = $mdb2->query('SELECT name FROM users WHERE id=' . $data);

$sth = $mdb2->prepare('SELECT name FROM users WHERE id=?');
$res = $sth->execute($data);

がんばって自分でエスケープしようとしないで、
こうしておけば、あとはDBがうまくやってくれるよ!



3. CSRF対策

これについては簡単なコードを書いてみたよ。

EasyCSRF

20行くらいなんでコピペしたり、眺めたり、改造したりして使ってみてね!



4. クリックジャッキング対策

.htaccessファイルに次の一行を書くだけ。

Header set X-FRAME-OPTIONS "DENY"

もしレンタルサーバーなどで上のやり方ができない・エラーになる時は、
PHPでhtmlを出す前のところに次のように書く。

header('X-FRAME-OPTIONS: DENY');

これだけで、そのページは、
他のページのiframe内に表示されなくなる = クリックジャッキングできなくなるよ。


はい、おわり!
難しいことしなくても、これだけで全然セキュアになるよ!

簡単な理屈を知りたい人はこっちも読んでみてね → セキュリティまんが

↓あとたぶん、この記事のブックマークコメントにも、セキュリティの偉い人の指摘がずらずら並ぶと思うから、気が向いたら参考にしてみよう!