10月 162012
 

おはようございます。ファガイです。

今日は昨日思ったこと書きます。まとまってないので、書いていくうちにまとまっていくはず。

自分がPHPフレームワーク(Fuel)を勉強するようになってから、最近いろんなことで自分が変化していくことに気づいてきた。

オブジェクト指向は大体理解できてきたけど、フレームワーク何回も挫折して、物作ったことないよう・・・・なPHPerにこの記事は勧めたい。

まず、はじめに言えることがある。それは思った時に調べて実践することが大事だということ。

まぁ、なんでそんな事言うかって言うと、俺の場合によくあることだ。
一応、調べておくけど、結局調べただけで詳しく調べて実践しない。つまり何が言いたいかというと、俺はPHPだとファイル操作系やDB周りが苦手だ。(他にも色々ある)
だが、 http://csslg.doujin.so/ これを作れた。
ここで、俺は重大なミスをする。「結局は調べればなんでも出来る」と。実際、話としては間違ってはいないと思うのだがこのアプリを作れた1つの理由は俺はHTMLとCSSを独学していたということである。そしてjQueryというものを知り、元々JavaScriptの文法は苦手だった俺がjQueryを使えばほとんど難なくこのアプリを作ることが出来た。
ここでなぜ俺がjQueryを使えば難なくいけたのか。それは書き方の簡易さと値の取得の簡易さがあると思う。
そしてそれは自分が知っていること(例えばHTMLのセレクター)が含まれているということ。
この知っている、が大事。

知っている、というのはただ知っているだけという事なのだが、理解していなければそれを使いこなすことは出来ない。ここで俺は知っているの意味が曖昧何じゃないかなと思う。俺は元々ボキャブラリーが少なく、知っているを理解している、と同等の意味と勘違いしてしまった。

だが実際は違っていて、例えばファイルのアップロード系はまずやってみなくてはわからない。だが、リファレンス本等に書かれてるからまあ後でいいだろうと考える。そこがもう間違っているのだと思う。
ファイルのアップロードなら、どんなに汚くて、脆弱性があったとしてもアップロードして、そのファイルを保存し、そのファイルの内容を表示してみるという一連の動作をしておくべき。
最終的に脆弱性とかの話っていうのは別の本で学べばいい。(例えば徳丸本)

つまりは、あまり飛ばして考えてもアイデアは生まれない。正確には、ファイルのアップロードのコードを書かずに、大きなものを考えてもアイデアは破棄される。その結果、アプリケーションを作れないことに繋がる。ちなみに、この大きなものというのは自分の中でのアプリケーションの大きさである。大規模という意味でもない。

また、もう一つ良い事を書こう。
ある程度フレームワーク等を理解できた時(本等を1冊終わらせた時)、他人が作ったコードを見たほうがいい。今ならgithub等、いろんな所に他人の作ったコードはあるからあまり困らないだろう。
私の場合だと、FuelPHPをある程度理解できたから、勉強会の時に知ったstationwagonというFuelPHPで作ったブログシステムを解析することにした。(FuelPHPは最近出来たフレームワークでありまだ小規模なアプリケーションが多かったので私は容易にこれを見つけることが出来た)
まあ、他人のソースコードというものを見て理解するのは難しいのだが、完璧に理解しなくてもいい。わからなかったらマニュアルを見てみる。それでもわからなかったら後にとっておく。ここで俺がわからなかったのはAuthパッケージやSessionクラス。はじめてのフレームワークとしてのFuelPHPには詳しく述べられておらず、この段階ではまず理解できなかった。
しかし、Sessionクラスのset_flashやget_flashに関してはある程度わかった。なぜかというと、他のフレームワークでも同様の書き方をしているから。調べていれば次第に日本語で書かれたブログ等が出てくる。そこで俺は理解した。

また、Authパッケージに関してはFuelPHP入門が役に立った。はじめてのフレームワークとしてのFuelPHPに書かれていないクラスの内容が詳細的に述べられている。しかし、実践的ではない。いや、実践的ではないわけではないのだが多少作りに問題があるといった所。ここではじめてのフレームワークとしてのFuelPHPで覚えた知識が役に立つことになった。

