Tag: 勉強’

SQLの勉強の過程で参考になった記事@PHPプログラマがおかしがちなミスTOP10

 - by naoki

SQLの勉強をしているときに出会ったサイト。
PHPSPOT開発日記さんのエントリーで参考になったものがあったので、ここに残しておきます。
すごく初歩的なことなんだけど、独学でやってる身としては参考になりました。

以下初級PHPプログラマがおかしがちなミスTOP10参照。
参照元URL:http://phpspot.org/blog/archives/2007/01/php_71.html

「PHPプログラマがおかしがちなミスTOP10」、という記事があったので紹介。
PHP初心者だとこういうミスがよくありますね。ということで今年からPHPをはじめようと思っている人には気をつけてほしいリストです。

生でクエリを出力しない
echo $_GET[‘username’];

echo htmlspecialchars($_GET[‘username’], ENT_QUOTES);

やらないとクロスサイトスクリプティングされます。
SQLクエリに$_GET,$_POST,$_REQUESTの値を直接含めない
$sql = “select * from table where id=”.$_GET[“id”];

$sql = “select * from table where id=?”; (プレースホルダを使う)
やらないとSQLインジェクションされます。
header, session_start, setcookieを何か出力した後に実行
悪い例)
echo “HOGE”;
header(“Location:/html/”);

// echo “HOGE”;
header(“Location:/html/”);
出力処理を先に行うとちゃんとheader関数が実行されません。session_start, setcookieも同様。
何かの出力処理の前に実行したい場合は出力をバッファリングしておいて、header呼び出しの後にバッファを出力する。
ユーザクエリを元にincludeしない
include($_GET[“filename”]);
そもそもこういったコーディングは危険なので避けるべきです。サーバにあるファイルが覗かれてしまいます。
php.iniのopen_basedirによる制限などもしておいた方がよいですね
php.iniのmagic_quotes設定による自動エスケープの罠
このオプション設定によって ‘ , ” , , NUL が自動エスケープされますが、それによってデータにエスケープ文字がはいってしまうという問題がありますね。
addslashes関数による2重エスケープなんかも起こることがあります。
マニュアルに、「マジッククオートは、PHPスクリプトに入力されるデータを 自動的にエスケープする機能です。 コードでは、マジッククオートをオフにして 実行する際必要な時にデータをエスケープすることが望まれます。」とあるので、それに従った方が良さそうです。
オープンソースなプログラムなんかでは、phpの設定は関係なく、どのサーバでもちゃんと動くようにget_magic_quotes_gpc関数によって設定を調べてstripslashesで取ったりする必要がありますね。

歴史の中の戦争の発端は僕のような人間だったのかもしれない

 - by naoki

酒飲みながら勉強すると酔いつぶれて起きた時には勉強した内容が頭の中から消えていることがある。
酔っぱらいながら勉強をしているとき、問題集なんかを実機を交えて解いていくわけだから大抵は答えに辿り着けるんだ。
でも、次に目が覚めたときにはその答えに辿り着いた方程式やノウハウなんかがすべて消し飛んでるわけ。
でもなんとなく理解した気になってる。
これは実に危険だ。
流し読みした参考書や教科書の文言や文章を”あたかも”自分が見つけ出した発見のように捕らえて虚像の満足感だけが残るから。
その虚像のアルコールでぼかされた満足感が根拠の無い自信に繋がって”中身の無い外堀だけの立派な城”と言う名のエセ知識だけが積み上げられていくからだ。
本丸はスカスカなのに。
これについて最近本当に気が付いて、振り返ると今まで”積み上げたと結果的に偽ってた知識”はそれがほとんどだった。
おぉ受験生よ。
同じ過ちだけは犯さないように忠告しよう。
世の中オイラみたいなスカスカの人間だらけじゃ、例え一時的に世界から戦争が排除されたとしても「なぜそのトラブルが発生したのか」に辿り着くことができないから。
その蔓延したナァナァの中で戦争という同じ過ちをまた繰り返してしまうはずだから。

勉強の意味は答えを見つけ出すことではなく、答えに辿り着く経路とその意味を知ることにある。
そして本当の答えはその先にあるんだ。

そんなことを今日は自分に言い聞かせて寝ます。
まぁいつんも通りベロベロですけど。