分12本連載では第一線のPerlハッカーが回替わりで執筆していきます。5.26で変わること」です。5.26がリリースされました。5.10が2007年に生まれてから10年という節目のリリースです。X氏のリードのもとでリリースされる最初の安定版(注2)でもあります。5はかれこれ20年以上も同じメジャーバージョンを使い続けていることからも察せられるように,後方互換性が比較的よく保たれている言語です。それでも,節目節目では新機能の追加とともに多かれ少なかれ互換性が失われるような変更が行われてきました。5.26では一部の人に非常に大きな影響を及ぼしそうな非互換性がいくつか入っています。5.26で何が変わったかは,5.26付属のperldeltaという文書にまとまっています。5.26の新しい機能を紹介します。5本体の開発チーム内の意見調整や,リリースマネージャーなどを担当するリーダー役です。5.12以降,修正の多寡によらず,毎年春に偶数のマイナーバージョンを持つ安定版をリリースすることになっています(マイナーバージョンが奇数の開発版は,安定版リリース前のコードフリーズの時期を除いて毎月リリースされます⁠)⁠。5.25.12までの修正内容をまとめたものです。@INCからカレントディレクトリが削除Perlはバージョン3の時代である1990年から,ファイルやモジュールの呼び出し元を指定する特殊変数@INCの末尾に,カレントディレクトリを表す.を保持していました。20世紀末のCGIスクリプトでは歌代和正氏が作成したjcode.plというライブラリがよく利用されましたが,次のようなコードを書いて,CGIスクリプトの置かれているディレクトリにjcode.plというファイルを設置するだけで期待したとおりに動作したのは,@INCの末尾にカレントディレクトリが含まれていたからです。5.26では,セキュリティ上の理由でデフォルトの@INCから.が削除されました。上のコードはそのままではもう期待どおりの動作はしません(注3⁠)⁠。5.26では動作しません。何が問題だったのかUNIX系OSの世界,とりわけシステム管理者の間では前世紀から,実行ファイルを検索するパスにカレントディレクトリが含まれているとセキュリティ的によろしくない,という議論がされてきました。そのディレクトリに何らかの実行ファイルが存在していた場合,タイプミスなどの意図しない理由でそのファイルが実行されてしまう恐れがあるためです。安全のためには,システム標準以外のコマンドを実行するときは,どのディレクトリにあるコマンドかを明示すべきです。読み込んだ時点でなにがしかのコードが実行されてしまうという点では,スクリプト言語のライブラリ類も同じです。正規のインストールパスにはインストールされていないライブラリがたまたまカレントディレクトリに存在していた場合,ライブラリの検索パスにカレントディレクトリが含まれていると,場合によっては意図しない形でそのライブラリが読み込まれ,内部のコードが実行されてしまいます。これは,特に特権ユーザーでスクリプトを実行することの多いシステム管理者には歓迎できないことです。Rubyの対応とPerlの初期の反応そのため,たとえばRubyの世界では2010年8月にリリースされたバージョン1.9.2でロードパス($:)からカレントディレクトリが削除されました。5.16のリリースを間近に控えた2012年3月にも議論が再燃し,賛成反対合わせて都合40通ほどのメールが飛び交いました。20年も前から便利に使われ続けてきた仕様を変更することで,既存のモジュールやアプリケーションに大きな影響が出ることを心配する声が強かったことから,いずれも明確な結論は出ないまま議論は立ち消えになりました。GNU/Linux系ディストリビューションのパッケージ管理ツールが,実行中に誰でも読み書きできるディレクトリに移動したうえで内部的にPerlスクリプトを呼び出していたことから,共有サーバなどで悪意を持ったユーザーがそのディレクトリにしかけをすると容易にルート権限を奪える状態になっていた─⁠─ということで,これまでのような公開チャンネルではなく,セキュリティ問題を扱う非公開のメーリングリストで話が進んでいきます。対策を取れば既存のモジュールやアプリケーションが壊れることはこれまでの議論からもわかっていたので,まずはそもそもPerl側が対策すべきか,またどこまで対策すべきかをすり合わせ,それからどう対応すれば影響を最小限にとどめられるか,関係者の間で議論されていきました。公式にはCVE-2016-1238というIDで識別されるこの脆弱性に関する議論は1年近く続きました。その詳細は割愛しますが,最終的にはシステム管理用のスクリプトの安全性を保つのはスクリプトの作者の責任としたうえで,深刻な問題が起こる可能性を減らすため,Perl側でもデフォルトの@INCからカレントディレクトリが削られました。コアモジュールのうち特によく使われるものについては,モジュール側にも対策を施して古いPerlが入っている環境への対策としたうえで,CPANモジュールのインストールに支障が出ないようツールチェイン側にしかけが加えられました。この問題の影響を受けていることに気付かれづらいdo関数については,警告を出すことになりました。著者プロフィール石垣憲一(いしがきけんいち)翻訳家兼プログラマ。最近は主にCPANツールチェーン界隈の片隅で活動中。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。