質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

4回答

4682閲覧

Perl5.26でカレントディレクトリにパスを通したい

clementic.kutu

総合スコア17

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2019/02/14 06:17

WSL(Windows Subsystem Linux)でUbuntuを利用しています。

Apache2.4.29とPerl5.26を利用し、CGIを使用したサイトを作成しております。

古いサイトが古いPerl(Perl5.8)が開発環境にある際に作成されており、
カレントディレクトリが@INCに入っている前提で作成されております。

Perl5.26ではカレントディレクトリが@INCに入っておらず、動作しません。

各ファイルで

push(@INC,'./');

を実行すれば動作するのですが、ファイルの量が多いので全ファイルを修正するより

LINUXかApache2の設定で@INCにカレントディレクトリを追加できるなら、そちらで対応したいと考えております。
方法をご存知の方がいらしゃいましたらよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

環境変数PERL_USE_UNSAFE_INC1に設定すれば以前の動作に戻ります。

perl5260deltaの該当記述

(Apacheは詳しくないので環境変数の設定方法は他の方に譲ります)

但し、これは移行用の一時的な機能とされていますので、今のうちから少しずつ修正していくのが良いと思います。

投稿2019/02/23 18:34

編集2019/02/23 18:36
harrek

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

普通に力技で解決してしまえば?

CGI保存ディレクトリ全体をバックアップしてから試してください。

CGIの保存ディレクトリで、

$ find . -name '*cgi' -or -name '*pl' -exec perl -i.bak -ple 'print "use lib qw(.);" if $. == 2;' {} \;

すれば、@INCに.が入りますよ。そんなに手間じゃないと思いますけど。

挙動が変になったら、bak を戻せばいい。

ライブラリ追加

とんでもない呼出とかしてない場合。

テストしてないのでアレですが、CGIの呼び出しに、

$ perl -Mlib=./ FOO.cgi

とかで対応できるんじゃないですかね。
もちろん、フルパスを与える方が良いですが。

ライブラリ追加2

とんでもない呼出とかしてない場合。

テストどころか、、、なんですが、

/etc/apache2/envvars

export PERL5LIB=.

して、apatchの再起動すれば、@INCに、.が入るんじゃないですかね。
只、思い通りの挙動をするかは分りませんけど。

投稿2019/02/14 21:47

bunzaemon

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

@INC.を追加するより、@INCに入っているディレクトリに、必要なファイルを移動するのが良いと思います。

投稿2019/02/14 12:42

編集2019/02/15 00:07
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

面倒なようでも修正に手間をかけるべき事案のように見えます。

こう云う話があります。
https://tutorial.perlzemi.com/blog/20170414149217.html

これは「信用できない検索パスの脆弱性」という問題のようだ。

情報セキュリティ技術動向調査(2009 年上期)「信用できない検索パスの脆弱性」
「/tmp」以外でも他のユーザーが書き込み可能なディレクトリをカレントディレクトリにするようなスクリプトは、この脆弱性を持つといえる。

https://metacpan.org/pod/release/XSAWYERX/perl-5.26.0/pod/perldelta.pod#Removal-of-the-current-directory-(%22.%22)-from-@INC

The perl binary includes a default set of paths in @INC. Historically it has also included the current directory (".") as the final entry, unless run with taint mode enabled (perl -T). While convenient, this has security implications: for example, where a script attempts to load an optional module when its current directory is untrusted (such as /tmp), it could load and execute code from under that directory.

Starting with v5.26, "." is always removed by default, not just under tainting. This has major implications for installing modules and executing scripts.

投稿2019/02/14 07:07

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問