3

CakePHP フレームワークを使用して、php と mysql で Web アプリケーションを実行したいと考えています。また、サイトを使用するしきい値を非常に低い場所に保つために、ユーザー名/パスワードによる標準のログインを使用したくありません. (そして、OpenID のようなものでユーザーを煩わせたくありません。ユーザー タイプに移動します。)

そのため、件名やコンテンツを必要とせずに login@domain.com に電子メールを送信することで、ユーザーがログインできるようになると考えています。そして、返信として、ログインするためのリンクが記載された電子メールを受け取ります (ハッシュが含まれます)。また、ユーザーがサイトにまったくアクセスしなくてもいくつかのアクションを実行できるようにします。command@domain.com でメールを送信するだけで、コマンドが実行されます。私は、ユーザーとその電子メール プロバイダーが電子メール アカウントのセキュリティを管理していると仮定します。そのため、私のサイトではその必要はありません。

さて、人間が読まないアカウントに送信された電子メールから、いくつかのスクリプト (基本的には「ダミー ブラウザ クライアント」が URL を呼び出します (残りは Cakephp が処理します)) が起動されるようにするにはどうすればよいでしょうか?


これまでcronジョブを使用したことはありませんが、その目的や一般的な仕組みは理解していると思います. いくつかの理由で解決策が機能しないため、ランダムにサイトにアクセスする人がスクリプトを呼び出すことはできません。誰かがそれについて何か意見があれば、受信した電子メールへの応答としてスクリプトを実行する可能性についてもっと知りたいと思います. cronジョブとして実行すると、X分ごとにしかチェックされず、ユーザーは応答に遅れが生じます(正しく理解している場合)。

login @domain.com などのコマンドごとに異なるメール アドレスが存在するため、送信者のメールに基づいて何をどのように行うかを知っているため、メールの内容、件名、またはその他のヘッダーは必要ありません。 .


このアプリケーションのセキュリティについては多くの懸念があります。問題は理解していますが、私のコンセプトを明かすことなく、私がやっていることにとって大きな問題だとは思いません。また、ユーザビリティの問題については、実際には何もありません。必要な場合にユーザー プロファイルの変更を提供するためにログインするだけです。これがメインのメールで、非常に覚えやすく、このコンセプト全体の始まりです。

4

10 に答える 10

7

私はpop3 php クラスを使用して大成功を収めました ( Pear POP3 モジュールもあります)。

pop3 クラスを使用すると、次のようになります。

require ('pop3.php');

$pop3 = new pop3_class();
$pop3->hostname = MAILHOST;
$pop3->Open();
$pop3->Login('myemailaddress@mydomain.com', 'mypassword');

foreach($pop3->ListMessages("","") as $msgidx => $msgsize)
{
    $headers = "";
    $body = "";

    $pop3->RetrieveMessage($msgidx, $headers, $body, -1);
}

データベースにフィードする POP3 メールボックスを監視するために使用します。

これは、wget を使用して php スクリプトの URL を呼び出す cronjob によって呼び出されます。

*/5 * * * * "wget -q --http-user=me --http-passwd=pass 'http://mydomain.com/mail.php'" >> /dev/null 2>&1

編集

ユーザーが特定のサイト コマンドを電子メールで送信できるようにする必要性について考えていました。

複数のアドレスを持つよりも、複数のコマンドを送信できる単一のアドレスを持つ方が簡単ではないでしょうか?

セキュリティ上の懸念もかなり有効だと思います。コマンドが非破壊的であるか、ユーザー固有のことを行っていない場合を除き、システムは、電子メールアドレスを偽装する方法を知っている人なら誰にでも広く開かれます (それは誰にとっても :) )。

于 2008-09-05T20:08:59.613 に答える
3

サーバーで許可されている場合は、メールが特定のアドレスに到着したときに、 .forwardファイルまたはProcmailを使用してプロセス (php など) を開始できます。

于 2008-09-08T12:18:19.703 に答える
3

メールボックスを定期的にチェックしてからそれに基づいて動作する、ある種の CronJob/Timer Service が必要になります。または、メールが届いたときにスクリプトを実行できるかどうかメールサーバーをチェックする必要があります (つまり、spamfilter-script を入れて、その機能を「悪用」して代わりにスクリプトを呼び出すことができるかどうかを確認してください)。

純粋な PHP では、何かがスクリプトをトリガーする必要があるため、ほとんど運がありません。大量のトラフィックがあるページでは、index.php などでチェックを行うことができますが、長い間サイトに誰もアクセスしない場合、メールは送信されず、「競合」に注意する必要があります。複数の人が同時にスクリプトにアクセスしている場合の条件」。

編集:使いやすさの欠点を 1 つだけ覚えておいてください。複数の PC を持ち、すべての PC で電子メール クライアントを使用していない人々です。例えば、私は4台のPCを使用していますが、メールクライアントがインストールされているのはメインの1台だけで、他のPCはWebメールで確認しています。現在、ログインして Web メール経由でメールを送信することは、最高の使いやすさではありません。あなたのサイトを使用するには、まず別のサイトにログインし、ほとんどの Web メール ツールが持っている安っぽいインターフェイスを介してメールを作成し、応答を待つ必要があります。そこでOpenIDを使用することもできます:-)

