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内に表示されなくなる = クリックジャッキングできなくなるよ。
はい、おわり!
難しいことしなくても、これだけで全然セキュアになるよ!
簡単な理屈を知りたい人はこっちも読んでみてね → セキュリティまんが
↓あとたぶん、この記事のブックマークコメントにも、セキュリティの偉い人の指摘がずらずら並ぶと思うから、気が向いたら参考にしてみよう!
2012/01/26
ぼくの考えたすごいブラクラ
こんにちはこんにちは!!
今日はiPhoneのちょっとしたメモです!
まずはデモ。
スマホで見るといいかも?→ http://bit.ly/wbKXXG
・iPhoneのSafariはaudio要素が使える
・audio要素はブラウザ上で音声を再生できる
・iPhoneだとマナーモードでも音声を再生する
・ただしiPhoneで自動再生はできない
・そのかわりクリックイベント経由などで再生することはできる
ということは…
・うまくクリックを誘発するような画面をつくり (バッテリー警告そっくりのダイアログ出すとか)
・人に聴かれては困るような音声を埋め込んでおき
・電車の中などでiPhoneを使っている人が多い時間帯を狙って…
などとtwitterに流すことによって、
下手をするとブラクラで人が死ぬ。
…というのを考えてみたんだけど、
やっぱり技術は善いことに使うべきだと思い直しました!!!
だから防犯ブザーをつくってみたんだよ☆
暴漢に襲われた時に使ってくださいね!
iPhone用防犯ブザー: http://hamachiya.com/junk/iphone/a.html
(追記) Android だと開くだけで自動再生するそうです。べんりですね。
2012/01/24
ぼくにとってのゲームのモチベーション
こんにちはこんにちは!!
ゲームのモチベーションについて思ったことを書いてみようと思います!
最近ほら、特にソーシャルゲームまわりとかで
ゲームのモチベーションについての色々な意見がでてるよね。
ハマる要素、そして課金したくなる要素とは…! みたいな。
で、色々な人が色々なこと言ってる。
「ランキングで上位にいくため」とか、
「着飾りたい」、「俺TUEEEEEしたい」、「認められたい褒められたい」、
「つまり承認欲求だ!」とか、
色々いわれてるよね。
でも、ぼくにとって、ゲームのモチベーションっていうのは、
「タスクの消化」につきるように思えるよ。
『 (心の中の) タスク表から、すべてのタスクリストを消したい』
ぼくは、だいたいこれがすべてじゃないのかなぁ、って。
普通のゲームなら…
・未踏の地を調べる
・すべての宝箱をひらく
・パラメータを上限まで上げる
・最強の武器を手に入れる
・エンディングをみる
こんな感じだよね。
これらぜんぶ、ぼくにとっては消化すべきタスク。
エンディングそのものをみたいからじゃなくて、
「エンディングをみる」というタスクを消化したいからそれをやってる。
これってたぶん昔からゲームを作ってる側の人にとっては、当たり前すぎることかもしれない。
言い換えれば「魅力的な目標設定」だもんね。
そしてその本質は、ソーシャルゲームになっても変わらないと思う。
たとえばRPGなら最強の戦士の育成や、RTSなら最強の軍隊を作ることと同じように、
カードバトルなら「最強のデッキの構築」っていうのがあるんだけど、
それらにしても、作ったあとの「蹂躙」はオマケに過ぎなくて、
「最強を作り終える」というタスクの消化の方が、ぼくにとっては大事かな。
ゲームセンターの対戦格闘ゲームにしたってそう。
勝つことそのものよりも、
「相手と良い闘いができるくらいの技術を身につける。やりこむ。ゲームを全て知る」ってタスクの方が大事だった。
これまで色々なネットゲームやソーシャルゲームにハマってきたし、
GREEやモバゲーのカードゲームでたくさん課金もしたんだけれど、
どれもこれも、決して「俺TUEEEEE」をやりたかったわけじゃなかったんだよね。
ただ、積み重なるタスクを全て消化してスッキリしたかっただけ。
そしてそれが楽しかった。テトリスみたい。
みんなはどうだろう?
2011/11/29
ソーシャルゲームがパチンコよりも優れている理由
こんにちはこんにちは!!
最近テレビCMすごいですね…!
GREEとかモバゲーの携帯向けゲームの。
いわゆるソーシャルゲームと呼ばれているやつですね!
でもこれ、はてなブックマークや2chみたいな「ネットに強い人たち」が集まる界隈だと、
だいたいちょっとバカにされて(?)いるんだよね。
「情報弱者から搾取してる」
「あんなものパチンコと同じだろう」
「無料で釣って騙してる」
「遊んでる側も、作ってる側もクズみたい」
こんな意見をよく見かけるよ。
うん、よくパチンコと比較されて「同じような悪いもの」とされている気がする。
それでぼくも似たような感覚を持っていたんだよね。
たしかに今は儲かるんだろうけど、
ああいうのは、なんとなく良くないものなんじゃないかなぁって。
それで、先日、友だちのzakiさんと飲みにいった時のこと。
たまたまその話題がでて、
ぼくが「パチンコと似ている」ってことを言った時に
興味深い話が聞けたので、ちょっと書いておきますね。
曰く
「違う、パチンコよりもずっと良いものだよ」と。
以下、ぼくがどうして?と聞いた時の答えなんだけど、妙に感心したよ。
言われてみれば、すごくあたりまえのことなのかもしれないけれど。
はまち:え、どうして?
zaki:パチンコはさ、(店が) 儲かった金が闇に消えるだろう?
はまち:そんなきがする
zaki:ソーシャルゲームの場合は、仮にも上場しているそれなりの企業がやっているわけだから、
あれで儲かった金は、ちゃんと税金として国に納められるんだよ。
それに、金が闇に消えずにちゃんと回る。金が回れば景気も良くなる。
それがパチンコよりもずっと良い理由
はまち:なるほど!
確かにその通りだなーと思った。
あとついでに、いま勢いのある業界が、腕の良いWebエンジニアを奪い合うことによって、
巡り巡って、ぼくたち、ふつうのWebエンジニアの価値と給料もあがるかもしれないしね。
2011/10/05
こういうiPhoneグッズが欲しい
こんにちはこんにちは!!
こういうiPhoneグッズが欲しいのです。
あやしい目的じゃなくて、
ごはん撮るときとかに、普通に気を使うときがあるから。
(関連エントリー)
ついに我が家にも無線LANを導入しました!