こんにちはこんにちは!!
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内に表示されなくなる = クリックジャッキングできなくなるよ。
はい、おわり!
難しいことしなくても、これだけで全然セキュアになるよ!
簡単な理屈を知りたい人はこっちも読んでみてね → セキュリティまんが
↓あとたぶん、この記事のブックマークコメントにも、セキュリティの偉い人の指摘がずらずら並ぶと思うから、気が向いたら参考にしてみよう!