Snippets

sironekotoro 一定時間だけパスワードをクリップボードに貼り付け、時間が経過すると元の内容に書き戻す君(OSコマンドインジェクション対応)

You are viewing an old version of this snippet. View the current version.
Revised by sironekotoro d8ab9a9
#!/usr/bin/env perl
use strict;
use warnings;

# mac os用
# 1.実行時のクリップボードの中身を指定した文字列に書き換え
# 2.一定時間経過すると、クリップボードの中身を元に戻す

# クリップボードの中身を書き換える時間
my $time = 10;

# パスフレーズ
my $key = 'otsu';

# 入力を促すメッセージ
print "パスフレーズを入力してください > ";

# 標準入力を受け取り
my $input = <STDIN>;

# 改行を削る
chomp $input;


# 一時的にクリップボード上で書き換える文字列
my $string = "SECRET";


# 入力文字列が正しいか、間違っているかを
# if文の文字列比較で判定
if ( $input eq $key ) {

    # クリップボードの内容を、スカラー変数に取り込む
    # `` バッククォートで囲まれた文字列は、Perl上ではなく、
    # OSで実行されるコマンド。

    # pbpaste は実行すると、クリップボードの内容を表示する
    # macOSのコマンド
    # (なのでこのプログラムはMacでのみ動く)

    # 実行した後の結果をスカラー変数 $clipbord に代入している
    my $clipbord = `pbpaste`;


    # Perlのsystem関数を利用して、OSに()内の
    # 命令を実行させる

    # 上記の`` バッククォートと違うのは、コマンドの実行結果を
    # Perlが欲しいかどうか。
    # 実行結果が欲しい場合には`` バッククォート
    # 実行結果が入らない(実行されれば、それでいい)って場合は
    # system関数を利用する

    # 文字列をクリップボードに設定する
    # pbcopyは、クリップボードに文字列を設定するmacOSの
    # コマンド。

    # echo '$string' | pbcopy
    # はOSに渡される時に$stringの内容が展開されて以下のようになる
    # echo 'SECRET' | pbcopy

    # pbcopy はパイプ | で渡されたものをクリップボードに設定する
    system("echo '$string' | pbcopy");

    # カウントダウン表示
    # 後何秒で元に戻るか気になったので入れた
    # 趣味
    for my $t ( 1 .. $time ) {
        sleep 1;
        print $time - $t, "\n";
    }

    # 指定の秒数待ち終わったら元の文字列を
    # クリップボードに設定する
    system("echo '$clipbord' | pbcopy");

}
else {
    # 入力した文字列が異なって入ればエラー
    print "error\n";
}
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.