ユーザーが提供したデータを含むコンテンツを「sendmail」経由で送信しています。私はperlを使ってそれを呼んでいます、例えば
open(MAIL, "| /usr/sbin/sendmail -fsomeone\@somewhere.com -t ")
print MAIL "the user content..."
close(MAIL)
ここにリスクはありますか?たとえば、ユーザーがコードを挿入する方法でデータをフォーマットしますか?
ユーザーが提供したデータを含むコンテンツを「sendmail」経由で送信しています。私はperlを使ってそれを呼んでいます、例えば
open(MAIL, "| /usr/sbin/sendmail -fsomeone\@somewhere.com -t ")
print MAIL "the user content..."
close(MAIL)
ここにリスクはありますか?たとえば、ユーザーがコードを挿入する方法でデータをフォーマットしますか?
Perlスクリプト自体は、特にこれによって危険にさらされることはありません(「ユーザーコンテンツ」は、たとえば変数のコンテンツを表すと想定しています)。しかし、メールを受け取る人は誰でも、「ユーザーコンテンツ...」が何であれ、それに翻弄されます。
何も悪いことが起こらないようにするには、スクリプトをもっと見る必要があります。Dawid Wheelerの「LinuxおよびUnixHOWTO用の安全なプログラミング」を読んで(そして理解してください)、安全なPerlプログラミングも探してください(おそらくCERT標準が良い出発点です)。
これは、コマンドライン引数の電子メールアドレスがハードコーディングされているか、ユーザーが指定したかによって異なります。
コマンドがハードコーディングされていて、二重引用符で囲まれた文字列を使用する場合、@somewhere
配列は補間されます。これはタイプミスだと思いますが、バックスラッシュされます。
そのアドレスをユーザーが設定できる場合(open MAIL, "| ... -f$adress"
)、これはシェルコードインジェクションに対して脆弱です。$adress = '; rm -rf * ;'
これは、入力の検証、および/または次の複数の引数を使用することで回避できますopen
。
open my $MAIL, "|-", "/usr/bin/sendmail", @args or die ...;
|- -| < > >> +<
)フラグは-t
(iirc)ユーザー入力からヘッダー値を読み取ります。これはスクリプトのセキュリティには影響しませんが、ユーザーが偽のヘッダーを含めることはできます。ユーザーは、スパムなどの目的でスクリプトを悪用できる可能性があります。ヘッダーを自分で作成し、ユーザーがメッセージの本文のみを提供するように制限する方がよい場合があります。