于 2008-09-05T20:07:42.580 に答える
1

私はすべてのセキュリティ上の懸念に同意します。送信者の電子メール アドレスに関しては、「ユーザーとその電子メール プロバイダーが電子メール アカウントのセキュリティを管理する」というあなたの仮定は正しくありません。

しかし、「人間が読まないアカウントに電子メールが送信されてから、スクリプトが起動されるようにする方法」を具体的に尋ねたので、procmail を使用して受信電子メールをスクリプトに配信することをお勧めします。

私は URL を呼び出しません。標準入力で送信されたメッセージを読み取って、スクリプトに作業を実行させます。そうすれば、Web サイトの誰もスクリプトにアクセスできなくなります。

これを設定するには、ユーザーに提供する電子メール アドレスをシステム上の実際のユーザーに関連付ける必要があります。そのユーザーのホーム ディレクトリに、「.procmailrc」というファイルを作成します。

そのファイルに、次の 2 行を追加します。

:0 hb:
| /path/to/program

/path/to/program は、着信メッセージを処理するためのスクリプトまたはプログラムへのフル パスです。次に、次のようなコードでスクリプトを作成します。

#!/usr/bin/php
<?php

$fp=fopen('php://stdin','r');
while($line = fgets($fp)) {
    [do something with each $line of input here]
}

?>

電子メール メッセージはメールボックスに残りません。そのため、保存またはログに記録したい場合は、スクリプトで実行してください。

--
ブルース

于 2008-09-10T20:46:10.107 に答える
1

OpenID でユーザーを悩ませたくはありませんが、この電子メール スキームに対処してもらいたいと考えています。まず、メールは処理に時間がかかる場合があります。電子メールが配信される時間は保証されていません。電子メールがそこに到達することさえ保証されていません。通常は迅速に処理できることは承知していますが、往復が完了するまでに最大 10 分かかることも珍しくありません。また、メールを暗号化している場合を除き、返信するリンクは公開された状態で送信されます。これは、誰でもそのリンクを使用してログインできることを意味します。どれだけ安全にしたいかによって、これは問題になる場合とそうでない場合がありますが、考慮すべきことは間違いありません。このような非標準のログイン方法を使用すると、おそらく価値があるよりもはるかに多くの作業が必要になり、プロセス全体に利点がまったく見られません.

于 2008-09-08T12:37:43.200 に答える
1

また、procmail を使用してスクリプトを開始することも考えていました。ヘッダーの変更や抽出に便利な formail もあります。メール サーバーへの管理者アクセス権がある場合は、/etc/aliases を使用してスクリプトにパイプすることもできます。

使いやすさの問題に加えて、セキュリティについても真剣に考える必要があります。偽の送信者アドレスを使用して電子メールを送信するのは実際には非常に簡単です。

于 2008-09-08T12:46:46.033 に答える
0

私はこのアプローチを真剣に再考します。電子メールの信頼性はあまり高くありません。リンク付きの電子メールを傍受し、「コマンド」を中途半端なものにしてしまう可能性のあるスパムフィルターには、あらゆる種類のものがあります。セキュリティ上のリスクは言うまでもありません。

電子メールの送信者アドレスを偽装するのは非常に簡単です。基本的に、システムを誰にでも開放しています。

また、ユーザー名とパスワードの組み合わせの代わりに、メールアドレスの前に置くコマンドのリストを覚えておくことをユーザーに突然要求しています。ユーザー名とパスワードを提供してから、ヘルプ ページにアクセスできるようにすることをお勧めします。

言い換えれば、このスキームのユーザビリティとセキュリティは非常に低いスコアです。

このアプローチには、大きな欠点を上回るほどの利点がありません。

于 2008-09-08T12:52:45.097 に答える
0

セキュリティと使いやすさとは別に、電子メール配信は別の問題になる可能性があります. ユーザーの電子メール プロバイダーによっては、電子メールの配信が数分から数時間遅れる場合があります。

于 2008-09-17T17:30:12.330 に答える
0

thedailywtf.comには、ソフトウェアの設計に関する非常に優れた教育記事があります。提起された問題は、手帖ウープラではなく、適切な設計によって解決されるべきです。

アレクサンダー、リンクされたストーリーを読んで、電子メールによる Web ページのブラウジングではなく、手袋について考えてください。

PHP はハンマーではありません。

于 2008-09-17T18:44:44.020 に答える
0

スパムを防ぐための 1 つの解決策は、最初の行、最後の行、または特定の行に、パスワードのような特定の文字列が含まれていることを確認することですが、完全な文の方が優れています。

あなただけが単語または単語を持っているので、非常に安全です。使用後にメールと秘密の回線がないメールを削除することを忘れないでください。

于 2008-09-16T19:57:44.760 に答える