SSブログ

PHPerになって、なんでディスられているか調べた。 [プログラミング]

ぺちぱー(PHPer)になって、なんでこんなにもPHPは評判が悪いのだろうと不思議に思っていたのですが、過去に色々あったようですね。今ではそんなに問題となることも少なくなってはいると思うのですが、お手軽にWebアプリを作れるというノリが口うるさい人の格好の的になっていたのだと思います。


最近やり始めたので歴史的なことは知らないのですが、ここで読む限り黒歴史だらけって感じではありますね。

https://qiita.com/fallout/items/1528e8667d6fb80ffeae

register_globalsとmagic_quotes_gpcのコンボはかなりきついと思います。確かにregister_globalsはSQLインジェクションの脆弱性を超える、標準装備の脆弱性だと思います。まぁ今は廃止されているので、昔のソースを使うのでなければそんなに問題とはならないんじゃないかとは考えられます。昔のソースを直す余裕がないから困ってるところはありそうだけど、外向きのシステムは脆弱性が出てきて手直しというのが必須ですので直すしかないですね。まぁ廃止されてから何年も経っているから、そのままにしているところもないとは思うんだけど。

ただこういう機能ってのは自分だけの機能としては自分で作ってしまうことはありますよね。というか、既存じゃない脆弱性を作り込めるほど書いていること自体は、そこそこできる人ではあるんですが、正直きちんと動いたら脆弱性まで考えるってことは、外向きのシステムじゃなければ考えないところですよね。内部システムだから脆弱性があるのはわかっているけど便利で、対策するのが面倒なのであえてやらないっていうことはあると思います。




あとPHPでWordPressが作られていたことも、色眼鏡で見られる状況を生んだんだと思います。WordPressがPHPで作られていなかったら、ひどい脆弱性が生まれなかったかと言われるとわかりませんが、お手軽な言語体系がそれを助長したということもあると思います。上のリンク先にもちょっとヤバそうな実装があると書いてありましたし。

WordPressを使っている人はある意味勇気があるとされているらしいのですが、中に重要な情報を入れない限りはそんなに目くじらをたてる程でもないかなとは思うんだけどね。とは言え、動的にページを生成している限りは改ざんをしやすいということはあるのかもしれない。今時、固定ページでそれを更新していくなんてことは無理に近いので、他にCMSを見つけるかWordPressを使い続けるかをしないといけないんだろうね。まぁWordPressもかなり使い倒されているから、ノウハウが溜まっていることは確かなんじゃないかと思うので、多少の脆弱性は目を瞑ることにはなるのだろうけど。

上のリンク先にあるけど、
ただ、WordPressしか触らない人(ほとんどコードを書かない人)は、プログラマでもなければPHPerでもありませんので、そのあたりは混同したらダメかなと思います。


WordPressを使う人はプログラマーでもペチパーでもないと言っているけど、当たり前のことだよね。Apacheを使っていて、httpd.confに準ずる設定ファイルをいじっていてもプログラマーじゃないですもんね。まぁシェルスクリプトを書いている人はプログラマーにかなり近いというか、もう片足プログラマーに足を突っ込んでいるようなものですが。ただ単にテンプレートをテンプレ製造している人は、基本的にPHPerとは言えないんじゃないかと言われれば確かにそうかもしれないですけどね。




結局、言語の問題というよりは、標準ライブラリの作りの問題のような気がします。そこのところは一体として考えていいとは思うんだけど、言語的な素養としても気持ち悪いところはあって、キャストの仕方とかを見ると、バグを意図的に作り込んでいるんじゃないかと思えるほどですよね。他の言語を知っているとちょっと見るに堪えないというのはわかる気はします。

ただ、そういう罠を避けては書けるので、C言語と同じで気をつけて書けば問題ない程度なんだろうと思います。最近の言語はわりとバグを作りこまないような施策が言語的に入れられていたりするので、それを考えるとPHPはちょっと考えられない仕様ではあるのはわかります。

例えば、Swiftのnilとオプショナルの扱いを見ても、バグとなりやすい0とかnilとかの扱いを強いるぐらいで、それを考えればPHPは仕様的には逆行していると言えるでしょう。逆行は言い過ぎにしても、互換性を盾にして問題を放置したままにしているのは確かでしょう。それはC言語とかも同じことなので、仕方ないと言えば仕方ないことなのかもしれません。

過去で動いていたスクリプトが動かなくなるというのは、運用上かなり問題ですからね。実行環境を塩漬けにすればいいだけの話なんですが、それはそれで問題を放置するだけですし。あまりに問題な関数をdeprecatedじゃなくきっぱり廃止にまでしてしまう言語ってのは、設計上問題があるのは確かでしょう。ただPHPは設計云々よりも使いやすさ重視でやってきたというのは、言語ができた経緯から考えると当然なのかもしれないですが、うるさ方から言わせればツッコミどころ満載の言語であるわけです。

でも、あるものを使うという点において、けなし易いからボロクソに言うだけというのは建設的じゃないな。それにその貶した人がPHP代替の素晴らしいスクリプト言語を作ってくれるという訳じゃないんだし。けなすだけなら猿でもできるので、今ある手段をいかに使うかということに力を入れるべきなんじゃないかと。実際、PHP代替の言語はないと思いますし、今から作っても広まるかどうかは微妙なところです。

というか、嫌いな人は黙って使わなければいいんです。Ruby on RailsでもDjangoでも使っていればいいんですよ。僕も選べればそうします。とはいえ、PHPがそこまで嫌いではないので、現状の新しいPHPを使っている限りは問題ないですね。昔のシステムを改修しないといけないとかだと嫌になるかもしれないけど、同じものを一から作り直せとか言われるんなら、Laravelなどを使って作ればいいわけで、システムの再開発をしているだけであって、車輪の再発明ほど面倒なことをしているわけではないわけですし。

またうるさ方がLaravelみたいなSQLも使わないようなライブラリを使っていると、初心者ばかりでライブラリが想定していない使い方ができないとか言い出す人がいるんですが、それはまた別の時に話しましょう。少々長く書きすぎた。

ただ、曲がりなりにも動いているシステムを再開発するってのはモチベーションとしてはあまりいいものではないのは確かではあります。外向けシステムじゃない場合は、内部から攻撃するような奴がいけないんじゃないかと思うんですが、昨今のコンプライアンスからそうも言っていられないらしいですよ。特に外部から人が入る場合は、外向けシステムとそんなに変わらないですから気にしないといけないんでしょうけど。コンピューターシステムってのは面倒なものですね。改めて思います。だからこそ、面白いとも思います。






始めに調べたと書きましたが、大して調べていませんw。
https://qiita.com/gongo/items/91b8728701cbbb41584e
やめるにやめられない事もあったりと、システムを維持するのっていうのは大変なものだなと思ったり。まだ自社で作っていれば、少しずつ直すのもできなくはないのだろうけど、買いっぱなしのシステムとかどうすんのかなと思ってしまう。

基本的にここに書かれているようなことなんですが、
https://note.com/shimakaze_soft/n/n03992e2e8c22
ちょっと他の言語と違うところもムムムとなる原因になっていそう。
https://note.com/shimakaze_soft/n/n6e19f705f757

タグ:PHP
コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2020/01/17 [Twitter]


コメント(0)