この循環に入れたことは自分としてもとても良いことだと思う。まずもって、FuelPHPの勉強会に参加していなければFuelPHPとは出会うこともなく、はじめてのフレームワークとしてのFuelPHPにも出会ってないのだ。(FuelPHP入門は書店に置かれているので次第に知ることにはなったかもしれない)

最後に言えることをまとめる。
1.思った時にすぐ調べて実践する。実践することが大事だ。
2.他人のソースコードを読んでみる。分かる所だけでもいい。
3.本を買う。そして読む。最初は実践的な物が良いと思う。リファレンス本はほぼ必須
4.勉強会に参加する。なんとなくがむしゃらにやるよりも先人の言葉はとても役に立つ。

こういうことではないかと思う。
そして、関係ないが、今俺はニートだ。そして仕事の意義を探している。だって、意味なく仕事をやるということは自分自身にとってどうなのだろうと思うから。結局仕事の知識が役に立つこともあるけど、自分みたいに根だけはまじめだと自分は役に立ってないんじゃないかとネガティブになっていく。まあ、それは自分の考えが甘いからなのだと思っている。こういう物を作りたいからこの会社に入る。これだと自分がその物を作りたい、ということに考えが行く。つまりは、仕事に面白さを持たなくなる。だから俺はもう少し仕事の意義というものを勉強会等で確実なものへ変えれたらなと思う。

 Posted by at 8:46 AM
8月 192012
 

PHPのセキュリティに関してニコ生で勉強してた内容。

■PHPセキュリティ
register_globals:GETやPOSTで送信された変数をグローバル変数として使用出来る。超危険。初期ではOffになっている。(php.ini)
対処方法→register_globalsをOffにする。

■フォームに入力された値のチェック
入力チェック対策
1.データベース追加スクリプト(サーバ)でもエラーチェックを行う。
2.データベースのテーブル定義にて、未入力不可にする。(テーブル定義時にフィールドのNOT NULLおよびCHECKを指定しておく。)
3.フォームの入力チェック時には、自分で指定したパラメータ以外も来ることを想定しておく。→サーバサイドで適切な値チェックを行う。

■ファイル操作時の注意点
1.「../」等、カレントディレクトリを示す文字列は適切に変換する必要がある。[string str_replace(‘../’, ”, 文字列)] or [bool preg_match(‘\.\./’, 文字列)]

{クロスサイトスクリプティング:ユーザからの入力を動的に反映するWebサイトで発生するセキュリティ上の問題。複数のサイトにまたがって実行される}

■クロスサイトスクリプティング対策
1.「’」や「”」などのスクリプトを実行できてしまう文字を使えるようにしない。
2.htmlspecialcharsや、htmlentitiesを使用して文字をエスケープする。[htmlspecialchars(文字列, flags定数, 文字エンコード)][htmlentitiesでも同様。ただ、HTMLエンティティと等価な意味を有する文字をHTMLエンティティに変換する⇔html_entity_decode()]
・対策をする時
1.データ入力時(ファイル等に直接データ追加,メール経由等でデータ追加等)
2.データ出力時(ファイルに出力時,メール送信時)

補足
<a href=”~”>等に変数を出力する場合はhtmlspecialcharsでは対応出来ないので正規表現等を使う必要がある。(変数にjavascriptが含まれていないか等)
・何故対応出来ない?
URL内に「javascript:」と記述されると実行できてしまうから。(よくある例:javascript: void(0);)グローバル空間にメソッド定義してしまうとそれも呼ぶことができてしまう。

■クエリストリングの考慮
クエリストリング:Webページを呼び出すURLの中のパラメータの部分を指す。(URLの?以降のこと)
1.リダイレクトをする時にはSESSIONを用いるわけでもなく、、、その時に応じて臨機応変に対応(出来るだけリソースは少ない形で)

■複数画面間のパラメータの引渡し
1.inputタグのhidden属性利用は避けれるなら避ける。
2.hidden属性を利用するのであれば、その先のスクリプトでもバリデーションをかける。(アンケートフォーム等)

■ソースコードの流出(インクルードファイルの流出)
「*.inc」等のファイルにアクセスすると、ソースがそのまま表示される可能性がある。
・対策
1.「*.inc」というインクルードファイルの名前の付け方はしないようにする。(「*.inc.php」等が良いはず)
2.拡張子「.inc」もphpとして処理する。(httpd.conf等で、AddType application/x-httpd-php .php .incの様な指定をする)
3.ブラウザからアクセス出来ない場所に置く

