0

ユーザーが提供したデータを含むコンテンツを「sendmail」経由で送信しています。私はperlを使ってそれを呼んでいます、例えば

open(MAIL, "| /usr/sbin/sendmail -fsomeone\@somewhere.com -t ") 
print MAIL "the user content..."
close(MAIL)

ここにリスクはありますか?たとえば、ユーザーがコードを挿入する方法でデータをフォーマットしますか?

4

2 に答える 2

2

Perlスクリプト自体は、特にこれによって危険にさらされることはありません(「ユーザーコンテンツ」は、たとえば変数のコンテンツを表すと想定しています)。しかし、メールを受け取る人は誰でも、「ユーザーコンテンツ...」が何であれ、それに翻弄されます。

何も悪いことが起こらないようにするには、スクリプトをもっと見る必要があります。Dawid Wheelerの「LinuxおよびUnixHOWTO用の安全なプログラミング」を読んで(そして理解してください)、安全なPerlプログラミングも探してください(おそらくCERT標準が良い出発点です)。

于 2013-02-15T18:47:30.573 に答える
0

これは、コマンドライン引数の電子メールアドレスがハードコーディングされているか、ユーザーが指定したかによって異なります。

コマンドがハードコーディングされていて、二重引用符で囲まれた文字列を使用する場合、@somewhere 配列は補間されます。これはタイプミスだと思いますが、バックスラッシュされます。

そのアドレスをユーザーが設定できる場合(open MAIL, "| ... -f$adress")、これはシェルコードインジェクションに対して脆弱です。$adress = '; rm -rf * ;'

これは、入力の検証、および/または次の複数の引数を使用することで回避できますopen

open my $MAIL, "|-", "/usr/bin/sendmail", @args or die ...;
  • 字句ファイルハンドルの方が優れています
  • 個別の引数としての明示的なオープンモードの方が安全です(|- -| < > >> +<
  • コマンドのシェル解釈を回避するための複数の引数。
  • 戻り値のチェック

フラグは-t(iirc)ユーザー入力からヘッダー値を読み取ります。これはスクリプトのセキュリティには影響しませんが、ユーザーが偽のヘッダーを含めることはできます。ユーザーは、スパムなどの目的でスクリプトを悪用できる可能性があります。ヘッダーを自分で作成し、ユーザーがメッセージの本文のみを提供するように制限する方がよい場合があります。

于 2013-02-15T19:09:08.387 に答える