もう8月号だってさ。
今月のテーマは「文字コード」。 各種文字集合(JIS X 0201とか0208とかUnicodeとか)や それぞれの符号化方式などについてまとめる予定。
でも、ちょっと進みが遅くて〆切(5日)には間に合いそうにない。 あらかじめ「ちょっと遅れます」と連絡しておく。
新言語。
が特徴。なんていうか、なんだ、自分の好きな機能をぶちこんだ言語 という意味では極めて正統的な「俺言語」だと思う。 広く使われるかどうかは別として。
Rubyを組み込んだファイラーソフトウェア。
コマンドラインのシェル操作が体の一部になってる私は いわゆるファイラーを日常的に使ったことがないのだが、 これはその辺のファイラーをいろんな意味で凌駕している。
こんな方に向いてます、だそうだ。
要するにファイルへの操作のシェルコマンド部分をRubyで書けちゃう ということらしい。また、メニューから一通りの操作もできるみたい。
好みが極端に別れそうなソフトウェアだ。こういうアプローチのものは好きだな。
webビジネス(モバイルコンテンツも含む)は、 地方での経済振興に役に立つと考えます。
理由は三点
- 場所による利益の機械損失が少ない (渋谷で開発しようが、鎌倉で開発しようができたものを発信する場所は一緒)
- 大規模な施設を必要としない (製造業と違い工場のような初期投資の大きい大規模施設を必要としない)
- ナレッジを学びやすい環境が整っている (リファレンスはオンラインに大量にあり、わからなければ「はてな」「教えてgoo」へどうぞ)
しかし、筆者はそれだけでは「webビジネスが地方の経済振興の鍵へとならない」と主張する。 なぜかと言うと「やはり「世界とビジネスをする」といった意識が不足している」からだと。
いや、どうなんだろう。確かに松江とかも上記の理由で地域振興しようとしているのだが、 やはりいろいろと課題もあるわけで。島根県と提携しているテキサス州となんかしよう という話はあるらしいので、まったく「世界とビジネスする」視点がないわけじゃないようだけど。
LL魂のチケット発売開始。
例年の「Language Update」と「オレ様言語の作りかた」のコーディネータを依頼されている。 しかし、別件とコンフリクトしてるんだよなあ。 どっちを選ぶか。
「選択肢が多い方がよい」というのは自明のような気がするが 実はそうではない、という話。
選択肢はいつもいつも良いものであるとは限らないということ。
我田引水すれば、もっとも選択肢の多い(自由度の多い)言語が ユーザ満足度が高いとは限らないということでもある。
デザインする人はこころしなければならない原則。
以下のようなコメントをいただいた。
公式サイトをたずねて20分でHello World的なWebアプリを書けるようにならない限り、RubyやPythonが初心者にPHPより好まれることはないでしょう。
Rubyの公式サイトは(というか、Rubyそのものが)Webアプリケーション作成に特化していないので、 20分でHello World的Webページを作るのはちょっとしんどいかもしれない。 そのことは認める。PHPで20分でできるかどうかは知らないが、 HTMLに数行のコードをたすようなものであれば、 Rubyよりも簡単であろうことは想像できる。
が、20分で作る「Hello World的動的Webページ」はともかく、 「ちゃんとしたWebアプリケーション」を作成するのは、 そんなに簡単なことではないのではないか。 そんなに簡単に手を出してはいけないことなのではないか。
「初心者にもWebアプリケーションが書ける」という幻想を与えることで、 バグだらけで、メンテナンス性が低く、セキュリティ問題を抱えた Webアプリケーションを乱造することになっているのではないだろうか。
ここでは、PHPで「ちゃんとしたWebアプリケーションが書けない」と言ってるわけではない。 しかし、ちゃんとしたアプリケーション開発には、 PHPだろうがなんだろうがそれなりの知識や仕組みやフレームワークが必要で、 20分で作るHello World的動的Webページの延長線上にはない、と思う。
本当は難しいことを簡単にできるように思わせるのはかえって罪のような気がする。
参考: Teach Yourself Programming in Ten Years
追記
PHPを「けなしている」と見られるのは別に構わないのだが、 「Rubyの宣伝をしている」と言われたのは心外であった。 「どこがそういう風に読めたかな」と考えてみると タイトルに「Rubyより」と書いてあるのが、 「Rubyの方がいいのに」と思っているように伝わったのかもしれない。 ということで、Strike out。
で、念のため以下を明記しておく
書いてないこと
書きたかったこと
はじめまして。
インターネットに公開するなど、「ちゃんとしたWebアプリケーション」を作成する場合、セキュリティや保守に対しても十分な対策が必要であることは同意いたします。その場合、「初心者にもWebアプリケーションが書ける」という幻想を与えることは危険があるでしょう。
しかし、社内のネットワーク等、閉ざされた環境で、自分たちのためのWebアプリケーションを、自分たちつくると言った場合には、必ずしも「初心者にもWebアプリケーションが書ける」という希望を持たせることは、プログラマの裾野を広げると言う点において、一概に否定できないと考えています。
個人的にPHPはアマチュアが使用する言語として、非常に手軽にプログラムが始められると評価しています。Webアプリケーションはできあがりがイメージしやすいので、それに特化している点も良いと考えます。
「ちゃんとしていないWebアプリケーション」も結構需要がありますよ。
需要があることは否定しませんし、役に立つとも思いますよ。
「ちゃんとしていないこと」を自覚してれば。
問題はちゃんとしてないアプリケーションを書けちゃった人が、技術的に連続していると思いこんで、まずい局面でもまずいアプリケーションを開発してしまったり、まずいことに気がつかなかったりすることです。
「ちゃんとしていないWebアプリケーション」が、WSHやVBみたいな(シェア的に)閉じた環境ではなくまさにWorld Wide Webで簡単に動いてしまうのが問題、というお話ではないでしょうか。
むしろ、PHPを閉じた環境で使用している状況の方が少数派かと。
日本Rubyの会をたずねて、2分で以下の記事を発見しましたが、ダメだったでしょうか?
Ruby ビギナーのための CGI 入門 【第 1 回】
PHPのみの問題であるかように読み取ってしまったので、反応してしまいました(誤読のようですね)。
閉じていない環境に対し、不用意にアプリケーションを公開するという論点でいうと、プログラミング言語に限定した話でなく、Linuxやそれに付随するWEBサーバやメールサーバが、簡単に公開できることと共通したテーマだと思います。どうやって初心者にそのことを理解してもらい、かつ、そのことにチャレンジしてもらうかという課題です。
現時点において、PHPのほうがRubyに比べて、不用意にやってしまうケースが多いように見受けられますが、それは普及しているユーザ層による部分も大きく、その点においてはRailsも、PHPと同じように喧伝されている傾向はあるかと思います。(レンタルサーバで活用されにくいでしょうから、PHPほど広まってしまうことは無いかと思いますが)
私はPHPからプログラミングを始め、自分なりに危険性を理解し、その過程でRubyにたどり着きました。自分を基準にしてしまいますが、何らかのプログラミング言語を習得する意志のある人は、どこかの時点でそのことに気づくと思います。仮に危険性に対して無自覚なまま進んでしまう人は、危険性を繰り返し警告したとしても、同じではないでしょうか。
最初は簡単なところから始めるというアプローチはありかと思います。ベテランドライバが若葉マークに冷たいのと同じような印象を受けてしまいました。
長文すみません。
>本当は難しいことを簡単にできるように思わせるのはかえって罪のような気がする。
ほんとそのとおりだと思います!
パソコン量販店も、簡単にインターネットもあれもこれもできるといって売っているけど、本当はきちんとした知識が必要なんですよね。だからWinnyとか簡単に入れてしまって、大変なことに。。Windowsなんかずっと買ったままの状態で何年も使えないこともをえないと。。Rubyとかの話題と関係なくてスミマセン。でも私はRubyユーザーです。Rubyでオブジェクト指向が理解できました!
むしろ、ちゃんとしてなくていいというコンセプトなら、セキュリティに関してもちゃんとしてなくてもなんとかなる設計にするべきだったのでは。
なんだぁ釣り記事か。Webアプリの話でRuby関係無いじゃん。
地方のネットおこしですが、必ずしも不可能ではないと思います。たしかに、地方からネットで東京をせめるのはむつかしい。けど、おっしゃっているように、松本とテキサスなら、どっこいどっこい。というか大抵の欧米の都市は日本の地方都市より遅れていますから。「世界」がみんなニューヨークだと思っているIT記者の世間知らずがおかしいです。
>結果として開発者はPythonやRubyに逃げていき、PHPは死んでしまうのではないか、という懸念。
それはない。PHPはperlの親戚みたいなものだから、perl小僧にもとっつきやすいけど、rubyにいったっては日本人が作ったという以外に話題にもなってない。なにそれって感じ。
RoRの方が100倍くらい「簡単にWebアプリが作れる」という印象で売り出してますけどね。
Matzさんが「それは違う」とどこかで言ってたような気もしますが、世の中の印象としてはそんな感じだと思います。
PHPでまともなアプリが書けないなんてことはありませんが、Railsの最低レベルをクリアするだけでも初心者にはほぼ不可能ではないかと。
PHPはHTML出力だけ考えればこれほど簡単な言語はないので、「Webアプリの初心者」だけを考えれればPHPに勝てるものはないでしょうね。
個人的には「本当は難しいことを簡単にできるように思わせる」のは罪ではなく有益だと思っていますが、そこから本当に難しいことへの経路が用意されていないのは問題ですね。でも、やっぱり入り口が多くの人に開かれているのは大切だと思います。一人でも多くの人にプログラムに興味を持ってもらいたいという観点で。そういう人が作るWebサイトは結局メンテナンスされないし、簡単なものしか作れないので、メンテナンスも難しくなく。
とはいえ今日は、大学の授業でPHPを使っている人に、「PHPを大学の授業で使うのはよくないんでRubyを使ってください」と力説しておきました。
PHPうんぬんというよりもRubyのユーザが増えるにつれて、自分の目が届かないところでRubyが迷惑をかけていないだろうかというとまどい・不安の告白と拝見しました。もっと身近な例で例えるなら10代後半から20代の子供を持つ親の気持ちでしょうか。
最初はみんな「初心者」なんですが。それを忘れずにいる人は少ないですね。
初心を忘れてないからこそ「初心者だから」という安易な考えによる危険性を指摘されているのでは? ネット接続された時代ですし。
PHPもHSPのように、何も知らない「初心者」にとっては、一見するととっつきやすいが、知ってきて、いろいろな事をやろうとすると、「問題」が出て来て、それをねじ伏せるのが難しいという特性を持っているのでしょうか?
因みに私は、HSPで少し痛い目に合いました。
『本当は難しいことを簡単にできるように思わせるのはかえって罪のような気がする。』
って単なる言い訳じゃないですか。じゃあ機械語で書いたら無罪なの?Ruby on Railsは重罪?Rubyを良く見せるために矛盾した強弁ばかりしてるから信用されないんだよね。
「本当は難しいことを簡単にできるようにする」のは素晴らしいことだと思いますよ。でも、「本当は難しいことを一見簡単そうに見せる(けど、本当はそんなに簡単になってない)」のはどうかと思います。難しさを肩代わりするか、隠すかということでしょうか。
「機械語で書いたら無罪」とか「Ruby on Railsは重罪」とかは、私には想像もできない視点でした。そんな風に読める書き方したっけか。
煽りはスルーで。
Rubyに足りないところ。
PHPはエラーメッセージを画面に出力する。
RubyのCGIはerror.logを見なければいけないところ。
エラーメッセージに"Contetn-type: text/plai\n\n"が付けば、それだけでRubyはPHPを駆逐できると考えます。
apacheの仕組みを知らなければデバグができない。
それだけで初心者はPHPへ流れていく。
ブラウザ+エディタ+error.logの三枚の画面で開発するRuby、ブラウザ+エディタで開発するPHP、この理由でwebアプリ(含:CGI)だけはPHPという人間も存在します。
今までの話の流れでは、セキュリティーホールをネットワーク上に出力することの危険性を主として話されているようですが、防御することと組みやすさは別の次元の話であると思う。
デバッギングを含め簡単に組めるようにするのはこれからも進めるべきだし、一方危険性は別途提示していけばいいのではないのでしょうか。
とおりすがりだらけですいません。
>本当は難しいことを簡単にできるように思わせるのはかえって罪のような気がする
結局これって教育の問題ではないでしょうか。RubyとPHPの比較の話題に絡めるのは違うと思いました。
Webアプリを作ることよりも、Webサーバーを立てるのが簡単ということの方が罪な気もします。
require 'cgi'さんの意見、僕もそう思います。まつもとさんの「WEBアプリは簡単なものではない」という意見も正しいと思います。違うかもしれませんが「20分で」の意味はphpの場合、QAやWEBマニュアルが一箇所にまとまっていて、サンプルやコード例が溢れているので学習が進みやすい(コピペが学習に入るか別として)の意味なのではないでしょうか。Rubyコミュニティに足りないもの、それはユーザ間のノウハウを共有する場所が公式サイト上にないことでは?
正しい情報とサポートしてあげたいという気持ちの人が集まってこそ初心者は過ちを犯さなくなるのではないでしょうか。その点、PHPは言語的にはアレですが、コミュニティは暖かい気がします。
以下は業務としてのプログラミングを想定して書いていますが、
「PHPはWebアプリケーション作成に特化している」
これが初心者の食いつき(学習曲線的にも意欲的にも)として大分大きいと思うんですよ。
実行環境さえ誰かが用意している状態からスタートすれば、Hello World的Webページの作成と、そのプログラムの結果をブラウザからすぐに見れるという部分が。(エラーメッセージも含めて)
本来ならHello World的Webページの作成しかしてはいけない、セキュリティや保守性に関する知識が不足した人でも、とりあえず動くけど「ちゃんとしていないWebアプリケーション」が作れてしまう危険性は確かにありますし、現実に日曜プログラマ含めて、そういったコードを書いてWebに公開してしまっている現状もあるわけですが、そこは仕事であれば言語の設計云々でコントロールするよりも、周りの人間がコントロールする方が良いのではないかな、そこまで言語が背負うべきなのかな、とも思います。
「Hello World的動的Webページ」->「フレームワーク等に乗った、ちゃんとしたWebアプリケーションの一部」
も
「Hello World的動的Webページ」->「ちゃんとしていないWebアプリケーション」->「ちゃんとしたWebアプリケーション」
も学習プロセスとして選択できる方が、便利な事がありますよ。プログラミング意欲のある学生が覚える言語としてなら、PHPよりも良い選択肢はRuby含めて沢山ありそうです。
PHPはマイコンと言っていた時代のBASICみたいなものだと感じています。とりかく、始めてみて、おもしろさと難しさを知って、PHPを極めるのも良いし、もっと他の言語やフレームワークに進むのもあり、という道筋は、回り道だったりするかもしれないけれど、そういう道がなかったら、現れなかったかもしれない人材を未来に導いてくれるかも知れないと思います。
ん?
Webアプリケーション=DB連携
ではないでしょうか。
LAMPの文脈で語られるのは、DB内の情報を、ユーザが望む形式で表示する、という意味合いに取れます。この際、表示部を誰がやっているか、の問題であって、phpのhtmlに融合した感じは、そんなに問題がないかなとどうしても思ってしまうのです。
L、A、M、Pというスタック構成の問題な気が。
入力に問題があるなら、
L、A、M、P、F(FはFLASH。Apolloでもいいかも)。
とすればいいんじゃないですか?
phpはあくまでMysqlとechoの間を取り持つ言語なんだと思います。そう割り切っているから強いような。
>公式サイトをたずねて20分でHello World的なWebアプリを書けるようにならない限り、RubyやPythonが初心者にPHPより好まれることはないでしょう。
これは間違ってないですよね。
この点で、RubyとPythonが勝てることはないでしょう。
なので、matzさんのこの指摘は、別の話をしているので、指摘としてずれていると思います。
>「初心者にもWebアプリケーションが書ける」という幻想を与えることで、バグだらけで、メンテナンス性が低く、セキュリティ問題を抱えた Webアプリケーションを乱造することになっているのではないだろうか。
それが、必ずしも問題になるわけではありません。
例えば、閉じた環境で学習用のために自分の練習用のコードを書いているのであれば、なんら問題はないでしょう。
matzさんは、プログラマーとしてプログラミング言語(この場合PHP)を見ているように見えますが、そうでない人もいます。
プロじゃないプログラマー、内部だけ(自分)のためにプログラムを書く人、経営者、教育関係者にとって、「バグだらけで、メンテナンス性が低く、セキュリティ問題を抱えた Webアプリケーション」を書くデメリットよりも、他にメリットがある場合があります。
良いか悪いかは置いておき、Rubyは、プログラミング初心者というターゲットに使ってもらう理由が弱いのは事実だと思います。
PHPの問題点を指摘するより、
・初心者でも利用してもらえるプログラミング言語とは?
・初心者に簡単に思わせておいて、徐々に難しいことができるようになるようなプログラミング言語とは?
等を考えた方がRubyにとって幸せかと存じます。
#もちろん、Rubyは、プログラミングしたことある人を対象にしているので、プログラミング初心者なんて無視という方向でもいいと思います。でも、現状そういう方向性も示していないように見えます。
実際、PHPはセキュリティは甘いですが、初心者でもなんらかのアプリケーションは作れるわけです。僕も実際そうでした。それで面白さを知り、何かWebアプリを作りたいと思ったその後にセキュリティのことを知りました。ですので、セキュリティは配布や商売、他人を巻き込むことをしない限り必要ないものだと僕は思います。
>バグだらけで、メンテナンス性が低く、セキュリティ問題を抱えた Webアプリケーションを乱造する
バグがなく、メンテナンス性が高く、セキュリティ問題が一切ない、webアプリしかネットに出してはいけないとしか聞こえません。あなたが指導する立場にあるのなら、その生徒にだけ言えばいいと思います。
バグがあって、メンテナンス性が低くセキュリティに問題を抱えているものを、
大勢の人が利用する可能性のある場所に公開するのはどうかとおもいますが:(
初心者が誤って作ってしまったのはしょうがないにしても、それを推奨するようなことは非難されてしかるべきかと。
私はwebアプリを作ったことが無いのでPHPの実情はよく知りませんが、
作り手の意識がそのようだと怖いなあと思います。
PHPの問題が、おぼろげながら分かってきました。
皆さん、大変有難うございました。
ところで、とおりすがりさん
>あなたが指導する立場にあるのなら、その生徒にだけ言えばいいと思います。
ここは主に、私のような、まつもとさんの生徒が多数集う場所ですから、どうか大目に見て下さいませんでしょうか?
PHPのコア開発者連中がそもそもセキュリティに対する意識が低いという指摘がよくなされる(が故に守護神とかMOPBとか出てくる)わけで、その点からして既にPHP自体外向きのウェブサーバに導入していい機能でないと思う。
発想が逆だと思います。
私の例をお話しましょう。
私は語学教師で文系の人間です。でもたまにプログラミングを
やります。一年に一回か二年に一回。それはどういうときかというと必要なときです。
私は長年Linuxを使ってきました。何でもLinuxで、Winでは漢字変換のやり方さえわかりません。でも、Linuxではせいぜいシェルスクリプトくらいで、プログラミングには手をつけませんでした。
それがなぜやるようになったというと、必要になったからです。あるソフトウェアの機能を改造する必要があり、それはどうしても必要だったけど、作者にお願いしてもなしのつぶてで、自分でやるしかありませんでした。そのソフトはC++で書かれていました。ちょっとむつかしい改造でした。つまりいきなり中級からです。でも、一週間くらい四苦八苦していると、ちゃんとできたんです。そのコードは今はそのソフトに取り入れられて、日本中で使われています。
またしばらくして、必要になりました。今度はPHPでした。プログラミングは二年ぶりくらいでした。自分が使っているブログウェアにある機能を付け足す必要があり、誰もそれを提供していなかったので、自分で書いたのです。
これも結構とる人がいます。私よりもだめなSE連中だと思います。
次はjava scriptでした。例のgreasemonkeyのためです。
こういうふうに、プログラミングを職業としていない人がやりはじめるのは、自分が使っているソフトなりサービスなりをある目的のために改造するためで、○○言語を習得するためではありません。
○○言語を習得しようとして、教科書からはじめてる人も入るでしょうが、そういう人の大半は2週間くらいでやめる人だと思います。
ある言語が優勢となったり、初心者にも学ばれるようになるには、その言語が使いやすいとか、機能的にどうだとかではなく、それで書かれたすでによく使われているソフトがあって、そこから普通は改造なりがはじまって、それが進化すると別のソフトになるのだと思います。だから、言語自体をいくら宣伝しても、それでなにができるのか、実際メジャーに使われているソフトがあるのかといったことが大きいと思います。
初心者にとって優しいとかは関係ないと思います。やる人はふつうは中級からで、初級はかっとばされるのです。
rubyについては、どういう言語かさえまったく知りません。つまり、一般の人にまで目にとまるようなメジャーソフトがまだないということなのではないでしょうか。PHPが普及しているのは、それでwebでデータベースを扱うという、最近主流のサイトが構築しやすいからで、実際にサービスに使われているからで、しかもドキュメントが本を買わなくても、ネット上にちゃんとあるからです。rubyがもてないとしたら、たぶん一般向けの言語ではないからではないでしょうか?
でも、一応私のmacにも入ってますね。
僕の場合、普段のスクリプトに関しては完全にRuby使ってます。(たまにLisp書くけど、それもじきに無くなるかもしれないですね。)
実務に関しては、実際にRailsを使って運用しようってことになったんですが、あと一歩で没になり、結局PHPになりました。
おそらくRailsがApacheにもう少し歩み寄ってたら、迷いは無かったでしょうね。
言語自体の議論から少し脱線しますが、結局ウェブでやることに関して言えば、その程度の認識なんですよね。
表層の人間からすると、細かい仕様は知らないけど、抽象化されて問題解決のパターンとして実装された言語の機能ってどれも似てるじゃん。だからサバ立てに時間がかからない方を選ぶよ。って感じだと思います。
僕もお金をもらってやるプログラミングに関してはそういう意見かな。ただ、自分の家にサーバ置いて、技術者として真剣にやる時は間違いなくRuby選びますけどね。
まあ、そういった事も時間の問題だと思いますが。
さて来るべき時に備えて準備しなきゃ。
hamsterさん
>rubyについては、どういう言語かさえまったく知りません。
Rubyについて、プログラミング知識の幅を広げる為に、Web上でいいので、どういう言語なのかという事だけでも確認されたほうがよろしいのではないでしょうか?
(1)その言語(PHP)が初心者に好かれている理由
(2)利用者の母数の多さ故の初心者プログラマの多さ
(3)言語設計でのセキュリティへの配慮
これは分けて考えた方がいいのではないかと思います。
PHPの場合、(2)と(3)の相乗効果でセキュリティ面での評価が酷い事になっているのではないかと。
(3)を改善した、初心者でも自然とセキュアなwebアプリコードが書けるSecurePHPみたいなものが必要なのかもしれません。(言語なのかフレームワークなのか良くわかりませんが)
社会全体のセキュリティに対する意識が高く無いと、プログラミング一年生への訴求力がなさそうですが。
>Rubyについて、プログラミング知識の幅を広げる為に、
だから、私プログラマーじゃないって。(笑)
とりあえず必要な目的を達するために、必要な言語を必要なときにたまにやることもあるという程度(しかも1年ごとぐらいだから進歩しない)。でも、これでも実用にはなってる。
教科書でプログラミングを、プログラミング自体への興味からはじめる人の95%は2週間でやめるし、一生なんの役にも立ってないでしょ。その人たちのことはあんまり考える必要はないと思うんですよね。どうせ、一見さんだし。
語学も同じで、99%の人は職業にしないです。学校で単位をとる範囲です。このレベルではなんの実用にもなりません。このひとたちが多いか少ないかなんて、学校の教師でないかぎり関係ないです。(教師が食うには生徒が必要だけど)要は専門家レベルまでやる人がどれくらいいるかで。初歩を学ぶ人が多いか少ないかなんてどうでもいいです。使える人がいるかどうかです。
そういう意味では、プログラミング言語も語学の学習も同じ。それを使うプロがどれだけいるかで、初心者にとり学びやすいかどうかなんて、どうでもいい。初心者というのはずっと永久に初心者で、彼らがプロレベルになることはない。プロははじめから中級なんです。
>(3)言語設計でのセキュリティへの配慮
>PHPのコア開発者連中がそもそもセキュリティに対する意識が低いという指摘がよくなされる(が故に守護神とかMOPBとか出てくる)わけで、その点からして既にPHP自体外向きのウェブサーバに導入していい機能でないと思う。
言語としてのセキュリティと、その言語で書かれるアプリケーションのセキュリティは分けて考えた方がいいと思う。
それに加え、中級以上のちゃんとした他の沢山の言語も使えて、年々もプログラミングをしているプロのプログラマーでも、セキュアなWebアプリケーションが書けない人が多いですけどね。
だから、CとかJavaとか何年も書いている人の方がむしろ危険なコードを書くというのが、僕の実感ですけど。大抵コードとしては、まともなんですけど、Webアプリケーションに対する知識が足りないんですよね。だから、プログラマーとして、使えないんです。
Webアプリケーションを書いていない人は、CSRFを防ぐ方法を言ってみろと聞いたら、実装方法を何個か上げて、なぜそれを採用するのかを言える人って殆どいないんじゃないだろうか?
そういう意味でも、matzさんの簡単にできるうんぬんの指摘は、当てはまらないことが多いです。
中級以上のプログラマでもセキュアなWebプログラムを作れませんから。それをプログラムができるからってよく勉強もせず、Webアプリケーションを作ってしまう、プログラマの方が危険だったりします。
Webを知らないJavaプログラマと、Webのことを知ってるPHPプログラマを比較するのはフェアではないのでは?比較するならWebのことを知ってるJavaプログラマとWebのことを知ってるPHPプログラマですね。現実にはPHPプログラマでWebんことを理解している人が滅多にいないというのが、PHPのセキュリティ問題を深刻なものとしているのですが。
> 言語としてのセキュリティと、その言語で書かれるアプリケーションのセキュリティは分けて考えた方がいいと思う。
まったくの妄言です。Javaで書かれたプログラムはCで書かれたプログラムと違ってバッファオーバラン脆弱性がありません。
Webアプリケーションに関しても、セキュアなプログラムしか書けないような言語を考えることができます。
> Webアプリケーションに関しても、セキュアなプログラムしか書けないような言語を考えることができます。
idやpasswordの管理までセキュアに面倒を見てくれるプログラミング言語を私は知りません。
「セキュアなプログラムしか書けないような言語」は難しくても、そこそこセキュアな言語は考えられると思うんですよね。
PHPでいうなら、SQL組み立てのためにsql_printf()みたいなのがあればSQL Injectionはある程度防げるだろうし、echoのデフォルトがHTMLエスケープ側に振ってあればXSSとかもある程度防げるでしょう。100%防げないにしても、デフォルトでそう振っておくことで、初心者に「なぜここがこうなっているのか」ということを意識させることができます。
「目的に特化した言語は初心者ウケすること」とセキュリティの話は分けて考えるべきなんじゃないかと。それこそHSPならセキュリティを気にするような分野では使わないわけですし。
> sql_printf() みたいなの
を無定見にやっちゃったのがPHPで、そういうもんではないだろうと個人的に思います。htmlspecialcharsも、組み込み関数で存在するのは評価できますが、関数名長すぎ。hescape()とか、極端にe()とかでもいいのですよ。HTML埋め込み言語なんだから。
また、magic_quotes で、意味なく \ 追加、みたいなことをする。いまだにデフォルトでon。それでSQLインジェクションを防げるかといえば、表示するときに邪魔だから、理由もわからずまずループでstripslashesをかけちゃってむしろ害にしかならず。それで覚えちゃった人間が、今度はドライバ連携の組み込み関数・クラスでプリペアドステートメントが使えるようになっても有り難味を感じられず、いつまでたってもPHP4が圧倒的シェア。(PDOって結構いいと思うんですが。)
こういうなんともいえない筋の悪さが、外・中両方から見たときの言語のいけてなさにつながるわけで、識見・発言力のある方のこういう批判的な記事は、PHPで仕事をしている人間として、実は非常にありがたいです。PHPの評価を落としているのは、PHPプログラマです。たぶん間違いなく。そういう記事だと、私は受け止めています。
idやpasswordの管理までセキュアに面倒を見てくれるプログラミング言語としてはJavaを拡張したJif (http://www.cs.cornell.edu/jif/)、インジェクション系の攻撃を防ぐためには、PHP String Analyzer (http://www.score.is.tsukuba.ac.jp/~minamide/phpsa/)があります(言語ではないですが)。
いきなり泥臭くてすみませんが、いまだに大規模開発系のサーバまわりは java 使いませんね。固定観念として「Cの方が早い」っていうのがあるのと、「いざとなったら裏ワザ的にどうとでもできる」というのが強いようです。
もちろん「技術者を集めやすい」ってのもありますが。
そこではセキュリティ重視の言語かどうかはあまり話題にならず、「バグは試験でつぶせばいい」という後付け理論が当然のようにまかり通ってます。
普通に考えても開発段階からセキュアなほうが試験も楽で、本番での未知のバグも未然に防げ、いいことばかりのハズなんですがね。
そのPJは当然のようにデスマりましたが。もちろん java でやってれば大丈夫だったかというと、どんな人間がどんなコードを書いたかに依存するのでなんともいえませんが。
社会的要請、もっとぶっちゃければ2週間程度の研修受けた未経験者に毛が生えたような『技術者』を大量に売りたい/買いたいという要請の前にはPHPの簡単さ、他の言語の複雑さなんてたいした問題じゃない、もし世の中にPHPが無かったら次に「簡単」な言語(もしかしたらRubyかもしれない)で、やっぱり素人がダメダメアプリを書いてるだけ。
追記を読んだのですが、何が言いたかったのかが余計にわからなくなってしまいました。
>セキュアでないWebアプリは害悪である
>* Webアプリである以上、公開するなというわけにはいかないだろう
そんなことはないです。
公開しないWebアプリもあるでしょうから。
> PHPでも(Rubyでも)セキュアなWebアプリを作るのはそれなりに大変
その通りです。
>ということは、Webアプリは初心者に向かないテーマだろう
それは違います。
個人的には、セキュアである必要でない場合には、興味を持ってもらいやすいという意味で特に初心者に向くテーマだと思います。
> 簡単に(比較的)セキュアなWebアプリが作れるプラットフォームはありえる
これはよくわかりませんが
> が、少なくとも素のPHPはそうじゃない
これの理由を知りたいです。
他のものは、違うというように聞こえますが、PHPに限らずどの言語でもそうだと主張していると受け取ります。
> その点、なんらかのフレームワークを使ったものはもうちょっとマシ
> だけど、それならどの言語でも似たようなもので、初心者に対するPHPの優位性ってのは幻想だよね
言語としてのPHPの優位性という意味であれば、それは間違いです。
この優位性がセキュアに関することだけであれば、そうかも知れません。
> 結論: 初心者はWebアプリに手を出さない方がよい。少なくとも素のPHPは危険
この流れだと、PHPは関係ないと思うのですが…
「結論: 初心者はWebアプリに手を出さない方がよい。」ではないのでしょうか?
素のPHPが危険というのは、どういう意味なんでしょうか…
素じゃないPHPは危険ではないという意味であれば、PHPの言語としてのセキュリティの話ですよね? Webアプリのセキュリティの話ではない。
他の言語であれば危険じゃないという主張であれば、どの点が他の言語に比べセキュアでないかを書いて欲しかったです。でも、そういう話の流れはなかった。
主張していることがよくわからないです。
>Webアプリケーションに関しても、セキュアなプログラムしか書けないような言語を考えることができます。
CSRFやセッションハイジャックに対して、セキュアにしか書けないプログラミング言語ってどんなものか、アイディアだけでもいいので教えて下さい。
> 「結論: 初心者はWebアプリに手を出さない方がよい。」ではないのでしょうか?
それは既に述べてます。
> 素のPHPが危険というのは、どういう意味なんでしょうか…
素のPHPと、(より安全かもしれない)フレームワークを使ったPHPの不連続性を懸念しています。
で、「PHPは初心者に優しい」という言葉にだまされて、初心者がWebアプリを始めてしまう事態も。
いずれもPHPに固有の事情だと思います。他の言語は特にWebアプリケーションに特化してないし、初心者にも簡単とは主張していないから。
文明を発達させるなと言っているようなものではないでしょうか?
車は危険なので簡単に車の免許を与えるなと言っているのと変わらない気がします。
まあ、その通りです。
運転もできないような人に免許を与えてもらっても困ります。
車は本当に危険ですから。
はじめまして、はじめましてさん
「車は危険なので簡単に車の免許を与えるな」という部分(?)には賛同いたします。
ところで、私は大きな書店にいって、本件について確認して見たのですが、PHPのセキュリティーに特化した内容について記している立派な(?)本は、すぐに見つけられましたが、RubyやPython、Perl等については、短時間しか探しませんでしたが、この様な本を見つける事が出来ませんでした。
さしあたり、この立派な(?)本の内容をご確認になられ、まつもとさんが仰ることの意味を、もう一度考え直して見られたらいかがでしょうか?
>>元職業プログラマーさん
はじめまして。
PHPのセキュリティーに特化した本と言うのは以下の本のことでしょうか?
PHPサイバーテロの技法―攻撃と防御の実際 GIJOE (著)
この本でしたら、私はこの本を所持しています。
まつもとさんが言いたい事も非常に分かります。
最近、セキュリティについての知識が皆無なプログラマーの方は本当に多いですから。
そういう人に限って、レンタルサーバーを借りてセキュリティーホールだらけのWebアプリを公開していたりもします。
ですが、今の時代この業界では特に人が足りないので未経験者を採用する企業は多いのではないでしょうか?
そのような未経験者がある程度、学んだ知識を元に作られたWebアプリを管理者がチェックもせず、リリースしてしまう事の方が大いに問題有りだと思います。
初心者でも簡単にWebアプリが作れるという風潮はこの業界全体が作ってしまったのではないでしょうか?
初心者も一通りのセキュリティの解説書読んで完全に理解できて導入もできるようになれば何の問題もないと思うんだけど、それでもPHPという言語がそんなに危険なわけ?
あーこれらが理解できている時点で「初心者」ではないか。
つまりはそういうことでしょ?
始めましてさん。真摯なご返答有難うございました。
>PHPサイバーテロの技法―攻撃と防御の実際 GIJOE (著)
>この本でしたら、私はこの本を所持しています。
につきましては、どうも申し訳ありませんでした。
ところで、入門PHPセキュリティ(Chris Shiflett著)という本も書店に並べてありました。
>初心者でも簡単にWebアプリが作れるという風潮はこの業界全体が作ってしまったのではないでしょうか?
という命題が真ならば、初心者(私もそうですが)の方は、(特に最近は)何事に対しても、十分気を付ける必要があるという事なのではないでしょうか?
> 簡単に(比較的)セキュアなWebアプリが作れるプラットフォームはありえる
PHP自体が言語なのか、C言語で書かれたWebアプリ用フレームワークなのか、という部分がありますね。
個人的には、PHPは言語だと思っている派ですが、セキュアじゃないWebアプリも書けないほどに汎用性を無くしたモノを「言語」と呼んでしまうのには抵抗があります。
Cのmemcpy()のような一般的な脆弱性は言語の責任、SQLインジェクションなどアプリの脆弱性はアプリ制作者(プログラマ)の責任。アプリ制作者がその責任を負えない場合、それを負えるミドルウェア(フレームワークとか)を使うべき。
でもPHPに限らず、セキュアであると言ってくれないフレームワークばっかりだ。大規模開発とか開発スピード、豊富な機能を宣伝するものは多いんだけど、安全性に力を入れてますというものは、あまり聞かない。
お題目はもういらないので、識者には(言語を問わず)セキュアなフレームワークを供給してもらいたい。納期内の機能実現が最重要なアプリ屋がそれぞれ対策するより、はるかに社会全体で最適だと思う。
ギア操作が面倒でハンドル操作に集中できない人が多いのなら、AT車を作ればよい。それで多くの人が安全に車を運転できるようになるだろう。
一応…
私、はじめましてと始めましてさんは、別人ですからね。
初心者がPHPで危険なプログラムを作る可能性と
Webプログラムを書いたことがない、プログラミング中級〜上級者がRuby on Railsで危険なアプリを作る可能性って、大して変わらないと僕は思うんですけどね。
だから、PHPうんぬん言ってもしょうがないと言うか。
ちなみにWebアプリを作ったことがないプログラマーが多いように見受けられます。言語であれ、フレームワークであれ、セキュアですと言えるものなんて作れないと思うんですけど。
だから、そんな言語もフレームワークもないんじゃないでしょうか。
作れると思うのであれば、是非アイディアだけでも教えて欲しいです。
上の方で私は書いてますけど、たとえばechoのデフォルトをHTMLタグをエスケープするほうに振ったり、sqlprintf()みたいな関数(%sを指定すると'をエスケープする)を用意するだけで、完璧でないにせよ多少はセキュアになると思いますよ。
ところがPHPは、magic_quoteなんていうなんだか根本的に間違った方向で解決を図ろうとしている、という点で、どうにも「スジが悪い」言語であるように私には見えます。
ところで、セッションハイジャックは難しそうですが、CSRFは言語はともかくフレームワークの階層で防ぐことはできるように思うんですけど。hiddenかなにかにランダムなキーを持たせるとか。
>PHPは、...どうにも「スジが悪い」言語であるように私には見えます。
で閃いたのですが、そもそも、HTTPプロトコルやHTML自体に問題は無いのでしょうか?
ここに見直しをかける必要は無いのでしょうか?