補足
・「.htaccess」設定が出来ない時
httpd.conf内ののAllowOverrideの設定をAllにする。

■セッション管理の注意点
1.URL埋め込みのセッションIDは携帯のみにする。というか携帯でも埋め込みたくない。理由は、REFERERで外部から取得ができてしまうからである。
2.トークンを発行して管理するとなお良い。

■クッキーの改ざん
Cookie:サーバとクライアントのブラウザ間でやりとりされる情報の1つ。自分で内容を改変するのが簡単である。
クッキーの保存時間はしっかりと指定を行う。ECサイト等で管理する場合は、値段は入れておいても良いが、情報の確認は不可欠である。
とりあえず、Cookieを使うなら一度改変して、おかしくならないかテストをした方が良い。

参考文献:九天社「PHP実践のツボ セキュアプログラミング編」

 Posted by at 1:50 AM
7月 022012
 

こんにちは。ファガイです。
もう、7月ですね。
毎日のように暑い日が続きますね。雨も降ったりしてたまに、じめじめとしてますがw

もう、会社に入って3ヶ月になります。時間が経つのは早いものです。もう3ヶ月なんて・・・・。
えっとですね、あまり成長してないです。
悩んでいてもそれを解決してくれる人がいない。=時間を沢山かけて自分で解決するしかないわけですよ。

自分が思うことですが、悩みすぎても時間はすぎる訳で。10分悩んで光が見えて来なかったら知ってる方に聞いて知識にしたほうがいいと思うのです。
まあ、居ないのですからしょうがないですよね。

ベンチャー企業に入って良かったことなのかわからないですが、そういう点を上げると、
・怒られ耐性が少し付いた
・自分の知っていた情報の不備に気づいた
・自分に変化を付けれることに気づいた。

という所です。

なんなんでしょうね。ベンチャーにも悪くない所はあります。ブラックでなければ。でも、自分で考えて、解決していかなくてはいけない。ここが難しいところです。多分、自分で何かやりたい!とかいう人には最適かな。他の人にはあんまりおすすめできないです。

いきなり、訳も分からず設計書書いてとか言われますし、なんなのでしょうね。

ではでは。

6月 202012
 

こんばんは。ファガイです。

最近、新卒なのにプロジェクトを任されてて、もう毎日が大変な日々を送っております。
大変だなー、と思いつつやってるわけで。まずはメリットとデメリットを話しましょうか。(因みに今回は新卒だけでプロジェクトを任された想定です)

■メリット
・信頼されている
・いきなりプロジェクトに入れる

■デメリット
・プロジェクトの動かし方が分からない
・ノウハウを教えてくれる先輩がいない
・スピードが遅いと、追加注文が来る
・デスマが基本
・プレッシャーが凄いので挫折しそうな時も。

こんな所でしょうかね・・・。
それで、自分がプロジェクトに関わってきてこれなら問題ない!と思える方法を紹介します。あくまで、私の判断なので間違ってる可能性が高いです。その時はご教授お願いいたします。

0.要求定義書を作る(必要な場合)
1.機能要件、画面遷移図、その他必要な物を作る
2.ラフデザイン
3.本デザイン、コーディング
4.プログラミング
5.テスト

こうなる訳なんですが、1、2、3がとても厄介です。
まず、ドキュメントの作り方や、どのドキュメントを作ればいいのか分からないということです。大抵、このドキュメントが足らずに2や3に行ってしまい、デスマにたどり着くわけです。
これを起こさないためにも、しっかりとドキュメントは作るべきです。と、言っても何作ればいいの!!という話ですね。私の場合は画面機能設計、画面遷移図を制作したわけですが、現状で色々手直しが必要な状態です。
 結論を言ってしまうと、スピード上げて3までやる。1回で通ることはまず無いので、スピードは相当早く。でも、スピードを早くと言っても、結局はあまりやってきていないために、スピードは上がってくれません。

何か良い方法があればいいのですが、現状ではまだ分からないです。
でも、しっかりと挫折しない力は付けてたほうが良いかも知れません。

わかってきたら、また記事を書こうと思います。
では。

 Posted by at 1:12 AM