bashスクリプトパラメータの悪用は可能ですか?


9

Webフォームからbashスクリプトに電子メールアドレスを渡したいのですが。次の正規表現を使用しています。

/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/

これで十分ですか?または、エクスプロイトを埋め込むことができますか?

スクリプトはPHPから呼び出されます。

system('/usr/local/bin/script.sh "$email"');

4
質問してもうまくいきました。悪用の可能性はありませんが、有効なメールアドレスを拒否して、無効なメールアドレスを受け入れる場合があります。ああ、そしてあなたはあなたの正規表現固定するべきです。
ワイルドカード2016年

1
@Wildcard確かにアンカーの欠如は、正規表現をセキュリティテストとして役に立たなくします。
Gilles「SO-邪悪なことをやめよ」

これは有効なメールアドレスである可能性があります"the doctor"@gallifrey.com。ユーザー名コンポーネントの引用符で囲まれたスペースに注意してください。
roaima 2016年

エクスプロイトについてどの時点で心配していますか?件名には「bash」と書かれているので、$ emailを(引用符で囲まれた)引数としてscript.shに渡すときの拡張や、渡された値のscript.shの処理、または(おそらくPHPベースの)正規表現、または???
Jeff Schaller

スクリプト内で正規表現がどのように使用されているかは明らかではありません。良い分析のために、スクリプトの関連部分を提供してください。
jofel 2016年

回答:


1

PHPで電子メールアドレスをサニタイズおよび検証できます。これは、シェルスクリプトを呼び出すよりも速くて安全です。Webサービスからの無害化されたデータを使用してシェルスクリプトを呼び出すと、壊れる可能性のある別のものが追加されます。

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.\n";
    echo "Before: $email\n";
    echo "After:  $sanitized_email\n";    
} else {
    echo "This sanitized email address is considered invalid.\n";
}

上記の例は、PHP.netサイトの例を基にしています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.